re PR c/63453 (Bogus warning for gnu_inline functions)
authorMarek Polacek <polacek@redhat.com>
Fri, 3 Oct 2014 20:14:48 +0000 (20:14 +0000)
committerMarek Polacek <mpolacek@gcc.gnu.org>
Fri, 3 Oct 2014 20:14:48 +0000 (20:14 +0000)
PR c/63453
* c-decl.c (pop_scope): Don't warn about "inline function declared
but never defined" for functions marked with gnu_inline attribute.

* gcc.dg/pr63453.c: New test.

From-SVN: r215874

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

index cb69773247c17d15e782b266dfa97983a7f513e6..519aad0cff81cf2c97e9b2cadafc3b97930f4b21 100644 (file)
@@ -1,3 +1,9 @@
+2014-10-03  Marek Polacek  <polacek@redhat.com>
+
+       PR c/63453
+       * c-decl.c (pop_scope): Don't warn about "inline function declared
+       but never defined" for functions marked with gnu_inline attribute.
+
 2014-09-25  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/63249
index b4995a67733c6c74cdba559cced0e43a774559b9..ce5a8deecb8257acb49f2e2a50f5b82cea3f185d 100644 (file)
@@ -1177,7 +1177,8 @@ pop_scope (void)
              /* C99 6.7.4p6: "a function with external linkage... declared
                 with an inline function specifier ... shall also be defined
                 in the same translation unit."  */
-             if (!flag_gnu89_inline)
+             if (!flag_gnu89_inline
+                 && !lookup_attribute ("gnu_inline", DECL_ATTRIBUTES (p)))
                pedwarn (input_location, 0,
                         "inline function %q+D declared but never defined", p);
              DECL_EXTERNAL (p) = 1;
index 4c4c6049018f32782e99e13bf6d1227f4e71bed5..b8611ff079328deae34ae1595cac4db3e34418b4 100644 (file)
@@ -1,3 +1,8 @@
+2014-10-03  Marek Polacek  <polacek@redhat.com>
+
+       PR c/63453
+       * gcc.dg/pr63453.c: New test.
+
 2014-10-03  Marc Glisse  <marc.glisse@inria.fr>
 
        PR c++/54427
diff --git a/gcc/testsuite/gcc.dg/pr63453.c b/gcc/testsuite/gcc.dg/pr63453.c
new file mode 100644 (file)
index 0000000..e6337aa
--- /dev/null
@@ -0,0 +1,8 @@
+/* PR c/63453 */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu11" } */
+
+inline int fn1 (void); /* { dg-warning "declared but never defined" } */
+extern inline int fn2 (void); /* { dg-warning "declared but never defined" } */
+inline int __attribute__ ((gnu_inline)) fn3 (void);
+extern inline int __attribute__ ((gnu_inline)) fn4 (void);