Commit a3c49752 by Jason Merrill Committed by Jason Merrill

mangle.c (write_expression): Mangle dependent name as source-name.

        * mangle.c (write_expression): Mangle dependent name as
        source-name.

From-SVN: r145364
parent d236ace7
2009-03-30 Jason Merrill <jason@redhat.com>
2009-03-31 Jason Merrill <jason@redhat.com>
* mangle.c (write_expression): Mangle dependent name as
source-name.
PR c++/38030, 38850, 39070
* pt.c (type_dependent_expression_p_push): New fn.
......
......@@ -2159,12 +2159,6 @@ write_expression (tree expr)
code = TREE_CODE (expr);
}
if (code == OVERLOAD)
{
expr = OVL_FUNCTION (expr);
code = TREE_CODE (expr);
}
/* Handle pointers-to-members by making them look like expression
nodes. */
if (code == PTRMEM_CST)
......@@ -2344,7 +2338,25 @@ write_expression (tree expr)
switch (code)
{
case CALL_EXPR:
write_expression (CALL_EXPR_FN (expr));
{
tree fn = CALL_EXPR_FN (expr);
if (TREE_CODE (fn) == ADDR_EXPR)
fn = TREE_OPERAND (fn, 0);
/* Mangle a dependent name as the name, not whatever happens to
be the first function in the overload set. */
if ((TREE_CODE (fn) == FUNCTION_DECL
|| TREE_CODE (fn) == OVERLOAD)
&& type_dependent_expression_p_push (expr))
fn = DECL_NAME (get_first_fn (fn));
if (TREE_CODE (fn) == IDENTIFIER_NODE)
write_source_name (fn);
else
write_expression (fn);
}
for (i = 0; i < call_expr_nargs (expr); ++i)
write_expression (CALL_EXPR_ARG (expr, i));
write_char ('E');
......
2009-03-31 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/auto6.C: Adjust expected mangling.
* g++.dg/cpp0x/auto12.C: Likewise.
2009-03-31 Richard Guenther <rguenther@suse.de>
PR middle-end/31029
......
......@@ -58,6 +58,6 @@ int main()
A<int>().h(1);
// { dg-final { scan-assembler "_ZN1AIiE1jIiEEDTplfp_clL_Z1xvEEET_" } }
A<int>().j(1);
// { dg-final { scan-assembler "_Z1gIIidEEDTclL_Z1fEspplfp_Li1EEEDpT_" } }
// { dg-final { scan-assembler "_Z1gIIidEEDTcl1fspplfp_Li1EEEDpT_" } }
g(42, 1.0);
}
......@@ -101,7 +101,7 @@ int main()
auto i4 = add4(1, 2.0);
// { dg-final { scan-assembler "_Z4add2IidEDTplcvT__EcvT0__EES0_S1_" } }
auto i2 = add2(1, 2.0);
// { dg-final { scan-assembler "_Z4add3IidEDTclL_Z2agEfp_fp0_EET_T0_" } }
// { dg-final { scan-assembler "_Z4add3IidEDTcl2agfp_fp0_EET_T0_" } }
auto i3 = add3(1, 2.0);
// { dg-final { scan-assembler "_Z1fI1AIiEEDTclptfp_1fEEPT_" } }
f(p);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment