]> gcc.gnu.org Git - gcc.git/commitdiff
mangle.c (write_expression): Mangle dependent name as source-name.
authorJason Merrill <jason@redhat.com>
Tue, 31 Mar 2009 16:52:21 +0000 (12:52 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 31 Mar 2009 16:52:21 +0000 (12:52 -0400)
        * mangle.c (write_expression): Mangle dependent name as
        source-name.

From-SVN: r145364

gcc/cp/ChangeLog
gcc/cp/mangle.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/auto12.C
gcc/testsuite/g++.dg/cpp0x/auto6.C

index 66ac60edd4b59d73f34f430a09658e3e99cf47d5..033a8f1362841c0a734751d5cc02ad283b90b32a 100644 (file)
@@ -1,4 +1,7 @@
-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.
index eabab7fb5103cf7e648a3d70f2c2f375188ad76e..5f2ace0cbb103447c75bf8bf78e77974ee396b1d 100644 (file)
@@ -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');
index 19cf3d6691d1003fae5a8f857642574eaa11e168..43ae63df6bd560c36bda6fbd9099345d2bfebcfd 100644 (file)
@@ -1,3 +1,8 @@
+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
index 34dc8c90b84f3c6f816bd6e8afcb68a21cd59d16..82d36f0d0d2e2d77a26be94194a16dd73e396d18 100644 (file)
@@ -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);
 }
index dfd6a2026981b584c7c7be4a16b28a6d71b772f1..11e73d2e716975911b0ede1004528bda95f17805 100644 (file)
@@ -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);
This page took 0.085329 seconds and 5 git commands to generate.