From: Nathan Sidwell Date: Fri, 28 Mar 2003 08:02:15 +0000 (+0000) Subject: re PR c++/10047 (-fno-default-inline produces bogus warnings) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=433cd9c9cb32d90aa5747bcc47d821ed8b8287b5;p=gcc.git re PR c++/10047 (-fno-default-inline produces bogus warnings) cp: PR c++/10047 * decl2.c (finish_file): Don't warn about explicitly instantiated inline decls. testsuite: PR c++/10047 * g++.dg/template/inline1.C: New test. From-SVN: r64953 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c7476790499..888d4dcc512 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-03-28 Nathan Sidwell + + PR c++/10047 + * decl2.c (finish_file): Don't warn about explicitly instantiated + inline decls. + 2003-03-27 Nathan Sidwell PR c++/10224 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 9f5e27eec90..77b9636a570 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2814,7 +2814,11 @@ finish_file () tree decl = VARRAY_TREE (deferred_fns, i); if (TREE_USED (decl) && DECL_DECLARED_INLINE_P (decl) - && !(TREE_ASM_WRITTEN (decl) || DECL_SAVED_TREE (decl))) + && !(TREE_ASM_WRITTEN (decl) || DECL_SAVED_TREE (decl) + /* An explicit instantiation can be used to specify + that the body is in another unit. It will have + already verified there was a definition. */ + || DECL_EXPLICIT_INSTANTIATION (decl))) { cp_warning_at ("inline function `%D' used but never defined", decl); /* This symbol is effectively an "extern" declaration now. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3794bdd2f6b..ce854a354ab 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-03-28 Nathan Sidwell + + PR c++/10047 + * g++.dg/template/inline1.C: New test. + 2003-03-28 Eric Botcazou * gcc.dg/sparc-dwarf2.c: New test. diff --git a/gcc/testsuite/g++.dg/template/inline1.C b/gcc/testsuite/g++.dg/template/inline1.C new file mode 100644 index 00000000000..c5e39bb2738 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/inline1.C @@ -0,0 +1,20 @@ +// { dg-do compile } +// { dg-options "-fno-default-inline -O0" } +// { dg-final { scan-assembler-not _ZN1X3FooIiEEvT_: } } + +// Copyright (C) 2003 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 27 Mar 2003 + +// PR 10047. bogus warning. + +struct X +{ + template static void Foo (T) {} +}; + +extern template void X::Foo (int); // extern, so don't emit it + +int main () { + X::Foo (1); // ok, we've seen the defn +} +