diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1f9bf5d19c89..7876edab4359 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-02-05 Jakub Jelinek + + PR c++/69628 + * g++.dg/parse/pr69628.C: New test. + 2016-02-05 Uros Bizjak * 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 index 000000000000..0bbd08b73d98 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/pr69628.C @@ -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 } diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 10d71977d29f..385b965488e3 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,9 @@ +2016-02-05 Jakub Jelinek + + 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 PR pch/68176 diff --git a/libcpp/charset.c b/libcpp/charset.c index 60cbde65dd45..2d07942de734 100644 --- a/libcpp/charset.c +++ b/libcpp/charset.c @@ -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,