[llvm] r204790 - Fix PR19239 - Add support for generating debug info for functions without lexical scopes and/or debug info at all
Eric Christopher
echristo at gmail.com
Mon Apr 14 09:11:50 PDT 2014
Could you track down where this is happening then?
Why don't we think we have a lexical scope here?
-eric
On Fri, Apr 4, 2014 at 6:20 AM, Timur Iskhodzhanov <timurrrr at google.com> wrote:
> Index: lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp (revision 205623)
> +++ lib/CodeGen/AsmPrinter/DwarfDebug.cpp (working copy)
> @@ -1361,6 +1361,8 @@
> Flags |= DWARF2_FLAG_IS_STMT;
>
> if (!DL.isUnknown()) {
> + // At this point we seem to know the line/column info, right?
> + assert(!LScopes.empty());
> const MDNode *Scope =
> DL.getScope(Asm->MF->getFunction()->getContext());
> recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
> } else
> //////////////////////
> Failing Tests (4):
> LLVM :: DebugInfo/X86/DW_AT_specification.ll
> LLVM :: DebugInfo/X86/dbg-value-terminator.ll
> LLVM :: DebugInfo/X86/elf-names.ll
> LLVM :: DebugInfo/X86/pr12831.ll
>
> 2014-04-01 21:03 GMT+04:00 Eric Christopher <echristo at gmail.com>:
>> On Tue, Apr 1, 2014 at 10:02 AM, Eric Christopher <echristo at gmail.com> wrote:
>>> On Tue, Apr 1, 2014 at 3:07 AM, Timur Iskhodzhanov <timurrrr at google.com> wrote:
>>>> 2014-04-01 4:12 GMT+04:00 Eric Christopher <echristo at gmail.com>:
>>>>>> - // Grab the lexical scopes for the function, if we don't have any of those
>>>>>> - // then we're not going to be able to do anything.
>>>>>> - LScopes.initialize(*MF);
>>>>>> - if (LScopes.empty())
>>>>>> - return;
>>>>>> -
>>>>>> const Function *GV = MF->getFunction();
>>>>>> assert(FnDebugInfo.count(GV) == false);
>>>>>> VisitedFunctions.push_back(GV);
>>>>>> @@ -311,13 +308,12 @@ void WinCodeViewLineTables::endFunction(
>>>>>> if (!Asm || !CurFn) // We haven't created any debug info for this function.
>>>>>> return;
>>>>>>
>>>>>> - if (CurFn->Instrs.empty())
>>>>>> - llvm_unreachable("Can this ever happen?");
>>>>>> -
>>>>>> - // Define end label for subprogram.
>>>>>> - MCSymbol *FunctionEndSym = Asm->OutStreamer.getContext().CreateTempSymbol();
>>>>>> - Asm->OutStreamer.EmitLabel(FunctionEndSym);
>>>>>> - CurFn->End = FunctionEndSym;
>>>>>> + if (!CurFn->Instrs.empty()) {
>>>>>> + // Define end label for subprogram.
>>>>>> + MCSymbol *FunctionEndSym = Asm->OutStreamer.getContext().CreateTempSymbol();
>>>>>> + Asm->OutStreamer.EmitLabel(FunctionEndSym);
>>>>>> + CurFn->End = FunctionEndSym;
>>>>>> + }
>>>>>> CurFn = 0;
>>>>>> }
>>>>>
>>>>> This part doesn't really make sense. You're saying that without any
>>>>> scope we can still generate a line table entry for this?
>>>>
>>>> Yes - I think we can get some minimal required information even if
>>>> there's no lexical scope.
>>>>
>>>>> What's the information contained within and how did it get line information on there?
>>>>> I might be missing something though.
>>>>
>>>> The MI's seem to have DebugLoc available, the IR instructions seem to
>>>> have some minimal debug metadata too.
>>>
>>> Then there should be a lexical scope, can you show where it's not?
>>>
>>
>> In other words, if there's debug information in the IR, but no lexical
>> scopes then that's a bug in the lexical scope code :)
>>
>> -eric
>>
>>> -eric
>>>
>>>>
>>>>> I'm not sure what kind of code this is supposed to be catching (and I looked at the testcases :)
>>>>
>>>> One of the other problems is that we discuss this on a number of
>>>> commits and some stuff and comments already got fixed, improved, etc.
>>>>
>>>> Please see the attached patch that contains all the changes I did and
>>>> tests for them.
More information about the llvm-commits
mailing list