re PR c++/58072 ([C++11] Error messages involving user-defined literals are poor...
authorEd Smith-Rowland <3dw4rd@verizon.net>
Sun, 4 Aug 2013 19:11:21 +0000 (19:11 +0000)
committerEdward Smith-Rowland <emsr@gcc.gnu.org>
Sun, 4 Aug 2013 19:11:21 +0000 (19:11 +0000)
gcc/c-family:

2013-08-04  Ed Smith-Rowland  <3dw4rd@verizon.net>

PR c++/58072
* c-common.c (c_parse_error): Catch user-defined literal tokens and
provide useful error strings.

gcc/testsuite:

2013-08-04  Ed Smith-Rowland  <3dw4rd@verizon.net>

PR c++/58072
* g++.dg/cpp0x/pr58072.C: New.

From-SVN: r201475

gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/pr58072.C [new file with mode: 0644]

index 019ee80736a878d29967e3e365bb632b8f8db900..d8ca539b3fc8394b8b12c5e4ba46bec9db75cfb7 100644 (file)
@@ -1,3 +1,9 @@
+2013-08-04  Ed Smith-Rowland  <3dw4rd@verizon.net>
+
+       PR c++/58072
+       * c-common.c (c_parse_error): Catch user-defined literal tokens and
+       provide useful error strings.
+
 2013-08-03  Gabriel Dos Reis  <gdr@integrable-solutions.net>
 
        * c-ada-spec.c (pp_ada_tree_identifier): Use specialized pretty
index 7bba376f36901b047d4641985aa3c3d91489d425..2c806abe47033161879b9462c34cc037275a4b12 100644 (file)
@@ -9352,6 +9352,18 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token_type,
       free (message);
       message = NULL;
     }
+  else if (token_type == CPP_CHAR_USERDEF
+          || token_type == CPP_WCHAR_USERDEF
+          || token_type == CPP_CHAR16_USERDEF
+          || token_type == CPP_CHAR32_USERDEF)
+    message = catenate_messages (gmsgid,
+                                " before user-defined character literal");
+  else if (token_type == CPP_STRING_USERDEF
+          || token_type == CPP_WSTRING_USERDEF
+          || token_type == CPP_STRING16_USERDEF
+          || token_type == CPP_STRING32_USERDEF
+          || token_type == CPP_UTF8STRING_USERDEF)
+    message = catenate_messages (gmsgid, " before user-defined string literal");
   else if (token_type == CPP_STRING
           || token_type == CPP_WSTRING
           || token_type == CPP_STRING16
index f98ca348ff98f9b235d6930c6b1b308d76abc132..f356d55c9901286efeeb9ba99f22706301876ab1 100644 (file)
@@ -1,3 +1,8 @@
+2013-08-04  Ed Smith-Rowland  <3dw4rd@verizon.net>
+
+       PR c++/58072
+       * g++.dg/cpp0x/pr58072.C: New.
+
 2013-08-03  Bill Schmidt  <wschmidt@vnet.linux.ibm.com>
 
        * gcc.dg/torture/pr57993-2.cpp: New.
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr58072.C b/gcc/testsuite/g++.dg/cpp0x/pr58072.C
new file mode 100644 (file)
index 0000000..941d7c7
--- /dev/null
@@ -0,0 +1,18 @@
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+
+// PR c++/58072
+
+extern 'c'void*blah(void*); // { dg-error "expected unqualified-id before user-defined character literal" }
+extern L'c'void*Lblah(void*); // { dg-error "expected unqualified-id before user-defined character literal" }
+extern u'c'void*ublah(void*); // { dg-error "expected unqualified-id before user-defined character literal" }
+extern U'c'void*Ublah(void*); // { dg-error "expected unqualified-id before user-defined character literal" }
+
+extern "c"void*strblah(void*); // { dg-error "expected unqualified-id before user-defined string literal" }
+extern L"c"void*Lstrblah(void*); // { dg-error "expected unqualified-id before user-defined string literal" }
+extern u"c"void*ustrblah(void*); // { dg-error "expected unqualified-id before user-defined string literal" }
+extern U"c"void*Ustrblah(void*); // { dg-error "expected unqualified-id before user-defined string literal" }
+extern u8"c"void*u8strblah(void*); // { dg-error "expected unqualified-id before user-defined string literal" }
+
+extern 123void*ULLblah(void*); // { dg-error "expected unqualified-id before numeric constant" }
+extern 123.456void*Ldblblah(void*); // { dg-error "expected unqualified-id before numeric constant" }