]> granicus.if.org Git - clang/commitdiff
Revert "Lexer: always allow imaginary constants in GNU mode."
authorTim Northover <tnorthover@apple.com>
Tue, 8 Aug 2017 23:17:51 +0000 (23:17 +0000)
committerTim Northover <tnorthover@apple.com>
Tue, 8 Aug 2017 23:17:51 +0000 (23:17 +0000)
This reverts r310423. It was committed by mistake, I intended to commit the
improved diagnostics for implicit conversions instead.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@310426 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Lex/LiteralSupport.cpp
test/Lexer/imaginary-constants.cpp [deleted file]
test/SemaCXX/constexpr-printing.cpp
unittests/AST/DeclTest.cpp

index 52b259edce897a326dd4af776a214edde4f7d48d..a598a467816a8e34fb63718a13934369b9832150 100644 (file)
@@ -659,7 +659,7 @@ NumericLiteralParser::NumericLiteralParser(StringRef TokSpelling,
         }
       }
       // "i", "if", and "il" are user-defined suffixes in C++1y.
-      if (*s == 'i' && !PP.getLangOpts().GNUMode)
+      if (*s == 'i' && PP.getLangOpts().CPlusPlus14)
         break;
       // fall through.
     case 'j':
diff --git a/test/Lexer/imaginary-constants.cpp b/test/Lexer/imaginary-constants.cpp
deleted file mode 100644 (file)
index 3a176be..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-// RUN: %clang_cc1 -fsyntax-only -verify %s -std=gnu++98 -DHAVE_IMAGINARY=1
-// RUN: %clang_cc1 -fsyntax-only -verify %s -std=gnu++11 -DHAVE_IMAGINARY=1
-// RUN: %clang_cc1 -fsyntax-only -verify %s -std=gnu++14 -DHAVE_IMAGINARY=1
-// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++98 -DHAVE_IMAGINARY=0
-// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11 -DHAVE_IMAGINARY=0
-// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++14 -DHAVE_IMAGINARY=0 -DCXX14=1
-
-// Imaginary constants are a GNU extension that became problematic when C++14
-// defined its own versions. Until then they're supported even in
-// standards-compliant mode.
-#if HAVE_IMAGINARY
-// expected-no-diagnostics
-#elif CXX14
-// expected-error@+9 {{no matching literal operator for call to 'operator""i' with argument of type 'unsigned long long' or 'const char *', and no matching literal operator template}}
-// expected-error@+9 {{no matching literal operator for call to 'operator""il' with argument of type 'unsigned long long' or 'const char *', and no matching literal operator template}}
-// expected-error@+9 {{invalid suffix 'ill' on integer constant}}
-#else
-// expected-error@+5 {{invalid suffix 'i' on integer constant}}
-// expected-error@+5 {{invalid suffix 'il' on integer constant}}
-// expected-error@+7 {{invalid suffix 'ill' on integer constant}}
-#endif
-
-_Complex int val1 = 2i;
-_Complex long val2 = 2il;
-_Complex long long val3 = 2ill;
index 3112fdeb35596e88de271c0eb729d532b62214e5..7f6a9c6a82f0deac8da8c7e786df6c3bafa68537 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 %s -std=gnu++11 -fsyntax-only -verify -triple x86_64-linux-gnu
+// RUN: %clang_cc1 %s -std=c++11 -fsyntax-only -verify -triple x86_64-linux-gnu
 
 struct S;
 constexpr int extract(const S &s);
index f06f21a55dcfe82e7a055de1464ed69f2c4e5e9c..87aeef47c61fb2ede51d8296188d046adc097b5b 100644 (file)
@@ -26,7 +26,7 @@ TEST(Decl, CleansUpAPValues) {
   // This is a regression test for a memory leak in APValues for structs that
   // allocate memory. This test only fails if run under valgrind with full leak
   // checking enabled.
-  std::vector<std::string> Args(1, "-std=gnu++11");
+  std::vector<std::string> Args(1, "-std=c++11");
   Args.push_back("-fno-ms-extensions");
   ASSERT_TRUE(runToolOnCodeWithArgs(
       Factory->create(),