* decl.c (decls_match): Check versions later.
From-SVN: r195921
This commit is contained in:
parent
d982e0246a
commit
8d40d877c0
2 changed files with 31 additions and 30 deletions
|
@ -1,5 +1,7 @@
|
|||
2013-02-09 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* decl.c (decls_match): Check versions later.
|
||||
|
||||
PR c++/56238
|
||||
* pt.c (build_non_dependent_expr): Don't try to fold
|
||||
instantiation-dependent expressions.
|
||||
|
|
|
@ -976,36 +976,6 @@ decls_match (tree newdecl, tree olddecl)
|
|||
if (t1 != t2)
|
||||
return 0;
|
||||
|
||||
/* The decls dont match if they correspond to two different versions
|
||||
of the same function. Disallow extern "C" functions to be
|
||||
versions for now. */
|
||||
if (compparms (p1, p2)
|
||||
&& same_type_p (TREE_TYPE (f1), TREE_TYPE (f2))
|
||||
&& !DECL_EXTERN_C_P (newdecl)
|
||||
&& !DECL_EXTERN_C_P (olddecl)
|
||||
&& targetm.target_option.function_versions (newdecl, olddecl))
|
||||
{
|
||||
/* Mark functions as versions if necessary. Modify the mangled decl
|
||||
name if necessary. */
|
||||
if (DECL_FUNCTION_VERSIONED (newdecl)
|
||||
&& DECL_FUNCTION_VERSIONED (olddecl))
|
||||
return 0;
|
||||
if (!DECL_FUNCTION_VERSIONED (newdecl))
|
||||
{
|
||||
DECL_FUNCTION_VERSIONED (newdecl) = 1;
|
||||
if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
|
||||
mangle_decl (newdecl);
|
||||
}
|
||||
if (!DECL_FUNCTION_VERSIONED (olddecl))
|
||||
{
|
||||
DECL_FUNCTION_VERSIONED (olddecl) = 1;
|
||||
if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
|
||||
mangle_decl (olddecl);
|
||||
}
|
||||
record_function_versions (olddecl, newdecl);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
|
||||
&& ! (DECL_EXTERN_C_P (newdecl)
|
||||
&& DECL_EXTERN_C_P (olddecl)))
|
||||
|
@ -1063,6 +1033,35 @@ decls_match (tree newdecl, tree olddecl)
|
|||
}
|
||||
else
|
||||
types_match = 0;
|
||||
|
||||
/* The decls dont match if they correspond to two different versions
|
||||
of the same function. Disallow extern "C" functions to be
|
||||
versions for now. */
|
||||
if (types_match
|
||||
&& !DECL_EXTERN_C_P (newdecl)
|
||||
&& !DECL_EXTERN_C_P (olddecl)
|
||||
&& targetm.target_option.function_versions (newdecl, olddecl))
|
||||
{
|
||||
/* Mark functions as versions if necessary. Modify the mangled decl
|
||||
name if necessary. */
|
||||
if (DECL_FUNCTION_VERSIONED (newdecl)
|
||||
&& DECL_FUNCTION_VERSIONED (olddecl))
|
||||
return 0;
|
||||
if (!DECL_FUNCTION_VERSIONED (newdecl))
|
||||
{
|
||||
DECL_FUNCTION_VERSIONED (newdecl) = 1;
|
||||
if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
|
||||
mangle_decl (newdecl);
|
||||
}
|
||||
if (!DECL_FUNCTION_VERSIONED (olddecl))
|
||||
{
|
||||
DECL_FUNCTION_VERSIONED (olddecl) = 1;
|
||||
if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
|
||||
mangle_decl (olddecl);
|
||||
}
|
||||
record_function_versions (olddecl, newdecl);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue