OSDN Git Service

* c-decl.c (grokdeclarator): Diagnose _Noreturn for non-C1X if
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Aug 2011 13:25:51 +0000 (13:25 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Aug 2011 13:25:51 +0000 (13:25 +0000)
pedantic.
* c-parser.c (c_parser_declspecs): Include _Noreturn in syntax
comment.
* ginclude/stdnoreturn.h (noreturn): Don't define for C++.

testsuite:
* gcc.dg/c90-noreturn-1.c, gcc.dg/c99-noreturn-1.c: New tests.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@177899 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/c-decl.c
gcc/c-parser.c
gcc/ginclude/stdnoreturn.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/c90-noreturn-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c99-noreturn-1.c [new file with mode: 0644]

index be47b95..9a8d24f 100644 (file)
@@ -1,5 +1,13 @@
 2011-08-19  Joseph Myers  <joseph@codesourcery.com>
 
+       * c-decl.c (grokdeclarator): Diagnose _Noreturn for non-C1X if
+       pedantic.
+       * c-parser.c (c_parser_declspecs): Include _Noreturn in syntax
+       comment.
+       * ginclude/stdnoreturn.h (noreturn): Don't define for C++.
+
+2011-08-19  Joseph Myers  <joseph@codesourcery.com>
+
        * opth-gen.awk: Do not declare target save/restore structures and
        functions if IN_RTS defined.
 
index d824e12..d683d4e 100644 (file)
@@ -5986,7 +5986,18 @@ grokdeclarator (const struct c_declarator *declarator,
              /* Record that the function is declared `inline'.  */
              DECL_DECLARED_INLINE_P (decl) = 1;
            if (declspecs->noreturn_p)
-             TREE_THIS_VOLATILE (decl) = 1;
+             {
+               if (!flag_isoc1x)
+                 {
+                   if (flag_isoc99)
+                     pedwarn (loc, OPT_pedantic,
+                              "ISO C99 does not support %<_Noreturn%>");
+                   else
+                     pedwarn (loc, OPT_pedantic,
+                              "ISO C90 does not support %<_Noreturn%>");
+                 }
+               TREE_THIS_VOLATILE (decl) = 1;
+             }
          }
       }
     else
index d0f8fba..8d7bb99 100644 (file)
@@ -1905,6 +1905,9 @@ c_parser_static_assert_declaration_no_semi (c_parser *parser)
    C99 6.7.4:
    function-specifier:
      inline
+     _Noreturn
+
+   (_Noreturn is new in C1X.)
 
    C90 6.5.2, C99 6.7.2:
    type-specifier:
index c92537c..3efbd8a 100644 (file)
@@ -26,6 +26,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #ifndef _STDNORETURN_H
 #define _STDNORETURN_H
 
+#ifndef __cplusplus
+
 #define noreturn _Noreturn
 
+#endif
+
 #endif /* stdnoreturn.h */
index 8d26536..23b70e8 100644 (file)
@@ -1,3 +1,7 @@
+2011-08-19  Joseph Myers  <joseph@codesourcery.com>
+
+       * gcc.dg/c90-noreturn-1.c, gcc.dg/c99-noreturn-1.c: New tests.
+
 2011-08-19  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * gcc.dg/builtins-67.c: Use dg-add-options c99_runtime.
diff --git a/gcc/testsuite/gcc.dg/c90-noreturn-1.c b/gcc/testsuite/gcc.dg/c90-noreturn-1.c
new file mode 100644 (file)
index 0000000..87b832e
--- /dev/null
@@ -0,0 +1,5 @@
+/* Test _Noreturn not in C90.  */
+/* { dg-do compile } */
+/* { dg-options "-std=iso9899:1990 -pedantic-errors" } */
+
+_Noreturn void f (void); /* { dg-error "ISO C90 does not support '_Noreturn'" } */
diff --git a/gcc/testsuite/gcc.dg/c99-noreturn-1.c b/gcc/testsuite/gcc.dg/c99-noreturn-1.c
new file mode 100644 (file)
index 0000000..4cbc513
--- /dev/null
@@ -0,0 +1,5 @@
+/* Test _Noreturn not in C99.  */
+/* { dg-do compile } */
+/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
+
+_Noreturn void f (void); /* { dg-error "ISO C99 does not support '_Noreturn'" } */