aboutsummaryrefslogtreecommitdiff
path: root/libcpp
diff options
context:
space:
mode:
Diffstat (limited to 'libcpp')
-rw-r--r--libcpp/ChangeLog6
-rw-r--r--libcpp/charset.c11
2 files changed, 11 insertions, 6 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index 3a530b7..f7cc1c4 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,9 @@
+2016-08-06 David Malcolm <dmalcolm@redhat.com>
+
+ PR bootstrap/72823
+ * charset.c (_cpp_valid_ucn): Replace overzealous assert with one
+ that allows for char_range to be non-NULL when loc_reader is NULL.
+
2016-08-05 David Malcolm <dmalcolm@redhat.com>
* charset.c (cpp_substring_ranges::cpp_substring_ranges): New
diff --git a/libcpp/charset.c b/libcpp/charset.c
index 3739d6c..6a92ade 100644
--- a/libcpp/charset.c
+++ b/libcpp/charset.c
@@ -1027,7 +1027,7 @@ ucn_valid_in_identifier (cpp_reader *pfile, cppchar_t c,
IDENTIFIER_POS is 0 when not in an identifier, 1 for the start of
an identifier, or 2 otherwise.
- If CHAR_RANGE and LOC_READER are non-NULL, then position information is
+ If LOC_READER is non-NULL, then position information is
read from *LOC_READER and CHAR_RANGE->m_finish is updated accordingly. */
bool
@@ -1042,10 +1042,6 @@ _cpp_valid_ucn (cpp_reader *pfile, const uchar **pstr,
const uchar *str = *pstr;
const uchar *base = str - 2;
- /* char_range and loc_reader must either be both NULL, or both be
- non-NULL. */
- gcc_assert ((char_range != NULL) == (loc_reader != NULL));
-
if (!CPP_OPTION (pfile, cplusplus) && !CPP_OPTION (pfile, c99))
cpp_error (pfile, CPP_DL_WARNING,
"universal character names are only valid in C++ and C99");
@@ -1076,7 +1072,10 @@ _cpp_valid_ucn (cpp_reader *pfile, const uchar **pstr,
break;
str++;
if (loc_reader)
- char_range->m_finish = loc_reader->get_next ().m_finish;
+ {
+ gcc_assert (char_range);
+ char_range->m_finish = loc_reader->get_next ().m_finish;
+ }
result = (result << 4) + hex_value (c);
}
while (--length && str < limit);