aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2017-12-05 22:00:15 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2017-12-05 22:00:15 +0100
commita7b1ce0405eaeb65741d7a21f8288fb52d7cf06c (patch)
treef89caeee8c05c6e6d793f7fc99d1831444af875a
parent186d43a78e945ebe9fbe217fc341847af7f95d30 (diff)
downloadgcc-a7b1ce0405eaeb65741d7a21f8288fb52d7cf06c.zip
gcc-a7b1ce0405eaeb65741d7a21f8288fb52d7cf06c.tar.gz
gcc-a7b1ce0405eaeb65741d7a21f8288fb52d7cf06c.tar.bz2
re PR c++/79228 ('i' suffix for __complex__ extension interferes with C++14 UDLs for std::complex)
PR c++/79228 * expr.c (interpret_float_suffix): Avoid memcmp. (interpret_int_suffix): Likewise. Don't check for if. From-SVN: r255434
-rw-r--r--libcpp/ChangeLog6
-rw-r--r--libcpp/expr.c12
2 files changed, 12 insertions, 6 deletions
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index ec049218..76f10fb 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,9 @@
+2017-12-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/79228
+ * expr.c (interpret_float_suffix): Avoid memcmp.
+ (interpret_int_suffix): Likewise. Don't check for if.
+
2017-12-01 Jason Merrill <jason@redhat.com>
PR c++/79228 - extensions hide C++14 complex literal operators
diff --git a/libcpp/expr.c b/libcpp/expr.c
index fe9f6b0..b26fe25 100644
--- a/libcpp/expr.c
+++ b/libcpp/expr.c
@@ -280,9 +280,10 @@ interpret_float_suffix (cpp_reader *pfile, const uchar *s, size_t len)
them as user-defined literals. */
if (CPP_OPTION (pfile, cplusplus)
&& CPP_OPTION (pfile, lang) > CLK_CXX11
- && (!memcmp (orig_s, "i", orig_len)
- || !memcmp (orig_s, "if", orig_len)
- || !memcmp (orig_s, "il", orig_len)))
+ && orig_s[0] == 'i'
+ && (orig_len == 1
+ || (orig_len == 2
+ && (orig_s[1] == 'f' || orig_s[1] == 'l'))))
return 0;
}
@@ -345,9 +346,8 @@ interpret_int_suffix (cpp_reader *pfile, const uchar *s, size_t len)
them as user-defined literals. */
if (CPP_OPTION (pfile, cplusplus)
&& CPP_OPTION (pfile, lang) > CLK_CXX11
- && (!memcmp (s, "i", orig_len)
- || !memcmp (s, "if", orig_len)
- || !memcmp (s, "il", orig_len)))
+ && s[0] == 'i'
+ && (orig_len == 1 || (orig_len == 2 && s[1] == 'l')))
return 0;
}