OSDN Git Service

* c-decl.c (merge_decls): Use !current_function_decl to check for
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Jun 2008 15:40:56 +0000 (15:40 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Jun 2008 15:40:56 +0000 (15:40 +0000)
extern declaration of C99 inline function being at file scope.

testsuite:
* gcc.dg/inline-32.c, gcc.dg/inline-32a.c: New tests.

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

gcc/ChangeLog
gcc/c-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/inline-32.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/inline-32a.c [new file with mode: 0644]

index 5e8a970..5258958 100644 (file)
@@ -1,3 +1,8 @@
+2008-06-26  Joseph Myers  <joseph@codesourcery.com>
+
+       * c-decl.c (merge_decls): Use !current_function_decl to check for
+       extern declaration of C99 inline function being at file scope.
+
 2008-06-25  John David Anglin  <dave.anglin@gcc-cnrc.gc.ca>
 
        * config.gcc (hppa[12]*-*-hpux10*): Don't use fixproto.
index 38c1581..18ad119 100644 (file)
@@ -1764,8 +1764,7 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
          || !DECL_EXTERNAL (olddecl))
       && DECL_EXTERNAL (newdecl)
       && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (newdecl))
-      && (DECL_CONTEXT (newdecl) == NULL_TREE
-         || TREE_CODE (DECL_CONTEXT (newdecl)) != FUNCTION_DECL))
+      && !current_function_decl)
     DECL_EXTERNAL (newdecl) = 0;
 
   if (DECL_EXTERNAL (newdecl))
index d2df699..01a008f 100644 (file)
@@ -1,3 +1,7 @@
+2008-06-26  Joseph Myers  <joseph@codesourcery.com>
+
+       * gcc.dg/inline-32.c, gcc.dg/inline-32a.c: New tests.
+
 2008-06-26  Ira Rosen  <irar@il.ibm.com>
 
        * testsuite/lib/target-supports.exp
diff --git a/gcc/testsuite/gcc.dg/inline-32.c b/gcc/testsuite/gcc.dg/inline-32.c
new file mode 100644 (file)
index 0000000..bfcafd5
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do link } */
+/* { dg-options "-std=c99 -pedantic-errors" } */
+/* { dg-additional-sources inline-32a.c } */
+inline int f (void) { return 0; }
+
+int
+main (void)
+{
+  extern int f();
+  return f ();
+}
diff --git a/gcc/testsuite/gcc.dg/inline-32a.c b/gcc/testsuite/gcc.dg/inline-32a.c
new file mode 100644 (file)
index 0000000..a2bde0a
--- /dev/null
@@ -0,0 +1,3 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c99 -pedantic-errors" } */
+int f (void) { return 0; }