[PATCH] D49109: Borrow visibility from __fundamental_type_info for generated fundamental type infos

Peter Collingbourne via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 19 12:45:51 PDT 2018


pcc added a subscriber: cfe-commits.
pcc added inline comments.


================
Comment at: lib/CodeGen/ItaniumCXXABI.cpp:3215
   // Emit the standard library with external linkage.
   llvm::GlobalVariable::LinkageTypes Linkage;
   if (IsStdLib)
----------------
`IsStdLib` will always be false at this point because of the if statement on line 3211 so I think you can change this to just `llvm::GlobalVariable::LinkageTypes Linkage = getTypeInfoLinkage(CGM, Ty);` and fold the call to `IsStandardLibraryRTTIDescriptor(Ty)` into the if statement.


================
Comment at: lib/CodeGen/ItaniumCXXABI.cpp:3239-3241
+    } else if (RD && RD->hasAttr<DLLImportAttr>() &&
+               ShouldUseExternalRTTIDescriptor(CGM, Ty)) {
+      DLLStorageClass = llvm::GlobalValue::DLLImportStorageClass;
----------------
Similarly, `ShouldUseExternalRTTIDescriptor(CGM, Ty)` should always return false here because of the if statement, so this code is dead.


================
Comment at: lib/CodeGen/ItaniumCXXABI.cpp:3408
 
   if (CGM.getTriple().isWindowsItaniumEnvironment()) {
+    TypeName->setDLLStorageClass(DLLStorageClass);
----------------
You can remove the if statement, setting the storage class to default has no effect here because it is initialized to default.


================
Comment at: lib/CodeGen/ItaniumCXXABI.cpp:3411-3417
+    if (DLLStorageClass == llvm::GlobalValue::DLLImportStorageClass) {
       // Because the typename and the typeinfo are DLL import, convert them to
       // declarations rather than definitions.  The initializers still need to
       // be constructed to calculate the type for the declarations.
       TypeName->setInitializer(nullptr);
       GV->setInitializer(nullptr);
     }
----------------
This code is also dead.


================
Comment at: lib/CodeGen/ItaniumCXXABI.cpp:3704
 
-void ItaniumCXXABI::EmitFundamentalRTTIDescriptors(bool DLLExport) {
+void ItaniumCXXABI::EmitFundamentalRTTIDescriptors(
+    const TypeInfoOptions* Options) {
----------------
You might consider inlining `EmitFundamentalRTTIDescriptor` into this function and having it take a `CXXRecordDecl`. Then you wouldn't need to pass the `TypeInfoOptions` structure around, you can just compute the properties in this function outside of the loop.


https://reviews.llvm.org/D49109





More information about the cfe-commits mailing list