aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMukesh Kapoor <mukesh.kapoor@oracle.com>2017-11-06 10:33:41 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2017-11-06 10:33:41 +0000
commit7d19c460ed95b5e0988f1ba37ce614ddd8d27aa8 (patch)
tree4ef2defce67d2862f4fcf5611615d618f5d1f6ec /gcc
parent16f681db1100e78ff9a0cb04fc8fd18719c92839 (diff)
downloadgcc-7d19c460ed95b5e0988f1ba37ce614ddd8d27aa8.zip
gcc-7d19c460ed95b5e0988f1ba37ce614ddd8d27aa8.tar.gz
gcc-7d19c460ed95b5e0988f1ba37ce614ddd8d27aa8.tar.bz2
re PR c++/80955 (Macros expanded in definition of user-defined literals)
/libcpp 2017-11-06 Mukesh Kapoor <mukesh.kapoor@oracle.com> PR c++/80955 * lex.c (lex_string): When checking for a valid macro for the warning related to -Wliteral-suffix (CPP_W_LITERAL_SUFFIX), check that the macro name does not start with an underscore before calling is_macro(). /gcc/testsuite 2017-11-06 Mukesh Kapoor <mukesh.kapoor@oracle.com> PR c++/80955 * g++.dg/cpp0x/udlit-macros.C: New. From-SVN: r254443
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/udlit-macros.C31
2 files changed, 36 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8232b4a..b56ace4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-11-06 Mukesh Kapoor <mukesh.kapoor@oracle.com>
+
+ PR c++/80955
+ * g++.dg/cpp0x/udlit-macros.C: New.
+
2017-11-06 Paul Thomas <pault@gcc.gnu.org>
PR fortran/69739
diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-macros.C b/gcc/testsuite/g++.dg/cpp0x/udlit-macros.C
new file mode 100644
index 0000000..fb51828
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/udlit-macros.C
@@ -0,0 +1,31 @@
+// PR c++/80955
+// { dg-do run { target c++11 } }
+
+extern "C" int sprintf (char *s, const char *format, ...);
+extern "C" int strcmp (const char *s1, const char *s2);
+
+#define __PRI64_PREFIX "l"
+#define PRId64 __PRI64_PREFIX "d"
+
+using size_t = decltype(sizeof(0));
+#define _zero
+#define _ID _xx
+int operator""_zero(const char*, size_t) { return 0; }
+int operator""_ID(const char*, size_t) { return 0; }
+
+int main()
+{
+ long i64 = 123;
+ char buf[100];
+ sprintf(buf, "%"PRId64"abc", i64); // { dg-warning "invalid suffix on literal" }
+ return strcmp(buf, "123abc")
+ + ""_zero
+ + "bob"_zero
+ + R"#(raw
+ string)#"_zero
+ + "xx"_ID
+ + ""_ID
+ + R"AA(another
+ raw
+ string)AA"_ID;
+}