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