summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2010-06-03 19:58:07 +0000
committerEli Friedman <eli.friedman@gmail.com>2010-06-03 19:58:07 +0000
commitcce5b81ce157a032c8ac7ffcefc0c1ea9871c814 (patch)
tree57405d7c4937af4996fc9649d7ac0e317a182593
parent3b61d21fac7d6ffecfed0dc80a185b4266f33ea7 (diff)
downloadbcm5719-llvm-cce5b81ce157a032c8ac7ffcefc0c1ea9871c814.tar.gz
bcm5719-llvm-cce5b81ce157a032c8ac7ffcefc0c1ea9871c814.zip
Don't intentionally try to ignore the value of a scalar expression when we
actually care about it. Fixes PR7291. llvm-svn: 105404
-rw-r--r--clang/lib/CodeGen/CGClass.cpp2
-rw-r--r--clang/test/CodeGenCXX/member-init-assignment.cpp12
2 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGClass.cpp b/clang/lib/CodeGen/CGClass.cpp
index bebea549f96..348f85b32fd 100644
--- a/clang/lib/CodeGen/CGClass.cpp
+++ b/clang/lib/CodeGen/CGClass.cpp
@@ -467,7 +467,7 @@ static void EmitMemberInitializer(CodeGenFunction &CGF,
} else if (FieldType->isArrayType() && !MemberInit->getInit()) {
CGF.EmitNullInitialization(LHS.getAddress(), Field->getType());
} else if (!CGF.hasAggregateLLVMType(Field->getType())) {
- RHS = RValue::get(CGF.EmitScalarExpr(MemberInit->getInit(), true));
+ RHS = RValue::get(CGF.EmitScalarExpr(MemberInit->getInit()));
CGF.EmitStoreThroughLValue(RHS, LHS, FieldType);
} else if (MemberInit->getInit()->getType()->isAnyComplexType()) {
CGF.EmitComplexExprIntoAddr(MemberInit->getInit(), LHS.getAddress(),
diff --git a/clang/test/CodeGenCXX/member-init-assignment.cpp b/clang/test/CodeGenCXX/member-init-assignment.cpp
new file mode 100644
index 00000000000..c23fe2b9c51
--- /dev/null
+++ b/clang/test/CodeGenCXX/member-init-assignment.cpp
@@ -0,0 +1,12 @@
+// RUN: %clang_cc1 %s -emit-llvm-only -verify
+// PR7291
+
+struct Foo {
+ unsigned file_id;
+
+ Foo(unsigned arg);
+};
+
+Foo::Foo(unsigned arg) : file_id(arg = 42)
+{ }
+
OpenPOWER on IntegriCloud