diff options
author | Corentin Jabot <corentinjabot@gmail.com> | 2021-10-05 23:33:31 +0200 |
---|---|---|
committer | Corentin Jabot <corentinjabot@gmail.com> | 2022-03-22 19:51:19 +0100 |
commit | 683e83c56f98df6fe42d506a04dda44309ca758f (patch) | |
tree | 425747d6753617f8a8f10b6df4de06805135143b /clang/lib/Frontend/InitPreprocessor.cpp | |
parent | bafbae238aa1948aa511c734a613a95d89a72546 (diff) | |
download | llvm-683e83c56f98df6fe42d506a04dda44309ca758f.zip llvm-683e83c56f98df6fe42d506a04dda44309ca758f.tar.gz llvm-683e83c56f98df6fe42d506a04dda44309ca758f.tar.bz2 |
[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
Diffstat (limited to 'clang/lib/Frontend/InitPreprocessor.cpp')
-rw-r--r-- | clang/lib/Frontend/InitPreprocessor.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
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"); |