nickdesaulniers added inline comments.

================
Comment at: clang/lib/CodeGen/CGDecl.cpp:103-118
+  case Decl::CXXRecord: // struct/union/class X; [C++]
+    if (CGDebugInfo *DI = getDebugInfo())
+      if (CGM.getCodeGenOpts().hasMaybeUnusedDebugInfo() &&
+          cast<CXXRecordDecl>(D).hasDefinition())
+        DI->completeUnusedClass(cast<CXXRecordDecl>(D));
+    return;
   case Decl::Record:    // struct/union/class X;
----------------
dblaikie wrote:
> All of these might be able to be collapsed together - using 
> "cast<TagDecl>(D).hasDefinition()" ... to have a common implementation.
`TagDecl` doesn't have a method `hasDefinition`.  Only `CXXRecordDecl` does.


================
Comment at: clang/lib/CodeGen/CGDecl.cpp:116
+    if (CGDebugInfo *DI = getDebugInfo())
+      if (cast<EnumDecl>(&D)->getDefinition())
+        DI->EmitAndRetainType(getContext().getEnumType(cast<EnumDecl>(&D)));
----------------
dblaikie wrote:
> I think the right thing to call here (& the other places in this patch) is 
> "hasDefinition" rather than "getDefinition" (this will avoid the definition 
> being deserialized when it's not needed yet (then if we don't end up emitting 
> the type because the flag hasn't been given, it won't be deserialized 
> unnecessarily))
`TagDecl` doesn't have a method `hasDefinition`.  Only `CXXRecordDecl` does.


================
Comment at: clang/lib/CodeGen/CodeGenModule.cpp:5385
+      if (getCodeGenOpts().hasMaybeUnusedDebugInfo() && CRD->hasDefinition())
+        DI->completeUnusedClass(*CRD);
+      else if (auto *ES = D->getASTContext().getExternalSource())
----------------
dblaikie wrote:
> I think this might not work as intended if the type trips over the other 
> class deduplication optimizations (try manually testing with a type that has 
> an external VTable?) - and perhaps this codepath should use the EmitAndRetain 
> functionality.
completeUnusedClass eventually calls into CGDebugInfo::completeClass which 
makes use of the TypeCache.  What does it mean for a class to have "an external 
vtable?"  Can you give me an example?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D80242/new/

https://reviews.llvm.org/D80242



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to