diff options
author | Chris Lattner <sabre@nondot.org> | 2012-01-04 22:35:55 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2012-01-04 22:35:55 +0000 |
commit | 44a239973dfe86a0d2432ca2502b7878fadfe23e (patch) | |
tree | d7ee6f3309d5633567896b2b876b527623723d81 /lib/CodeGen | |
parent | 00b64f39decd4ff1d781657b9e38d5f57824c186 (diff) |
implement rdar://10639962 by keeping track of increased alignment
information even in subscripting operations.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147557 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/CGExpr.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index 4c23c061a7..c6ba65c03c 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -1702,13 +1702,17 @@ LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E) { assert(!T.isNull() && "CodeGenFunction::EmitArraySubscriptExpr(): Illegal base type"); + // Limit the alignment to that of the result type. + LValue LV; if (!ArrayAlignment.isZero()) { CharUnits Align = getContext().getTypeAlignInChars(T); ArrayAlignment = std::min(Align, ArrayAlignment); + LV = MakeAddrLValue(Address, T, ArrayAlignment); + } else { + LV = MakeNaturalAlignAddrLValue(Address, T); } - LValue LV = MakeAddrLValue(Address, T, ArrayAlignment); LV.getQuals().setAddressSpace(E->getBase()->getType().getAddressSpace()); if (getContext().getLangOptions().ObjC1 && |