r248062 - CGDebugInfo: Make creating a skeleton CU in getOrCreateModuleRef optional.

Adrian Prantl via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 18 17:52:23 PDT 2015


> On Sep 18, 2015, at 5:47 PM, David Blaikie <dblaikie at gmail.com> wrote:
> 
> 
> 
> On Fri, Sep 18, 2015 at 5:45 PM, Adrian Prantl <aprantl at apple.com <mailto:aprantl at apple.com>> wrote:
> 
>> On Sep 18, 2015, at 5:11 PM, David Blaikie <dblaikie at gmail.com <mailto:dblaikie at gmail.com>> wrote:
>> 
>> 
>> 
>> On Fri, Sep 18, 2015 at 4:01 PM, Adrian Prantl via cfe-commits <cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>> wrote:
>> Author: adrian
>> Date: Fri Sep 18 18:01:45 2015
>> New Revision: 248062
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=248062&view=rev <http://llvm.org/viewvc/llvm-project?rev=248062&view=rev>
>> Log:
>> CGDebugInfo: Make creating a skeleton CU in getOrCreateModuleRef optional.
>> We don't want a skeleton CU when generating debug info for the module
>> itself.
>> 
>> NFC.
>> 
>> Modified:
>>     cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>>     cfe/trunk/lib/CodeGen/CGDebugInfo.h
>> 
>> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=248062&r1=248061&r2=248062&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=248062&r1=248061&r2=248062&view=diff>
>> ==============================================================================
>> --- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Fri Sep 18 18:01:45 2015
>> @@ -1673,7 +1673,8 @@ llvm::DIType *CGDebugInfo::CreateType(co
>>  }
>> 
>>  llvm::DIModule *
>> -CGDebugInfo::getOrCreateModuleRef(ExternalASTSource::ASTSourceDescriptor Mod) {
>> +CGDebugInfo::getOrCreateModuleRef(ExternalASTSource::ASTSourceDescriptor Mod,
>> +                                  bool CreateSkeletonCU) {
>>    auto &ModRef = ModuleRefCache[Mod.ModuleName];
>>    if (ModRef)
>>      return cast<llvm::DIModule>(ModRef);
>> @@ -1700,15 +1701,20 @@ CGDebugInfo::getOrCreateModuleRef(Extern
>>        OS << '\"';
>>      }
>>    }
>> -  llvm::DIBuilder DIB(CGM.getModule());
>> -  auto *CU = DIB.createCompileUnit(TheCU->getSourceLanguage(), Mod.ModuleName,
>> -                                   Mod.Path, TheCU->getProducer(), true,
>> -                                   StringRef(), 0, Mod.ASTFile,
>> -                                   llvm::DIBuilder::FullDebug, Mod.Signature);
>> -  llvm::DIModule *M =
>> -      DIB.createModule(CU, Mod.ModuleName, ConfigMacros, Mod.Path,
>> -                       CGM.getHeaderSearchOpts().Sysroot);
>> -  DIB.finalize();
>> +
>> +  llvm::DIModule *M = nullptr;
>> +  if (CreateSkeletonCU) {
>> +    llvm::DIBuilder DIB(CGM.getModule());
>> +    auto *CU = DIB.createCompileUnit(TheCU->getSourceLanguage(), Mod.ModuleName,
>> +                                     Mod.Path, TheCU->getProducer(), true,
>> +                                     StringRef(), 0, Mod.ASTFile,
>> +                                     llvm::DIBuilder::FullDebug, Mod.Signature);
>> +    M = DIB.createModule(CU, Mod.ModuleName, ConfigMacros, Mod.Path,
>> +                         CGM.getHeaderSearchOpts().Sysroot);
>> 
>> Could you remind me why we have a module in the skeleton CU?
> 
> Note that this does not emit the module *in* the skeleton CU it just creates a skeleton CU alongside the module. The fact that it is mentioned as scope of the module here is misleading (and I should changed that to TheCU for clarity), DIBuilder ignores any DICompileUnits that are passed in as parent scopes.
> 
> So why are you passing it & why are you using DIB to build it? (why not remove this and make the else block unconditional?)

I’m running exactly this patch through check-clang as we speak :-)

-- adrian

>  
> 
> -- adrian
> 
>>  
>> +    DIB.finalize();
>> +  } else
>> +    M = DBuilder.createModule(TheCU, Mod.ModuleName, ConfigMacros, Mod.Path,
>> +                              CGM.getHeaderSearchOpts().Sysroot);
>>    ModRef.reset(M);
>>    return M;
>>  }
>> @@ -2158,12 +2164,13 @@ llvm::DIModule *CGDebugInfo::getParentMo
>>    if (!DebugTypeExtRefs || !D->isFromASTFile())
>>      return nullptr;
>> 
>> +  // Record a reference to an imported clang module or precompiled header.
>>    llvm::DIModule *ModuleRef = nullptr;
>>    auto *Reader = CGM.getContext().getExternalSource();
>>    auto Idx = D->getOwningModuleID();
>>    auto Info = Reader->getSourceDescriptor(Idx);
>>    if (Info)
>> -    ModuleRef = getOrCreateModuleRef(*Info);
>> +    ModuleRef = getOrCreateModuleRef(*Info, true);
>>    return ModuleRef;
>>  }
>> 
>> @@ -3387,9 +3394,9 @@ void CGDebugInfo::EmitImportDecl(const I
>>    auto *Reader = CGM.getContext().getExternalSource();
>>    auto Info = Reader->getSourceDescriptor(*ID.getImportedModule());
>>    DBuilder.createImportedDeclaration(
>> -    getCurrentContextDescriptor(cast<Decl>(ID.getDeclContext())),
>> -                                getOrCreateModuleRef(Info),
>> -                                getLineNumber(ID.getLocation()));
>> +      getCurrentContextDescriptor(cast<Decl>(ID.getDeclContext())),
>> +      getOrCreateModuleRef(Info, DebugTypeExtRefs),
>> +      getLineNumber(ID.getLocation()));
>>  }
>> 
>>  llvm::DIImportedEntity *
>> 
>> Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=248062&r1=248061&r2=248062&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.h?rev=248062&r1=248061&r2=248062&view=diff>
>> ==============================================================================
>> --- cfe/trunk/lib/CodeGen/CGDebugInfo.h (original)
>> +++ cfe/trunk/lib/CodeGen/CGDebugInfo.h Fri Sep 18 18:01:45 2015
>> @@ -403,9 +403,11 @@ private:
>>    /// Get the type from the cache or create a new type if necessary.
>>    llvm::DIType *getOrCreateType(QualType Ty, llvm::DIFile *Fg);
>> 
>> -  /// Get a reference to a clang module.
>> +  /// Get a reference to a clang module.  If \p CreateSkeletonCU is true,
>> +  /// this also creates a split dwarf skeleton compile unit.
>>    llvm::DIModule *
>> -  getOrCreateModuleRef(ExternalASTSource::ASTSourceDescriptor Mod);
>> +  getOrCreateModuleRef(ExternalASTSource::ASTSourceDescriptor Mod,
>> +                       bool CreateSkeletonCU);
>> 
>>    /// DebugTypeExtRefs: If \p D originated in a clang module, return it.
>>    llvm::DIModule *getParentModuleOrNull(const Decl *D);
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits>
>> 
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150918/3c96ffbf/attachment-0001.html>


More information about the cfe-commits mailing list