From: Eli Friedman Date: Thu, 23 Aug 2012 11:27:56 +0000 (+0000) Subject: Attempt to fix clang bootstrap (broken by r162425). X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8e4c189e6502cffb760b33f092e65effb1d10092;p=clang Attempt to fix clang bootstrap (broken by r162425). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162440 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGBuiltin.cpp b/lib/CodeGen/CGBuiltin.cpp index 4ea2908c54..b55137094e 100644 --- a/lib/CodeGen/CGBuiltin.cpp +++ b/lib/CodeGen/CGBuiltin.cpp @@ -1486,13 +1486,33 @@ CodeGenFunction::EmitPointerWithAlignment(const Expr *Addr) { return Ptr; } else if (ICE->getCastKind() == CK_ArrayToPointerDecay) { LValue LV = EmitLValue(ICE->getSubExpr()); - return std::make_pair(LV.getAddress(), LV.getAlignment().getQuantity()); + unsigned Align = LV.getAlignment().getQuantity(); + if (!Align) { + // FIXME: Once LValues are fixed to always set alignment, + // zap this code. + QualType PtTy = ICE->getSubExpr()->getType(); + if (!PtTy->isIncompleteType()) + Align = getContext().getTypeAlignInChars(PtTy).getQuantity(); + else + Align = 1; + } + return std::make_pair(LV.getAddress(), Align); } } if (const UnaryOperator *UO = dyn_cast(Addr)) { if (UO->getOpcode() == UO_AddrOf) { LValue LV = EmitLValue(UO->getSubExpr()); - return std::make_pair(LV.getAddress(), LV.getAlignment().getQuantity()); + unsigned Align = LV.getAlignment().getQuantity(); + if (!Align) { + // FIXME: Once LValues are fixed to always set alignment, + // zap this code. + QualType PtTy = UO->getSubExpr()->getType(); + if (!PtTy->isIncompleteType()) + Align = getContext().getTypeAlignInChars(PtTy).getQuantity(); + else + Align = 1; + } + return std::make_pair(LV.getAddress(), Align); } }