re PR c++/17256 (undefined but used static or inline functions should be diagnosed)
PR c++/17256 * decl2.c (cp_finish_file): Fix conditions for undefined warning. Set TREE_NO_WARNING instead of TREE_PUBLIC. * pt.c (instantiate_pending_templates): Set DECL_INITIAL to avoid a warning on a function we didn't instantiate because of excessive recursion. Co-Authored-By: James A. Morrison <phython@gcc.gnu.org> From-SVN: r106581
This commit is contained in:
parent
c0572427ed
commit
96c993a890
|
@ -1,3 +1,13 @@
|
|||
2005-11-06 Jason Merrill <jason@redhat.com>
|
||||
James A. Morrison <phython@gcc.gnu.org>
|
||||
|
||||
PR c++/17256
|
||||
* decl2.c (cp_finish_file): Fix conditions for undefined warning.
|
||||
Set TREE_NO_WARNING instead of TREE_PUBLIC.
|
||||
* pt.c (instantiate_pending_templates): Set DECL_INITIAL to avoid
|
||||
a warning on a function we didn't instantiate because of excessive
|
||||
recursion.
|
||||
|
||||
2005-11-06 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* class.c (record_subobject_offsets): Don't record offsets past
|
||||
|
|
|
@ -3062,8 +3062,6 @@ cp_finish_file (void)
|
|||
{
|
||||
if (/* Check online inline functions that were actually used. */
|
||||
TREE_USED (decl) && DECL_DECLARED_INLINE_P (decl)
|
||||
/* But not defined. */
|
||||
&& DECL_REALLY_EXTERN (decl)
|
||||
/* If the definition actually was available here, then the
|
||||
fact that the function was not defined merely represents
|
||||
that for some reason (use of a template repository,
|
||||
|
@ -3076,10 +3074,8 @@ cp_finish_file (void)
|
|||
&& !DECL_EXPLICIT_INSTANTIATION (decl))
|
||||
{
|
||||
warning (0, "inline function %q+D used but never defined", decl);
|
||||
/* This symbol is effectively an "extern" declaration now.
|
||||
This is not strictly necessary, but removes a duplicate
|
||||
warning. */
|
||||
TREE_PUBLIC (decl) = 1;
|
||||
/* Avoid a duplicate warning from check_global_declaration_1. */
|
||||
TREE_NO_WARNING (decl) = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -11813,10 +11813,15 @@ instantiate_pending_templates (int retries)
|
|||
to avoid infinite loop. */
|
||||
if (pending_templates && retries >= max_tinst_depth)
|
||||
{
|
||||
tree decl = TREE_VALUE (pending_templates);
|
||||
|
||||
error ("template instantiation depth exceeds maximum of %d"
|
||||
" instantiating %q+D, possibly from virtual table generation"
|
||||
" (use -ftemplate-depth-NN to increase the maximum)",
|
||||
max_tinst_depth, TREE_VALUE (pending_templates));
|
||||
max_tinst_depth, decl);
|
||||
if (TREE_CODE (decl) == FUNCTION_DECL)
|
||||
/* Pretend that we defined it. */
|
||||
DECL_INITIAL (decl) = error_mark_node;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
// PR 17256
|
||||
|
||||
inline static void f1(void); // { dg-warning "used but never" }
|
||||
void g1(void) { if (0) { f1(); } }
|
||||
|
||||
inline void f2(void); // { dg-warning "used but never" }
|
||||
void g2(void) { if (0) { f2(); } }
|
Loading…
Reference in New Issue