[llvm-dev] Scope for DILocalVariables describing parameters?

Adrian Prantl via llvm-dev llvm-dev at lists.llvm.org
Fri Feb 8 09:00:47 PST 2019



> On Feb 8, 2019, at 4:14 AM, David Stenberg via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> Hi!
> 
> Is it valid to assume that the scope for a parameter-describing
> DILocalVariable always is a DISubprogram? Or do you know of any case
> where a parameter's scope can be a sub-scope of the DISubprogram?

I believe that for the Clang and Swift frontends that should always be true. A hypothetical language frontend for a language that supports functions with multiple entry points might be a counterexample, but I don't know of any.

> I added a check to the IR verifier and an assertion to
> DIBuilder::createParameterVariable() that verify this. This resulted in
> one test case, DebugInfo/X86/double-declare.ll, failing when running
> check-all:
> 
> parameter requires subprogram scope
> !7 = !DILocalVariable(name: "aRect", arg: 1, scope: !8, file: !1, line:
> 38, type: !11)
> !8 = distinct !DILexicalBlock(scope: !9, file: !1, line: 38)
> 
> However, if I rerun the clang command mentioned in the referenced PR
> (PR33157), the parameter's scope becomes the subprogram:
> 
> !68 = !DILocalVariable(name: "aRect", arg: 1, scope: !63, file: !5,
> line: 27, type: !66
> !63 = distinct !DISubprogram(name: "NSMaxX"
> 
> so I suspect that might simply be an artifact from bugpointing or
> manual reduction of the IR.

That, or older, buggy versions of clang.

-- adrian


More information about the llvm-dev mailing list