]> granicus.if.org Git - clang/commitdiff
C1X: add a language standard
authorPeter Collingbourne <peter@pcc.me.uk>
Fri, 15 Apr 2011 00:35:23 +0000 (00:35 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Fri, 15 Apr 2011 00:35:23 +0000 (00:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129553 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticFrontendKinds.td
include/clang/Basic/LangOptions.h
include/clang/Basic/TokenKinds.def
include/clang/Frontend/LangStandard.h
include/clang/Frontend/LangStandards.def
lib/Basic/IdentifierTable.cpp
lib/Frontend/CompilerInvocation.cpp
lib/Serialization/ASTReader.cpp
lib/Serialization/ASTWriter.cpp

index d93502c77479a23192f2baee062afeb137ceb374..ebd42b329a20c0a7e24a48f7e9ddf3dac5e163fa 100644 (file)
@@ -115,6 +115,9 @@ def warn_pch_target_triple : Error<
 def warn_pch_c99 : Error<
     "C99 support was %select{disabled|enabled}0 in PCH file but is "
     "currently %select{disabled|enabled}1">;
+def warn_pch_c1x : Error<
+    "C1X support was %select{disabled|enabled}0 in PCH file but is "
+    "currently %select{disabled|enabled}1">;
 def warn_pch_cplusplus : Error<
     "C++ support was %select{disabled|enabled}0 in PCH file but is "
     "currently %select{disabled|enabled}1">;
index beafdba3c95dda93281dcb811cc79439a1f74f55..3a739eaf4ad1df4105aed0c52a4f5060219bf9db 100644 (file)
@@ -34,6 +34,7 @@ public:
   unsigned Digraphs          : 1;  // C94, C99 and C++
   unsigned HexFloats         : 1;  // C99 Hexadecimal float constants.
   unsigned C99               : 1;  // C99 Support
+  unsigned C1X               : 1;  // C1X Support
   unsigned Microsoft         : 1;  // Microsoft extensions.
   unsigned Borland           : 1;  // Borland extensions.
   unsigned CPlusPlus         : 1;  // C++ Support
@@ -170,7 +171,7 @@ public:
     AppleKext = 0;
     ObjCDefaultSynthProperties = 0;
     NoConstantCFStrings = 0; InlineVisibilityHidden = 0;
-    C99 = Microsoft = Borland = CPlusPlus = CPlusPlus0x = 0;
+    C99 = C1X = Microsoft = Borland = CPlusPlus = CPlusPlus0x = 0;
     CXXOperatorNames = PascalStrings = WritableStrings = ConstStrings = 0;
     Exceptions = ObjCExceptions = CXXExceptions = SjLjExceptions = 0;
     TraditionalCPP = Freestanding = NoBuiltin = 0;
index c446d6a62647597900e822a1e0625f8d7592e914..d7d436c92ca09cf38c3d45f6ff9d01f2e9102fdc 100644 (file)
@@ -190,6 +190,7 @@ PUNCTUATOR(greatergreatergreater, ">>>")
 //              is a keyword in the implementation namespace that should
 //              always be treated as a keyword
 //   KEYC99   - This is a keyword introduced to C in C99
+//   KEYC1X   - This is a keyword introduced to C in C1X
 //   KEYCXX   - This is a C++ keyword, or a C++-specific keyword in the
 //              implementation namespace
 //   KEYNOCXX - This is a keyword in every non-C++ dialect.
index 441d34f5a3885bb1d6ecb132677574fb71dbf04c..74ca5191dd48b6e60c17054084b95587b219276c 100644 (file)
@@ -19,12 +19,13 @@ namespace frontend {
 enum LangFeatures {
   BCPLComment = (1 << 0),
   C99 = (1 << 1),
-  CPlusPlus = (1 << 2),
-  CPlusPlus0x = (1 << 3),
-  Digraphs = (1 << 4),
-  GNUMode = (1 << 5),
-  HexFloat = (1 << 6),
-  ImplicitInt = (1 << 7)
+  C1X = (1 << 2),
+  CPlusPlus = (1 << 3),
+  CPlusPlus0x = (1 << 4),
+  Digraphs = (1 << 5),
+  GNUMode = (1 << 6),
+  HexFloat = (1 << 7),
+  ImplicitInt = (1 << 8)
 };
 
 }
@@ -56,6 +57,9 @@ public:
   /// isC99 - Language is a superset of C99.
   bool isC99() const { return Flags & frontend::C99; }
 
+  /// isC1X - Language is a superset of C1X.
+  bool isC1X() const { return Flags & frontend::C1X; }
+
   /// isCPlusPlus - Language is a C++ variant.
   bool isCPlusPlus() const { return Flags & frontend::CPlusPlus; }
 
index 06df563c6d1db4d12b1b3b3f45a6656567b1f8fa..586e5c8fa2a41aa742e0db98e9801bf6a465d35a 100644 (file)
@@ -59,6 +59,18 @@ LANGSTANDARD(gnu9x, "gnu9x",
              "ISO C 1999 with GNU extensions",
              BCPLComment | C99 | Digraphs | GNUMode | HexFloat)
 
+// C1X modes
+LANGSTANDARD(c1x, "c1x",
+             "ISO C 201X",
+             BCPLComment | C99 | C1X | Digraphs | HexFloat)
+LANGSTANDARD(iso9899_201x,
+             "iso9899:201x", "ISO C 201X",
+             BCPLComment | C99 | C1X | Digraphs | HexFloat)
+
+LANGSTANDARD(gnu1x, "gnu1x",
+             "ISO C 201X with GNU extensions",
+             BCPLComment | C99 | C1X | Digraphs | GNUMode | HexFloat)
+
 // C++ modes
 LANGSTANDARD(cxx98, "c++98",
              "ISO C++ 1998 with amendments",
index 3d08bf807ebccdc1edbf2737ef9f594a3be386a8..bbea23ab8da7885975d1f6674a7a3923437c8f2d 100644 (file)
@@ -91,7 +91,8 @@ namespace {
     KEYNOCXX = 0x80,
     KEYBORLAND = 0x100,
     KEYOPENCL = 0x200,
-    KEYALL = 0x3ff
+    KEYC1X = 0x400,
+    KEYALL = 0x7ff
   };
 }
 
@@ -118,6 +119,7 @@ static void AddKeyword(llvm::StringRef Keyword,
   else if (LangOpts.AltiVec && (Flags & KEYALTIVEC)) AddResult = 2;
   else if (LangOpts.OpenCL && (Flags & KEYOPENCL)) AddResult = 2;
   else if (!LangOpts.CPlusPlus && (Flags & KEYNOCXX)) AddResult = 2;
+  else if (LangOpts.C1X && (Flags & KEYC1X)) AddResult = 2;
 
   // Don't add this keyword if disabled in this language.
   if (AddResult == 0) return;
index 00418967fefab1379cf77d048569f8c26800dff4..3dd1be93de5fce770c20ee615792d572b250687b 100644 (file)
@@ -1335,6 +1335,7 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK,
   const LangStandard &Std = LangStandard::getLangStandardForKind(LangStd);
   Opts.BCPLComment = Std.hasBCPLComments();
   Opts.C99 = Std.isC99();
+  Opts.C1X = Std.isC1X();
   Opts.CPlusPlus = Std.isCPlusPlus();
   Opts.CPlusPlus0x = Std.isCPlusPlus0x();
   Opts.Digraphs = Std.hasDigraphs();
index a7c3fea7d60684cbf2205296e4d34e78eef55a18..66b4890d2a86705c76fef899512bf2aa3403e8e6 100644 (file)
@@ -79,6 +79,7 @@ PCHValidator::ReadLanguageOptions(const LangOptions &LangOpts) {
   PARSE_LANGOPT_BENIGN(Digraphs);
   PARSE_LANGOPT_BENIGN(HexFloats);
   PARSE_LANGOPT_IMPORTANT(C99, diag::warn_pch_c99);
+  PARSE_LANGOPT_IMPORTANT(C1X, diag::warn_pch_c1x);
   PARSE_LANGOPT_IMPORTANT(Microsoft, diag::warn_pch_microsoft_extensions);
   PARSE_LANGOPT_BENIGN(MSCVersion);
   PARSE_LANGOPT_IMPORTANT(CPlusPlus, diag::warn_pch_cplusplus);
@@ -2799,6 +2800,7 @@ bool ASTReader::ParseLanguageOptions(
     PARSE_LANGOPT(Digraphs);
     PARSE_LANGOPT(HexFloats);
     PARSE_LANGOPT(C99);
+    PARSE_LANGOPT(C1X);
     PARSE_LANGOPT(Microsoft);
     PARSE_LANGOPT(CPlusPlus);
     PARSE_LANGOPT(CPlusPlus0x);
index 85b5326da993b71b6a45d6f7bbe6a3dad432cafd..d6a9a95ea435889e6e354c08dc2f42f739ad9d50 100644 (file)
@@ -1007,6 +1007,7 @@ void ASTWriter::WriteLanguageOptions(const LangOptions &LangOpts) {
   Record.push_back(LangOpts.Digraphs);  // C94, C99 and C++
   Record.push_back(LangOpts.HexFloats);  // C99 Hexadecimal float constants.
   Record.push_back(LangOpts.C99);  // C99 Support
+  Record.push_back(LangOpts.C1X);  // C1X Support
   Record.push_back(LangOpts.Microsoft);  // Microsoft extensions.
   // LangOpts.MSCVersion is ignored because all it does it set a macro, which is
   // already saved elsewhere.