summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGExprConstant.cpp
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2009-08-01 23:11:24 +0000
committerEli Friedman <eli.friedman@gmail.com>2009-08-01 23:11:24 +0000
commit62561fe9b03b05108754cfd4a292e3acc029a8c1 (patch)
tree58e29ce663f120d441dd2e5bf54586c936f5f4fd /clang/lib/CodeGen/CGExprConstant.cpp
parent5a283bf8481d0804dc6a27f68d625c289a274a29 (diff)
downloadbcm5719-llvm-62561fe9b03b05108754cfd4a292e3acc029a8c1.tar.gz
bcm5719-llvm-62561fe9b03b05108754cfd4a292e3acc029a8c1.zip
Fix a minor issue with unions in the new struct building code.
llvm-svn: 77829
Diffstat (limited to 'clang/lib/CodeGen/CGExprConstant.cpp')
-rw-r--r--clang/lib/CodeGen/CGExprConstant.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGExprConstant.cpp b/clang/lib/CodeGen/CGExprConstant.cpp
index cdc8bdb9701..dbb1bdcc6e3 100644
--- a/clang/lib/CodeGen/CGExprConstant.cpp
+++ b/clang/lib/CodeGen/CGExprConstant.cpp
@@ -270,7 +270,7 @@ class VISIBILITY_HIDDEN ConstStructBuilder {
AppendPadding(NumPadBytes);
}
- bool Build(const InitListExpr *ILE) {
+ bool Build(InitListExpr *ILE) {
RecordDecl *RD = ILE->getType()->getAs<RecordType>()->getDecl();
const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
@@ -280,6 +280,9 @@ class VISIBILITY_HIDDEN ConstStructBuilder {
FieldEnd = RD->field_end();
ElementNo < ILE->getNumInits() && Field != FieldEnd;
++Field, ++FieldNo) {
+ if (RD->isUnion() && ILE->getInitializedFieldInUnion() != *Field)
+ continue;
+
if (Field->isBitField()) {
if (!Field->getIdentifier())
continue;
@@ -330,7 +333,7 @@ class VISIBILITY_HIDDEN ConstStructBuilder {
public:
static llvm::Constant *BuildStruct(CodeGenModule &CGM, CodeGenFunction *CGF,
- const InitListExpr *ILE) {
+ InitListExpr *ILE) {
ConstStructBuilder Builder(CGM, CGF);
if (!Builder.Build(ILE))
OpenPOWER on IntegriCloud