re PR c++/79228 ('i' suffix for __complex__ extension interferes with C++14 UDLs...
authorJakub Jelinek <jakub@redhat.com>
Tue, 5 Dec 2017 21:00:15 +0000 (22:00 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 5 Dec 2017 21:00:15 +0000 (22:00 +0100)
PR c++/79228
* expr.c (interpret_float_suffix): Avoid memcmp.
(interpret_int_suffix): Likewise.  Don't check for if.

From-SVN: r255434

libcpp/ChangeLog
libcpp/expr.c

index ec0492185f2cb6a2c734aaa016a0652dad8bc22e..76f10fb2af75a713a38c949690c884b52b37a5f9 100644 (file)
@@ -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
index fe9f6b0188c3b0a9019a440c83a688853fabfa54..b26fe2539fe42a6f06b28aa254ff58fd2ac94912 100644 (file)
@@ -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;
     }