Author: evancheng Date: Fri Jan 25 18:17:32 2008 New Revision: 46381 URL: http://llvm.org/viewvc/llvm-project?rev=46381&view=rev Log: Also drop zero-sized aggregates during type conversion.
Modified: llvm-gcc-4.2/trunk/gcc/llvm-abi.h llvm-gcc-4.2/trunk/gcc/llvm-internal.h llvm-gcc-4.2/trunk/gcc/llvm-types.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-abi.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-abi.h?rev=46381&r1=46380&r2=46381&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-abi.h (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-abi.h Fri Jan 25 18:17:32 2008 @@ -120,13 +120,6 @@ } } -/// isAggregareOfSizeZero - Returns true if this is an aggregate with size zero. -/// -static bool isAggregareOfSizeZero(tree type) { - if (!isAggregateTreeType(type)) return false; - return int_size_in_bytes(type) == 0; -} - // LLVM_SHOULD_PASS_AGGREGATE_USING_BYVAL_ATTR - Return true if this aggregate // value should be passed by value, i.e. passing its address with the byval // attribute bit set. The default is false. @@ -234,7 +227,7 @@ PassInMixedRegisters(type, Ty, Elts); } else if (LLVM_SHOULD_PASS_AGGREGATE_IN_INTEGER_REGS(type)) { PassInIntegerRegisters(type, Ty); - } else if (isAggregareOfSizeZero(type)) { + } else if (isAggregateOfSizeZero(type)) { // Zero sized aggregare, just drop it! ; } else if (TREE_CODE(type) == RECORD_TYPE) { Modified: llvm-gcc-4.2/trunk/gcc/llvm-internal.h URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-internal.h?rev=46381&r1=46380&r2=46381&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-internal.h (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-internal.h Fri Jan 25 18:17:32 2008 @@ -118,6 +118,10 @@ /// element added to match llvm struct type size and gcc struct type size. bool isPaddingElement(const Type *T, unsigned N); +/// isAggregateOfSizeZero - Returns true if this is an aggregate with size zero. +/// +bool isAggregateOfSizeZero(union tree_node*); + /// TypeConverter - Implement the converter from GCC types to LLVM types. /// class TypeConverter { Modified: llvm-gcc-4.2/trunk/gcc/llvm-types.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-types.cpp?rev=46381&r1=46380&r2=46381&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-types.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-types.cpp Fri Jan 25 18:17:32 2008 @@ -1610,6 +1610,14 @@ } +/// isAggregateOfSizeZero - Returns true if this is an aggregate with size zero. +/// +bool isAggregateOfSizeZero(tree type) { + if (!isAggregateTreeType(type)) return false; + return int_size_in_bytes(type) == 0; +} + + /// Mapping from type to type-used-as-base-class and back. static DenseMap<tree, tree> BaseTypesMap; @@ -2044,6 +2052,9 @@ unsigned FieldOffsetInBits = getFieldOffsetInBits(Field); tree FieldType = getDeclaredType(Field); + if (isAggregateOfSizeZero(FieldType)) + continue; + // If this is a bitfield, we may want to adjust the FieldOffsetInBits to // produce safe code. In particular, bitfields will be loaded/stored as // their *declared* type, not the smallest integer type that contains _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits