[llvm] r194973 - Debug Info Verifier: enable public functions of Finder to update the type map.
Manman Ren
manman.ren at gmail.com
Mon Nov 18 10:26:00 PST 2013
Hi Alexey,
Thanks for fixing the issue. Sorry about the breakage.
Manman
On Mon, Nov 18, 2013 at 3:11 AM, Alexey Samsonov <samsonov at google.com>wrote:
> Hi Manman,
>
> On Sun, Nov 17, 2013 at 10:42 PM, Manman Ren <manman.ren at gmail.com> wrote:
>
>> Author: mren
>> Date: Sun Nov 17 12:42:37 2013
>> New Revision: 194973
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=194973&view=rev
>> Log:
>> Debug Info Verifier: enable public functions of Finder to update the type
>> map.
>>
>> We used to depend on running processModule before the other public
>> functions
>> such as processDeclare, processValue and processLocation. We are now
>> relaxing
>> the constraint by adding a module argument to the three functions and
>> letting the three functions to initialize the type map. This will be used
>> in
>> a follow-on patch that collects nodes reachable from a Function.
>>
>> Modified:
>> llvm/trunk/include/llvm/DebugInfo.h
>> llvm/trunk/lib/IR/DebugInfo.cpp
>> llvm/trunk/lib/IR/Verifier.cpp
>>
>> Modified: llvm/trunk/include/llvm/DebugInfo.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo.h?rev=194973&r1=194972&r2=194973&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/include/llvm/DebugInfo.h (original)
>> +++ llvm/trunk/include/llvm/DebugInfo.h Sun Nov 17 12:42:37 2013
>> @@ -766,16 +766,19 @@ public:
>> void processModule(const Module &M);
>>
>> /// processDeclare - Process DbgDeclareInst.
>> - void processDeclare(const DbgDeclareInst *DDI);
>> + void processDeclare(const Module &M, const DbgDeclareInst *DDI);
>> /// Process DbgValueInst.
>> - void processValue(const DbgValueInst *DVI);
>> + void processValue(const Module &M, const DbgValueInst *DVI);
>> /// processLocation - Process DILocation.
>> - void processLocation(DILocation Loc);
>> + void processLocation(const Module &M, DILocation Loc);
>>
>> /// Clear all lists.
>> void reset();
>>
>> private:
>> + /// Initialize TypeIdentifierMap.
>> + void IntializeTypeMap(const Module &M);
>> +
>> /// processType - Process DIType.
>> void processType(DIType DT);
>>
>> @@ -828,6 +831,8 @@ private:
>> SmallVector<MDNode *, 8> Scopes; // Scopes
>> SmallPtrSet<MDNode *, 64> NodesSeen;
>> DITypeIdentifierMap TypeIdentifierMap;
>> + /// Specify if TypeIdentifierMap is initialized.
>> + bool TypeMapInitialized;
>>
>
> This wasn't initialized in the ctor, see r195003. This error was detected
> by MSan bootstrap bot, but unfortunately it was red already for unrelated
> reasons.
> Hopefully it should be fixed now.
>
>
>> };
>> } // end namespace llvm
>>
>>
>> Modified: llvm/trunk/lib/IR/DebugInfo.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=194973&r1=194972&r2=194973&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/IR/DebugInfo.cpp (original)
>> +++ llvm/trunk/lib/IR/DebugInfo.cpp Sun Nov 17 12:42:37 2013
>> @@ -951,12 +951,21 @@ void DebugInfoFinder::reset() {
>> Scopes.clear();
>> NodesSeen.clear();
>> TypeIdentifierMap.clear();
>> + TypeMapInitialized = false;
>> +}
>> +
>> +void DebugInfoFinder::IntializeTypeMap(const Module &M) {
>> + if (!TypeMapInitialized)
>> + if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) {
>> + TypeIdentifierMap = generateDITypeIdentifierMap(CU_Nodes);
>> + TypeMapInitialized = true;
>> + }
>> }
>>
>> /// processModule - Process entire module and collect debug info.
>> void DebugInfoFinder::processModule(const Module &M) {
>> + IntializeTypeMap(M);
>> if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) {
>> - TypeIdentifierMap = generateDITypeIdentifierMap(CU_Nodes);
>> for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
>> DICompileUnit CU(CU_Nodes->getOperand(i));
>> addCompileUnit(CU);
>> @@ -993,11 +1002,12 @@ void DebugInfoFinder::processModule(cons
>> }
>>
>> /// processLocation - Process DILocation.
>> -void DebugInfoFinder::processLocation(DILocation Loc) {
>> +void DebugInfoFinder::processLocation(const Module &M, DILocation Loc) {
>> if (!Loc)
>> return;
>> + IntializeTypeMap(M);
>> processScope(Loc.getScope());
>> - processLocation(Loc.getOrigLocation());
>> + processLocation(M, Loc.getOrigLocation());
>> }
>>
>> /// processType - Process DIType.
>> @@ -1084,10 +1094,12 @@ void DebugInfoFinder::processSubprogram(
>> }
>>
>> /// processDeclare - Process DbgDeclareInst.
>> -void DebugInfoFinder::processDeclare(const DbgDeclareInst *DDI) {
>> +void DebugInfoFinder::processDeclare(const Module &M,
>> + const DbgDeclareInst *DDI) {
>> MDNode *N = dyn_cast<MDNode>(DDI->getVariable());
>> if (!N)
>> return;
>> + IntializeTypeMap(M);
>>
>> DIDescriptor DV(N);
>> if (!DV.isVariable())
>> @@ -1099,10 +1111,11 @@ void DebugInfoFinder::processDeclare(con
>> processType(DIVariable(N).getType());
>> }
>>
>> -void DebugInfoFinder::processValue(const DbgValueInst *DVI) {
>> +void DebugInfoFinder::processValue(const Module &M, const DbgValueInst
>> *DVI) {
>> MDNode *N = dyn_cast<MDNode>(DVI->getVariable());
>> if (!N)
>> return;
>> + IntializeTypeMap(M);
>>
>> DIDescriptor DV(N);
>> if (!DV.isVariable())
>>
>> Modified: llvm/trunk/lib/IR/Verifier.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Verifier.cpp?rev=194973&r1=194972&r2=194973&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/lib/IR/Verifier.cpp (original)
>> +++ llvm/trunk/lib/IR/Verifier.cpp Sun Nov 17 12:42:37 2013
>> @@ -2125,7 +2125,7 @@ void Verifier::visitInstruction(Instruct
>>
>> if (!DisableDebugInfoVerifier) {
>> MD = I.getMetadata(LLVMContext::MD_dbg);
>> - Finder.processLocation(DILocation(MD));
>> + Finder.processLocation(*Mod, DILocation(MD));
>> }
>>
>> InstsInThisBlock.insert(&I);
>> @@ -2303,13 +2303,13 @@ void Verifier::visitIntrinsicFunctionCal
>> Assert1(MD->getNumOperands() == 1,
>> "invalid llvm.dbg.declare intrinsic call 2", &CI);
>> if (!DisableDebugInfoVerifier)
>> - Finder.processDeclare(cast<DbgDeclareInst>(&CI));
>> + Finder.processDeclare(*Mod, cast<DbgDeclareInst>(&CI));
>> } break;
>> case Intrinsic::dbg_value: { //llvm.dbg.value
>> if (!DisableDebugInfoVerifier) {
>> Assert1(CI.getArgOperand(0) && isa<MDNode>(CI.getArgOperand(0)),
>> "invalid llvm.dbg.value intrinsic call 1", &CI);
>> - Finder.processValue(cast<DbgValueInst>(&CI));
>> + Finder.processValue(*Mod, cast<DbgValueInst>(&CI));
>> }
>> break;
>> }
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
>
> --
> Alexey Samsonov, MSK
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131118/1a36c0ed/attachment.html>
More information about the llvm-commits
mailing list