Author: dpatel Date: Mon Feb 4 17:24:43 2008 New Revision: 46726 URL: http://llvm.org/viewvc/llvm-project?rev=46726&view=rev Log: Use appropriate alignment while handling packed struct member.
Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=46726&r1=46725&r2=46726&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Mon Feb 4 17:24:43 2008 @@ -2148,6 +2148,13 @@ bool isVolatile = TREE_THIS_VOLATILE(exp); const Type *Ty = ConvertType(TREE_TYPE(exp)); unsigned Alignment = expr_align(exp) / 8; + if (TREE_CODE(exp) == COMPONENT_REF) + if (const StructType *STy = + dyn_cast<StructType>(ConvertType(TREE_TYPE(TREE_OPERAND(exp, 0))))) + if (STy->isPacked()) + // Packed struct members use 1 byte alignment + Alignment = 1; + if (!LV.isBitfield()) { if (!DestLoc) { @@ -2680,6 +2687,12 @@ LValue LV = EmitLV(lhs); bool isVolatile = TREE_THIS_VOLATILE(lhs); unsigned Alignment = expr_align(lhs) / 8; + if (TREE_CODE(lhs) == COMPONENT_REF) + if (const StructType *STy = + dyn_cast<StructType>(ConvertType(TREE_TYPE(TREE_OPERAND(lhs, 0))))) + if (STy->isPacked()) + // Packed struct members use 1 byte alignment + Alignment = 1; if (!LV.isBitfield()) { const Type *ValTy = ConvertType(TREE_TYPE(rhs)); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits