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

Peter Collingbourne peter at pcc.me.uk
Sun Mar 1 14:07:05 PST 2015


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]}}





More information about the cfe-commits mailing list