llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Antonio Frighetto (antoniofrighetto) <details> <summary>Changes</summary> A miscompilation issue has been addressed with improved handling. Fixes: https://github.com/llvm/llvm-project/issues/127683. --- Full diff: https://github.com/llvm/llvm-project/pull/127824.diff 2 Files Affected: - (modified) clang/lib/CodeGen/CGExpr.cpp (+6-2) - (modified) clang/test/CodeGenCXX/derived-to-base.cpp (+19) ``````````diff diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index 191912ca7d800..3bba142f2b96e 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -5403,8 +5403,12 @@ LValue CodeGenFunction::EmitCastLValue(const CastExpr *E) { // TODO: Support accesses to members of base classes in TBAA. For now, we // conservatively pretend that the complete object is of the base class // type. - return MakeAddrLValue(Base, E->getType(), LV.getBaseInfo(), - CGM.getTBAAInfoForSubobject(LV, E->getType())); + LValue CastedLV = + MakeAddrLValue(Base, E->getType(), LV.getBaseInfo(), + CGM.getTBAAInfoForSubobject(LV, E->getType())); + if (LV.isVolatile()) + CastedLV.getQuals().addVolatile(); + return CastedLV; } case CK_ToUnion: return EmitAggExprToLValue(E); diff --git a/clang/test/CodeGenCXX/derived-to-base.cpp b/clang/test/CodeGenCXX/derived-to-base.cpp index c8dbd5bf5cb05..37a8e6f7ea6b6 100644 --- a/clang/test/CodeGenCXX/derived-to-base.cpp +++ b/clang/test/CodeGenCXX/derived-to-base.cpp @@ -46,4 +46,23 @@ namespace test3 { } } +// Ensure volatile is preserved during derived-to-base conversion. +namespace PR127683 { + +struct Base { + int Val; +}; + +struct Derived : Base { }; + +volatile Derived Obj; + +// CHECK-LABEL: define void @_ZN8PR12768319test_volatile_storeEv() #0 +// CHECK: store volatile i32 0, ptr @_ZN8PR1276833ObjE, align 4 +void test_volatile_store() { + Obj.Val = 0; +} + +} + // CHECK: attributes [[NUW]] = { mustprogress noinline nounwind{{.*}} } `````````` </details> https://github.com/llvm/llvm-project/pull/127824 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits