summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorErich Keane <erich.keane@intel.com>2019-08-19 17:39:59 +0000
committerErich Keane <erich.keane@intel.com>2019-08-19 17:39:59 +0000
commit62b072d413eed260fb526df5edd87691a66f0c60 (patch)
tree9d5b34861b30db6ec934fe00ee977694cb79ef6f /clang/lib
parent296757c07ccc66a5d5a8f3f7cbc769faef49cfd9 (diff)
downloadbcm5719-llvm-62b072d413eed260fb526df5edd87691a66f0c60.tar.gz
bcm5719-llvm-62b072d413eed260fb526df5edd87691a66f0c60.zip
Implement P1668R1
Allow inline assembly statements in unexecuted branches of constexpr functions. llvm-svn: 369281
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Frontend/InitPreprocessor.cpp1
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp3
2 files changed, 4 insertions, 0 deletions
diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp
index 51c9606745e..6eafe81e826 100644
--- a/clang/lib/Frontend/InitPreprocessor.cpp
+++ b/clang/lib/Frontend/InitPreprocessor.cpp
@@ -480,6 +480,7 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
Builder.defineMacro("__cpp_user_defined_literals", "200809L");
Builder.defineMacro("__cpp_lambdas", "200907L");
Builder.defineMacro("__cpp_constexpr",
+ LangOpts.CPlusPlus2a ? "201907L" :
LangOpts.CPlusPlus17 ? "201603L" :
LangOpts.CPlusPlus14 ? "201304L" : "200704");
Builder.defineMacro("__cpp_range_based_for",
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 09c29851dda..0f260ab6e91 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -1995,6 +1995,9 @@ CheckConstexprFunctionStmt(Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S,
return false;
return true;
+ case Stmt::GCCAsmStmtClass:
+ case Stmt::MSAsmStmtClass:
+ // C++2a allows inline assembly statements.
case Stmt::CXXTryStmtClass:
if (Cxx2aLoc.isInvalid())
Cxx2aLoc = S->getBeginLoc();
OpenPOWER on IntegriCloud