http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57374

            Bug ID: 57374
           Summary: c+11 attribute noreturn does not blend well
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: akim.demaille at gmail dot com

Hi!

I meant to use [[noreturn]] instead of __attribute__((noreturn)) (as it is my
understanding from reading http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53528
that it was meant to be so (but maybe not yet implemented).

FWIW, support for [[noreturn]] in 4.8 and 4.9 seems incomplete.


$ cat /tmp/foo.cc
void die() [[noreturn]];
void die() { throw 1; }

void and_again() [[noreturn]] { throw 2; }

void please_die() [[gnu::noreturn]] { throw 3; }
$ g++-mp-4.8 -Wall -Wsuggest-attribute=noreturn -c -std=c++11 /tmp/foo.cc
/tmp/foo.cc:1:23: warning: 'noreturn' attribute directive ignored
[-Wattributes]
 void die() [[noreturn]];
                       ^
/tmp/foo.cc:4:29: warning: 'noreturn' attribute directive ignored
[-Wattributes]
 void and_again() [[noreturn]] { throw 2; }
                             ^
/tmp/foo.cc:6:35: warning: attribute ignored [-Wattributes]
 void please_die() [[gnu::noreturn]] { throw 3; }
                                   ^
/tmp/foo.cc:6:35: note: an attribute that appertains to a type-specifier is
ignored
/tmp/foo.cc: In function 'void die()':
/tmp/foo.cc:2:6: warning: function might be candidate for attribute 'noreturn'
[-Wsuggest-attribute=noreturn]
 void die() { throw 1; }
      ^
/tmp/foo.cc: In function 'void and_again()':
/tmp/foo.cc:4:6: warning: function might be candidate for attribute 'noreturn'
[-Wsuggest-attribute=noreturn]
 void and_again() [[noreturn]] { throw 2; }
      ^
/tmp/foo.cc: In function 'void please_die()':
/tmp/foo.cc:6:6: warning: function might be candidate for attribute 'noreturn'
[-Wsuggest-attribute=noreturn]
 void please_die() [[gnu::noreturn]] { throw 3; }
      ^
$

Using __attribute__, things work as expected.

Reply via email to