]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR c++/69628
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 5 Feb 2016 19:39:48 +0000 (19:39 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 5 Feb 2016 19:39:48 +0000 (19:39 +0000)
* charset.c (cpp_interpret_charconst): Clear *PCHARS_SEEN
and *UNSIGNEDP if bailing out early due to errors.

* g++.dg/parse/pr69628.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233186 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/pr69628.C [new file with mode: 0644]
libcpp/ChangeLog
libcpp/charset.c

index 1f9bf5d19c89737256fcd21b5e6ffb4f0b9e4119..7876edab43596dac14c6c2e795e4c2bb738a6085 100644 (file)
@@ -1,3 +1,8 @@
+2016-02-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/69628
+       * g++.dg/parse/pr69628.C: New test.
+
 2016-02-05  Uros Bizjak  <ubizjak@gmail.com>
 
        * gcc.dg/sancov/asan.c: Move to ...
diff --git a/gcc/testsuite/g++.dg/parse/pr69628.C b/gcc/testsuite/g++.dg/parse/pr69628.C
new file mode 100644 (file)
index 0000000..0bbd08b
--- /dev/null
@@ -0,0 +1,5 @@
+// PR c++/69628
+// { dg-do compile }
+
+0''; // { dg-error "empty character constant" }
+// { dg-error "expected unqualified-id before numeric constant" "" { target *-*-* } 4 }
index 10d71977d29f88b7566d9f4e96de009217b522a4..385b965488e3c925bb0b786d3182fd749a6f278b 100644 (file)
@@ -1,3 +1,9 @@
+2016-02-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/69628
+       * charset.c (cpp_interpret_charconst): Clear *PCHARS_SEEN
+       and *UNSIGNEDP if bailing out early due to errors.
+
 2016-01-28  Jakub Jelinek  <jakub@redhat.com>
 
        PR pch/68176
index 60cbde65dd455334121715343448b29f3614a253..2d07942de734c931e513490fa2921ea0b8408746 100644 (file)
@@ -1620,10 +1620,17 @@ cpp_interpret_charconst (cpp_reader *pfile, const cpp_token *token,
   if (token->val.str.len == (size_t) (2 + wide + u8))
     {
       cpp_error (pfile, CPP_DL_ERROR, "empty character constant");
+      *pchars_seen = 0;
+      *unsignedp = 0;
+      return 0;
+    }
+  else if (!cpp_interpret_string (pfile, &token->val.str, 1, &str,
+                                 token->type))
+    {
+      *pchars_seen = 0;
+      *unsignedp = 0;
       return 0;
     }
-  else if (!cpp_interpret_string (pfile, &token->val.str, 1, &str, token->type))
-    return 0;
 
   if (wide)
     result = wide_str_to_charconst (pfile, str, pchars_seen, unsignedp,