Author: Timm Baeder Date: 2023-10-05T08:42:34+02:00 New Revision: 5ef904b5da96562d3209c8f98e1175e623c37bc1
URL: https://github.com/llvm/llvm-project/commit/5ef904b5da96562d3209c8f98e1175e623c37bc1 DIFF: https://github.com/llvm/llvm-project/commit/5ef904b5da96562d3209c8f98e1175e623c37bc1.diff LOG: [clang][ExprConst] Don't try to evaluate value-dependent DeclRefExprs (#67778) The Expression here migth be value dependent, which makes us run into an assertion later on. Just bail out early. Fixes #67690 Added: Modified: clang/docs/ReleaseNotes.rst clang/lib/AST/ExprConstant.cpp clang/test/SemaCXX/constant-expression-cxx1z.cpp Removed: ################################################################################ diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 21b76292bca965e..2362e479dfbbc5a 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -339,6 +339,9 @@ Bug Fixes in This Version (`#64462 <https://github.com/llvm/llvm-project/issues/64462>`_) - Fixes a regression where the ``UserDefinedLiteral`` was not properly preserved while evaluating consteval functions. (`#63898 <https://github.com/llvm/llvm-project/issues/63898>`_). +- Fix a crash when evaluating value-dependent structured binding + variables at compile time. + Fixes (`#67690 <https://github.com/llvm/llvm-project/issues/67690>`_) Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index a142ea7c47a4730..d0e27de743604da 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -3357,6 +3357,9 @@ static bool evaluateVarDeclInit(EvalInfo &Info, const Expr *E, return false; } + if (E->isValueDependent()) + return false; + // Dig out the initializer, and use the declaration which it's attached to. // FIXME: We should eventually check whether the variable has a reachable // initializing declaration. diff --git a/clang/test/SemaCXX/constant-expression-cxx1z.cpp b/clang/test/SemaCXX/constant-expression-cxx1z.cpp index 9335626a5c90a4f..c0766f70cf88158 100644 --- a/clang/test/SemaCXX/constant-expression-cxx1z.cpp +++ b/clang/test/SemaCXX/constant-expression-cxx1z.cpp @@ -177,3 +177,16 @@ namespace LambdaCallOp { p(); } } + +// This used to crash due to an assertion failure, +// see gh#67690 +namespace { + struct C { + int x; + }; + + template <const C *p> void f() { + const auto &[c] = *p; + &c; // expected-warning {{expression result unused}} + } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits