OSDN Git Service

PR c++/52521
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Mar 2012 20:16:16 +0000 (20:16 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 7 Mar 2012 20:16:16 +0000 (20:16 +0000)
* mangle.c (write_literal_operator_name): The length comes after the
operator prefix.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@185077 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/mangle.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C [new file with mode: 0644]

index 6a92eeb..b6c72fc 100644 (file)
@@ -1,3 +1,9 @@
+2012-03-07  Jason Merrill  <jason@redhat.com>
+
+       PR c++/52521
+       * mangle.c (write_literal_operator_name): The length comes after the
+       operator prefix.
+
 2012-02-29  Jason Merrill  <jason@redhat.com>
 
        PR c++/51930
 2012-02-29  Jason Merrill  <jason@redhat.com>
 
        PR c++/51930
index 34f19ef..9c328b2 100644 (file)
@@ -1292,18 +1292,16 @@ write_source_name (tree identifier)
 }
 
 /* Write a user-defined literal operator.
 }
 
 /* Write a user-defined literal operator.
+          ::= li <source-name>    # "" <source-name>
    IDENTIFIER is an LITERAL_IDENTIFIER_NODE.  */
 
 static void
 write_literal_operator_name (tree identifier)
 {
   const char* suffix = UDLIT_OP_SUFFIX (identifier);
    IDENTIFIER is an LITERAL_IDENTIFIER_NODE.  */
 
 static void
 write_literal_operator_name (tree identifier)
 {
   const char* suffix = UDLIT_OP_SUFFIX (identifier);
-  char* buffer = XNEWVEC (char, strlen (UDLIT_OP_MANGLED_PREFIX)
-                             + strlen (suffix) + 10);
-  sprintf (buffer, UDLIT_OP_MANGLED_FORMAT, suffix);
-
-  write_unsigned_number (strlen (buffer));
-  write_identifier (buffer);
+  write_identifier (UDLIT_OP_MANGLED_PREFIX);
+  write_unsigned_number (strlen (suffix));
+  write_identifier (suffix);
 }
 
 /* Encode 0 as _, and 1+ as n-1_.  */
 }
 
 /* Encode 0 as _, and 1+ as n-1_.  */
index 4ffc13b..0f56e01 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-07  Jason Merrill  <jason@redhat.com>
+
+       PR c++/52521
+       * g++.dg/cpp0x/udlit-mangle.C: New.
+
 2012-03-04  Georg-Johann Lay  <avr@gjlay.de>
 
        Backport from mainline r184894.
 2012-03-04  Georg-Johann Lay  <avr@gjlay.de>
 
        Backport from mainline r184894.
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C b/gcc/testsuite/g++.dg/cpp0x/udlit-mangle.C
new file mode 100644 (file)
index 0000000..6de31b6
--- /dev/null
@@ -0,0 +1,8 @@
+// PR c++/52521
+// { dg-options -std=c++0x }
+// { dg-final { scan-assembler "_Zli2_wPKc" } }
+
+int operator "" _w(const char*);
+int main() {
+  123_w;
+}