aaron.ballman updated this revision to Diff 382696. aaron.ballman added a comment.
Updated to use `EnsureDest()` based on review feedback. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D111669/new/ https://reviews.llvm.org/D111669 Files: clang/lib/CodeGen/CGExprAgg.cpp clang/test/CodeGenCXX/cxx20-consteval-crash.cpp Index: clang/test/CodeGenCXX/cxx20-consteval-crash.cpp =================================================================== --- clang/test/CodeGenCXX/cxx20-consteval-crash.cpp +++ clang/test/CodeGenCXX/cxx20-consteval-crash.cpp @@ -12,3 +12,15 @@ // CHECK-NEXT: @_ZN7PR507872x2E = global i32* @_ZN7PR507872x_E, align 4 } +namespace PR51484 { +// This code would previously cause a crash. +struct X { int val; }; +consteval X g() { return {0}; } +void f() { g(); } + +// CHECK: define dso_local void @_ZN7PR514841fEv() #0 { +// CHECK: entry: +// CHECK-NOT: call i32 @_ZN7PR514841gEv() +// CHECK: ret void +// CHECK: } +} Index: clang/lib/CodeGen/CGExprAgg.cpp =================================================================== --- clang/lib/CodeGen/CGExprAgg.cpp +++ clang/lib/CodeGen/CGExprAgg.cpp @@ -127,6 +127,8 @@ } void VisitConstantExpr(ConstantExpr *E) { + EnsureDest(E->getType()); + if (llvm::Value *Result = ConstantEmitter(CGF).tryEmitConstantExpr(E)) { CGF.EmitAggregateStore(Result, Dest.getAddress(), E->getType().isVolatileQualified());
Index: clang/test/CodeGenCXX/cxx20-consteval-crash.cpp =================================================================== --- clang/test/CodeGenCXX/cxx20-consteval-crash.cpp +++ clang/test/CodeGenCXX/cxx20-consteval-crash.cpp @@ -12,3 +12,15 @@ // CHECK-NEXT: @_ZN7PR507872x2E = global i32* @_ZN7PR507872x_E, align 4 } +namespace PR51484 { +// This code would previously cause a crash. +struct X { int val; }; +consteval X g() { return {0}; } +void f() { g(); } + +// CHECK: define dso_local void @_ZN7PR514841fEv() #0 { +// CHECK: entry: +// CHECK-NOT: call i32 @_ZN7PR514841gEv() +// CHECK: ret void +// CHECK: } +} Index: clang/lib/CodeGen/CGExprAgg.cpp =================================================================== --- clang/lib/CodeGen/CGExprAgg.cpp +++ clang/lib/CodeGen/CGExprAgg.cpp @@ -127,6 +127,8 @@ } void VisitConstantExpr(ConstantExpr *E) { + EnsureDest(E->getType()); + if (llvm::Value *Result = ConstantEmitter(CGF).tryEmitConstantExpr(E)) { CGF.EmitAggregateStore(Result, Dest.getAddress(), E->getType().isVolatileQualified());
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits