r230914 - DebugInfo: Give externally defined types a size and alignment where

David Blaikie dblaikie at gmail.com
Sun Mar 1 15:24:42 PST 2015


Hey Adrian - what's the reason we need the type's size for optimized debug
info output?
On Mar 1, 2015 2:11 PM, "Peter Collingbourne" <peter at pcc.me.uk> wrote:

> Author: pcc
> Date: Sun Mar  1 16:07:04 2015
> New Revision: 230914
>
> URL: http://llvm.org/viewvc/llvm-project?rev=230914&view=rev
> Log:
> DebugInfo: Give externally defined types a size and alignment where
> possible. Fixes PR22736.
>
> Modified:
>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>
> cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=230914&r1=230913&r2=230914&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Sun Mar  1 16:07:04 2015
> @@ -647,11 +647,19 @@ CGDebugInfo::getOrCreateRecordFwdDecl(co
>    unsigned Line = getLineNumber(RD->getLocation());
>    StringRef RDName = getClassName(RD);
>
> +  uint64_t Size = 0;
> +  uint64_t Align = 0;
> +
> +  const RecordDecl *D = RD->getDefinition();
> +  if (D && D->isCompleteDefinition()) {
> +    Size = CGM.getContext().getTypeSize(Ty);
> +    Align = CGM.getContext().getTypeAlign(Ty);
> +  }
>
>    // Create the type.
>    SmallString<256> FullName = getUniqueTagTypeName(Ty, CGM, TheCU);
>    llvm::DICompositeType RetTy = DBuilder.createReplaceableCompositeType(
> -      getTagForRecord(RD), RDName, Ctx, DefUnit, Line, 0, 0, 0,
> +      getTagForRecord(RD), RDName, Ctx, DefUnit, Line, 0, Size, Align,
>        llvm::DIDescriptor::FlagFwdDecl, FullName);
>    ReplaceMap.emplace_back(
>        std::piecewise_construct, std::make_tuple(Ty),
>
> Modified:
> cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp?rev=230914&r1=230913&r2=230914&view=diff
>
> ==============================================================================
> ---
> cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp
> (original)
> +++
> cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp
> Sun Mar  1 16:07:04 2015
> @@ -99,3 +99,11 @@ template <>
>  struct k<int>;
>  template struct k<int>;
>  // CHECK-NOT: ; [ DW_TAG_structure_type ] [k<int>]
> +
> +template <typename T>
> +struct l {
> +  int x;
> +};
> +extern template class l<int>;
> +l<int> li;
> +// CHECK: [ DW_TAG_structure_type ] [l<int>] {{.*}}size {{[^0]}}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150301/e70e7617/attachment.html>


More information about the cfe-commits mailing list