From 683e83c56f98df6fe42d506a04dda44309ca758f Mon Sep 17 00:00:00 2001 From: Corentin Jabot Date: Tue, 5 Oct 2021 23:33:31 +0200 Subject: [Clang][C++2b] P2242R3: Non-literal variables [...] in constexpr Allow goto, labelled statements as well as `static`, `thread_local`, and non-literal variables in `constexpr` functions. As specified. for all of the above (except labelled statements) constant evaluation of the construct still fails. For `constexpr` bodies, the proposal is implemented with diagnostics as a language extension in older language modes. For determination of whether a lambda body satisfies the requirements for a constexpr function, the proposal is implemented only in C++2b mode to retain the semantics of older modes for programs conforming to them. Reviewed By: aaron.ballman, hubert.reinterpretcast, erichkeane Differential Revision: https://reviews.llvm.org/D111400 --- clang/lib/Frontend/InitPreprocessor.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'clang/lib/Frontend/InitPreprocessor.cpp') diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index 6b7c743..9d7a429 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -561,10 +561,11 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts, Builder.defineMacro("__cpp_unicode_literals", "200710L"); Builder.defineMacro("__cpp_user_defined_literals", "200809L"); Builder.defineMacro("__cpp_lambdas", "200907L"); - Builder.defineMacro("__cpp_constexpr", - LangOpts.CPlusPlus20 ? "201907L" : - LangOpts.CPlusPlus17 ? "201603L" : - LangOpts.CPlusPlus14 ? "201304L" : "200704"); + Builder.defineMacro("__cpp_constexpr", LangOpts.CPlusPlus2b ? "202110L" + : LangOpts.CPlusPlus20 ? "201907L" + : LangOpts.CPlusPlus17 ? "201603L" + : LangOpts.CPlusPlus14 ? "201304L" + : "200704"); Builder.defineMacro("__cpp_constexpr_in_decltype", "201711L"); Builder.defineMacro("__cpp_range_based_for", LangOpts.CPlusPlus17 ? "201603L" : "200907"); -- cgit v1.1