[llvm-commits] [llvm-gcc-4.2] r61207 - /llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp
Rafael Espindola
espindola at google.com
Fri Dec 19 04:41:02 PST 2008
This broke llvm-gcc bootstrap (see bug 3236).
2008/12/18 Devang Patel <dpatel at apple.com>:
> Author: dpatel
> Date: Thu Dec 18 13:18:20 2008
> New Revision: 61207
>
> URL: http://llvm.org/viewvc/llvm-project?rev=61207&view=rev
> Log:
>
> Reuse DIType slot used for foward declaration for real definition.
>
> Modified:
> llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp
>
> Modified: llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp?rev=61207&r1=61206&r2=61207&view=diff
>
> ==============================================================================
> --- llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp (original)
> +++ llvm-gcc-4.2/trunk/gcc/llvm-debug.cpp Thu Dec 18 13:18:20 2008
> @@ -325,8 +325,14 @@
>
> // Check to see if the compile unit already has created this type.
> DIType &Slot = TypeCache[type];
> - if (!Slot.isNull())
> - return Slot;
> + bool SlotIsFwdDecl = false;
> + if (!Slot.isNull()) {
> + if (Slot.getFlags() == DW_AT_declaration
> + && TYPE_SIZE(type) != 0)
> + SlotIsFwdDecl = true;
> + if (!SlotIsFwdDecl)
> + return Slot;
> + }
>
> DIType MainTy;
> if (type != TYPE_MAIN_VARIANT(type))
> @@ -528,15 +534,17 @@
> unsigned Tag = TREE_CODE(type) == RECORD_TYPE ? DW_TAG_structure_type :
> DW_TAG_union_type;
>
> - // Records and classes and unions can all be recursive. To handle them, we
> - // first generate a debug descriptor for the struct as a forward declaration.
> - // Then (if it is a definition) we go through and get debug info for all of
> - // its members. Finally, we create a descriptor for the complete type (which
> - // may refer to the forward decl if the struct is recursive) and replace all
> - // uses of the forward declaration with the final definition.
> + // Records and classes and unions can all be recursive. To handle them,
> + // we first generate a debug descriptor for the struct as a forward
> + // declaration. Then (if it is a definition) we go through and get debug
> + // info for all of its members. Finally, we create a descriptor for the
> + // complete type (which may refer to the forward decl if the struct is
> + // recursive) and replace all uses of the forward declaration with the
> + // final definition.
> expanded_location Loc = GetNodeLocation(type, false);
> - llvm::DIType FwdDecl =
> - DebugFactory.CreateCompositeType(Tag, Unit, TypeName, Unit, Loc.line, 0, 0, 0, 0,
> + llvm::DIType FwdDecl = SlotIsFwdDecl ? Slot :
> + DebugFactory.CreateCompositeType(Tag, Unit, TypeName, Unit, Loc.line,
> + 0, 0, 0, DW_AT_declaration,
> llvm::DIType(), llvm::DIArray());
>
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
--
Rafael Avila de Espindola
Google | Gordon House | Barrow Street | Dublin 4 | Ireland
Registered in Dublin, Ireland | Registration Number: 368047
More information about the llvm-commits
mailing list