From: Jakub Jelinek Date: Fri, 5 Feb 2016 19:39:48 +0000 (+0100) Subject: re PR c++/69628 (Conditional jump or move depends on uninitialised value(s) in lex_ch... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b5c1c988528a8761d802e923fe0a94160810c732;p=gcc.git re PR c++/69628 (Conditional jump or move depends on uninitialised value(s) in lex_charconst(cpp_token const*) (c-lex.c:1252)) PR c++/69628 * charset.c (cpp_interpret_charconst): Clear *PCHARS_SEEN and *UNSIGNEDP if bailing out early due to errors. * g++.dg/parse/pr69628.C: New test. From-SVN: r233186 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1f9bf5d19c8..7876edab435 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 00000000000..0bbd08b73d9 --- /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 10d71977d29..385b965488e 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 60cbde65dd4..2d07942de73 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,