From a7b1ce0405eaeb65741d7a21f8288fb52d7cf06c Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 5 Dec 2017 22:00:15 +0100 Subject: [PATCH] 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 --- libcpp/ChangeLog | 6 ++++++ libcpp/expr.c | 12 ++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index ec0492185f2..76f10fb2af7 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,9 @@ +2017-12-05 Jakub Jelinek + + PR c++/79228 + * expr.c (interpret_float_suffix): Avoid memcmp. + (interpret_int_suffix): Likewise. Don't check for if. + 2017-12-01 Jason Merrill PR c++/79228 - extensions hide C++14 complex literal operators diff --git a/libcpp/expr.c b/libcpp/expr.c index fe9f6b0188c..b26fe2539fe 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; }