From: Richard Smith Date: Wed, 17 Oct 2012 23:07:52 +0000 (+0000) Subject: Add -std=c++1y argument, for *highly* experimental C++14 support. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5ba49c0177bd594a9760956f51293b5731b03d6d;p=clang Add -std=c++1y argument, for *highly* experimental C++14 support. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166139 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/LangOptions.def b/include/clang/Basic/LangOptions.def index 0ef4ad2c19..3463e2532a 100644 --- a/include/clang/Basic/LangOptions.def +++ b/include/clang/Basic/LangOptions.def @@ -48,6 +48,7 @@ LANGOPT(MicrosoftMode , 1, 0, "Microsoft compatibility mode") LANGOPT(Borland , 1, 0, "Borland extensions") LANGOPT(CPlusPlus , 1, 0, "C++") LANGOPT(CPlusPlus0x , 1, 0, "C++0x") +LANGOPT(CPlusPlus1y , 1, 0, "C++1y") LANGOPT(ObjC1 , 1, 0, "Objective-C 1") LANGOPT(ObjC2 , 1, 0, "Objective-C 2") BENIGN_LANGOPT(ObjCDefaultSynthProperties , 1, 0, diff --git a/include/clang/Frontend/LangStandard.h b/include/clang/Frontend/LangStandard.h index e6f44032ac..a9789158cd 100644 --- a/include/clang/Frontend/LangStandard.h +++ b/include/clang/Frontend/LangStandard.h @@ -24,10 +24,11 @@ enum LangFeatures { C11 = (1 << 3), CPlusPlus = (1 << 4), CPlusPlus0x = (1 << 5), - Digraphs = (1 << 6), - GNUMode = (1 << 7), - HexFloat = (1 << 8), - ImplicitInt = (1 << 9) + CPlusPlus1y = (1 << 6), + Digraphs = (1 << 7), + GNUMode = (1 << 8), + HexFloat = (1 << 9), + ImplicitInt = (1 << 10) }; } @@ -71,6 +72,9 @@ public: /// isCPlusPlus0x - Language is a C++0x variant. bool isCPlusPlus0x() const { return Flags & frontend::CPlusPlus0x; } + /// isCPlusPlus1y - Language is a C++1y variant. + bool isCPlusPlus1y() const { return Flags & frontend::CPlusPlus1y; } + /// hasDigraphs - Language supports digraphs. bool hasDigraphs() const { return Flags & frontend::Digraphs; } diff --git a/include/clang/Frontend/LangStandards.def b/include/clang/Frontend/LangStandards.def index a604d4bff6..a6b846cc87 100644 --- a/include/clang/Frontend/LangStandards.def +++ b/include/clang/Frontend/LangStandards.def @@ -107,6 +107,14 @@ LANGSTANDARD(gnucxx11, "gnu++11", "ISO C++ 2011 with amendments and GNU extensions", BCPLComment | CPlusPlus | CPlusPlus0x | Digraphs | GNUMode) +LANGSTANDARD(cxx1y, "c++1y", + "Working draft for ISO C++ 2014", + BCPLComment | CPlusPlus | CPlusPlus0x | CPlusPlus1y | Digraphs) +LANGSTANDARD(gnucxx1y, "gnu++1y", + "Working draft for ISO C++ 2014 with GNU extensions", + BCPLComment | CPlusPlus | CPlusPlus0x | CPlusPlus1y | Digraphs | + GNUMode) + // OpenCL LANGSTANDARD(opencl, "cl", "OpenCL 1.0", diff --git a/lib/Frontend/CompilerInvocation.cpp b/lib/Frontend/CompilerInvocation.cpp index 5fc3f1bd18..20fd07819e 100644 --- a/lib/Frontend/CompilerInvocation.cpp +++ b/lib/Frontend/CompilerInvocation.cpp @@ -1839,6 +1839,7 @@ void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK, Opts.C11 = Std.isC11(); Opts.CPlusPlus = Std.isCPlusPlus(); Opts.CPlusPlus0x = Std.isCPlusPlus0x(); + Opts.CPlusPlus1y = Std.isCPlusPlus1y(); Opts.Digraphs = Std.hasDigraphs(); Opts.GNUMode = Std.isGNUMode(); Opts.GNUInline = !Std.isC99(); diff --git a/lib/Frontend/InitPreprocessor.cpp b/lib/Frontend/InitPreprocessor.cpp index 585599af97..e8e57cbf58 100644 --- a/lib/Frontend/InitPreprocessor.cpp +++ b/lib/Frontend/InitPreprocessor.cpp @@ -288,6 +288,8 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI, else if (!LangOpts.GNUMode && LangOpts.Digraphs) Builder.defineMacro("__STDC_VERSION__", "199409L"); } else { + // FIXME: LangOpts.CPlusPlus1y + // C++11 [cpp.predefined]p1: // The name __cplusplus is defined to the value 201103L when compiling a // C++ translation unit. diff --git a/test/Driver/std.cpp b/test/Driver/std.cpp index 7704c8dda1..822658c837 100644 --- a/test/Driver/std.cpp +++ b/test/Driver/std.cpp @@ -5,6 +5,8 @@ // RUN: %clang -std=gnu++0x %s -fsyntax-only 2>&1 | FileCheck -check-prefix=GNUXX11 %s // RUN: %clang -std=c++11 %s -fsyntax-only 2>&1 | FileCheck -check-prefix=CXX11 %s // RUN: %clang -std=gnu++11 %s -fsyntax-only 2>&1 | FileCheck -check-prefix=GNUXX11 %s +// RUN: %clang -std=c++1y %s -fsyntax-only 2>&1 | FileCheck -check-prefix=CXX1Y %s +// RUN: %clang -std=gnu++1y %s -fsyntax-only 2>&1 | FileCheck -check-prefix=GNUXX1Y %s void f(int n) { typeof(n)(); @@ -22,3 +24,9 @@ void f(int n) { // GNUXX11-NOT: undeclared identifier 'typeof' // GNUXX11-NOT: undeclared identifier 'decltype' + +// CXX1Y: undeclared identifier 'typeof' +// CXX1Y-NOT: undeclared identifier 'decltype' + +// GNUXX1Y-NOT: undeclared identifier 'typeof' +// GNUXX1Y-NOT: undeclared identifier 'decltype'