[llvm-commits] [llvm-gcc-4.2] r48857 - /llvm-gcc-4.2/trunk/gcc/llvm-types.cpp
Devang Patel
dpatel at apple.com
Wed Mar 26 18:56:06 PDT 2008
With this patch, now all struct-layout-1.exp tests from llvm-gcc-4.2
dejagnu test suite passes on x86 darwin (32 bit)!
-
Devang
On Mar 26, 2008, at 6:51 PM, Devang Patel wrote:
> Author: dpatel
> Date: Wed Mar 26 20:51:14 2008
> New Revision: 48857
>
> URL: http://llvm.org/viewvc/llvm-project?rev=48857&view=rev
> Log:
> Redo entire struct layout when packed field is seen as part of non-
> packed struct.
>
> Modified:
> llvm-gcc-4.2/trunk/gcc/llvm-types.cpp
>
> 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=48857&r1=48856&r2=48857&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm-gcc-4.2/trunk/gcc/llvm-types.cpp (original)
> +++ llvm-gcc-4.2/trunk/gcc/llvm-types.cpp Wed Mar 26 20:51:14 2008
> @@ -1759,10 +1759,18 @@
>
> // Handle bit-fields specially.
> if (isBitfield(Field)) {
> - // Unnamed bitfield type does not contribute in struct alignment
> - // computations. Use packed llvm structure in such cases.
> - if (!DECL_NAME(Field) && !Info.isPacked())
> - return false;
> + // If this field is forcing packed llvm struct then retry
> entire struct
> + // layout.
> + if (!Info.isPacked()) {
> + // Unnamed bitfield type does not contribute in struct
> alignment
> + // computations. Use packed llvm structure in such cases.
> + if (!DECL_NAME(Field))
> + return false;
> + // If this field is packed then the struct may need padding
> fields
> + // before this field.
> + if (DECL_PACKED(Field))
> + return false;
> + }
> DecodeStructBitField(Field, Info);
> return true;
> }
> @@ -1810,10 +1818,6 @@
> StructTypeConversionInfo
> &Info) {
> unsigned FieldSizeInBits = TREE_INT_CST_LOW(DECL_SIZE(Field));
>
> - if (DECL_PACKED(Field))
> - // Individual fields can be packed.
> - Info.markAsPacked();
> -
> if (FieldSizeInBits == 0) // Ignore 'int:0', which just affects
> layout.
> return;
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
-
Devang
More information about the llvm-commits
mailing list