re PR c++/17530 (failure to emit inline function)

PR c++/17530
	* pt.c (tsubst): Fix parentheses to accomodate emacs.
	(tsubst_baselink): If we get a single function, mark it as used.

	PR c++/17530
	* g++.dg/template/static7.C: New test.

From-SVN: r87791
This commit is contained in:
Mark Mitchell 2004-09-21 05:44:10 +00:00 committed by Mark Mitchell
parent 79b82df36c
commit 9b60dfd716
4 changed files with 42 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2004-09-20 Mark Mitchell <mark@codesourcery.com>
PR c++/17530
* pt.c (tsubst): Fix parentheses to accomodate emacs.
(tsubst_baselink): If we get a single function, mark it as used.
2004-09-20 Matt Austern <austern@apple.com>
Zack Weinberg <zack@codesourcery.com>

View File

@ -7007,11 +7007,12 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
single bad template instantiation. */
if (complain & tf_error
#ifdef USE_MAPPED_LOCATION
&& last_loc != input_location)
&& last_loc != input_location
#else
&& (last_loc.line != input_line
|| last_loc.file != input_filename))
|| last_loc.file != input_filename)
#endif
)
{
if (TREE_CODE (type) == VOID_TYPE)
error ("forming reference to void");
@ -7323,11 +7324,23 @@ tsubst_baselink (tree baselink, tree object_type,
}
name = DECL_NAME (get_first_fn (fns));
baselink = lookup_fnfields (qualifying_scope, name, /*protect=*/1);
/* If lookup found a single function, mark it as used at this
point. (If it lookup found multiple functions the one selected
later by overload resolution will be marked as used at that
point.) */
if (BASELINK_P (baselink))
fns = BASELINK_FUNCTIONS (baselink);
if (!template_id_p && !really_overloaded_fn (fns))
mark_used (OVL_CURRENT (fns));
/* Add back the template arguments, if present. */
if (BASELINK_P (baselink) && template_id_p)
BASELINK_FUNCTIONS (baselink)
= build_nt (TEMPLATE_ID_EXPR,
BASELINK_FUNCTIONS (baselink),
template_args);
if (!object_type)
object_type = current_class_type;
return adjust_result_of_qualified_name_lookup (baselink,

View File

@ -1,3 +1,8 @@
2004-09-20 Mark Mitchell <mark@codesourcery.com>
PR c++/17530
* g++.dg/template/static7.C: New test.
2004-09-20 Andrew Pinski <pinskia@physics.uc.edu>
PR tree-opt/17558

View File

@ -0,0 +1,16 @@
// PR c++/17530
// { dg-do link }
typedef void (*Func) ();
void f (Func) {}
struct B
{
static void staticfunc () {}
};
template <int>
void C(){ f (B::staticfunc); }
int main ()
{
C<0>();
return 0;
}