stdcxx-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Sebor (JIRA)" <>
Subject [jira] Created: (STDCXX-998) add throw() exception specification to all non-throwing functions
Date Mon, 21 Jul 2008 17:23:32 GMT
add throw() exception specification to all non-throwing functions

                 Key: STDCXX-998
             Project: C++ Standard Library
          Issue Type: Improvement
          Components: Build and Installation
    Affects Versions: 4.2.1
            Reporter: Martin Sebor
            Priority: Critical
             Fix For: 4.2.2

When a compiler cannot determine whether a function declared without an explicit exception
specification may throw an exception or not (e.g., because the compiler/optimizer doesn't
have access to the definition of the function) it must assume that the function may throw
and may need to generate suboptimal code as a result.

Compilers often assume that even inline functions that can be proven not to throw exceptions
may throw unless they are declared with the empty exception specification and generates suboptimal
code as a result. For example, HP aCC 6 assumes that {{S::S()}} in the code below may throw
and fails to optimize the catch block away, generating object code 2.5 times the size bigger
than necessary. (Note that gcc 3.4 on IPF generates optimal code in this case).

To help compilers generate optimal code we should make use of the empty exception specification
on all functions that cannot throw exceptions, including those declared explicitly or implicitly

#include <new>

struct S {
    int i;
    S () /* throw () */: i () { }

void uninit_fill (S *a, S *b)
    S *p = a;

    try {
        for ( ; p != b; ++p)
            new (p) S ();
    catch (...) {
        while (p-- != a)
            p->~S ();

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message