llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-modules Author: Jonas Hahnfeld (hahnjo) <details> <summary>Changes</summary> Closes https://github.com/llvm/llvm-project/issues/68702 --- Full diff: https://github.com/llvm/llvm-project/pull/69076.diff 2 Files Affected: - (modified) clang/lib/AST/ExprConstant.cpp (+7-4) - (added) clang/test/Modules/pr68702.cpp (+65) ``````````diff diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index e5539dedec02a4b..a97e7bd8140890e 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -15604,10 +15604,13 @@ bool Expr::EvaluateAsInitializer(APValue &Value, const ASTContext &Ctx, LValue LVal; LVal.set(VD); - if (!EvaluateInPlace(Value, Info, LVal, this, - /*AllowNonLiteralTypes=*/true) || - EStatus.HasSideEffects) - return false; + { + FullExpressionRAII Scope(Info); + if (!EvaluateInPlace(Value, Info, LVal, this, + /*AllowNonLiteralTypes=*/true) || + EStatus.HasSideEffects) + return false; + } // At this point, any lifetime-extended temporaries are completely // initialized. diff --git a/clang/test/Modules/pr68702.cpp b/clang/test/Modules/pr68702.cpp new file mode 100644 index 000000000000000..3f91a1001d1eecc --- /dev/null +++ b/clang/test/Modules/pr68702.cpp @@ -0,0 +1,65 @@ +// RUN: rm -rf %t +// RUN: mkdir %t +// RUN: split-file %s %t + +// RUN: %clang_cc1 -std=c++20 -emit-obj -fmodules -fimplicit-module-maps -fmodules-cache-path=%t %t/main.cpp -o %t/main.o + +//--- V.h +#ifndef V_H +#define V_H + +class A { +public: + constexpr A() { } + constexpr ~A() { } +}; + +template <typename T> +class V { +public: + V() = default; + + constexpr V(int n, const A& a = A()) {} +}; + +#endif + +//--- inst1.h +#include "V.h" + +static void inst1() { + V<int> v; +} + +//--- inst2.h +#include "V.h" + +static void inst2() { + V<int> v(100); +} + +//--- module.modulemap +module "M" { + export * + module "V.h" { + export * + header "V.h" + } + module "inst1.h" { + export * + header "inst1.h" + } +} + +module "inst2.h" { + export * + header "inst2.h" +} + +//--- main.cpp +#include "V.h" +#include "inst2.h" + +static void m() { + static V<int> v(100); +} `````````` </details> https://github.com/llvm/llvm-project/pull/69076 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits