* c-decl.c (WANT_C99_INLINE_SEMANTICS): New, set to 1.
authorgeoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 4 Nov 2006 02:59:52 +0000 (02:59 +0000)
committergeoffk <geoffk@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 4 Nov 2006 02:59:52 +0000 (02:59 +0000)
(merge_decls): Implement WANT_C99_INLINE_SEMANTICS.
(grokdeclarator): Likewise.

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

gcc/ChangeLog
gcc/c-decl.c

index 5ecfc7a..67734b0 100644 (file)
@@ -1,3 +1,9 @@
+2006-11-03  Geoffrey Keating  <geoffk@apple.com>
+
+       * c-decl.c (WANT_C99_INLINE_SEMANTICS): New, set to 1.
+       (merge_decls): Implement WANT_C99_INLINE_SEMANTICS.
+       (grokdeclarator): Likewise.
+
 2006-11-03  Steven Bosscher  <steven@gcc.gnu.org>
 
        * tree-dump.c (dump_enable_all): Rename local variable
index 34709df..a49b88b 100644 (file)
@@ -62,6 +62,12 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 #include "langhooks-def.h"
 #include "pointer-set.h"
 
+/* Set this to 1 if you want the standard ISO C99 semantics of 'inline'
+   when you specify -std=c99 or -std=gnuc99, and to 0 if you want
+   behaviour compatible with the nonstandard semantics implemented by
+   GCC 2.95 through 4.2.  */
+#define WANT_C99_INLINE_SEMANTICS 1
+
 /* In grokdeclarator, distinguish syntactic contexts of declarators.  */
 enum decl_context
 { NORMAL,                      /* Ordinary declaration */
@@ -1760,6 +1766,7 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
        }
     }
 
+#if WANT_C99_INLINE_SEMANTICS
    /* In c99, 'extern' declaration before (or after) 'inline' means this
       function is not DECL_EXTERNAL.  */
    if (TREE_CODE (newdecl) == FUNCTION_DECL
@@ -1771,6 +1778,7 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
        && DECL_EXTERNAL (newdecl)
        && flag_isoc99)
      DECL_EXTERNAL (newdecl) = 0;
+#endif /* WANT_C99_INLINE_SEMANTICS */
 
   if (DECL_EXTERNAL (newdecl))
     {
@@ -4772,7 +4780,11 @@ grokdeclarator (const struct c_declarator *declarator,
           in this file, C99 6.7.4p6.  In GNU C89, a function declared
           'extern inline' is an external reference.  */
        else if (declspecs->inline_p && storage_class != csc_static)
+#if WANT_C99_INLINE_SEMANTICS
          DECL_EXTERNAL (decl) = (storage_class == csc_extern) == !flag_isoc99;
+#else
+         DECL_EXTERNAL (decl) = (storage_class == csc_extern);
+#endif
        else
          DECL_EXTERNAL (decl) = !initialized;