From: Chris Lattner Date: Wed, 18 Aug 2010 00:08:27 +0000 (+0000) Subject: Fix PR7889 by generalizing some over specialized code. There is no X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d7241c77d388f798c5db29848396109ea1aa83d2;p=clang Fix PR7889 by generalizing some over specialized code. There is no reason that this should be limited to simple lvalues. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111331 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index e978870996..18ecf1719f 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -1938,10 +1938,8 @@ LValue CodeGenFunction::EmitBinaryOperatorLValue(const BinaryOperator *E) { if (!hasAggregateLLVMType(E->getType())) { // Emit the LHS as an l-value. LValue LV = EmitLValue(E->getLHS()); - - llvm::Value *RHS = EmitScalarExpr(E->getRHS()); - EmitStoreOfScalar(RHS, LV.getAddress(), LV.isVolatileQualified(), - E->getType()); + // Sore the value through the l-value. + EmitStoreThroughLValue(EmitAnyExpr(E->getRHS()), LV, E->getType()); return LV; } diff --git a/test/CodeGenCXX/expr.cpp b/test/CodeGenCXX/expr.cpp index 26bda055b3..775169d957 100644 --- a/test/CodeGenCXX/expr.cpp +++ b/test/CodeGenCXX/expr.cpp @@ -18,3 +18,13 @@ void test2() { ++a+=10; } // PR7892 int test3(const char*); int test3g = test3(__PRETTY_FUNCTION__); + + +// PR7889 +struct test4A { + int j : 2; +}; +int test4() { + test4A a; + (a.j = 2) = 3; +}