Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[KeyInstr] Fix verifier check#149043

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
OCHyams merged 5 commits intollvm:mainfromOCHyams:ki-verifier-fix
Jul 16, 2025
Merged

Conversation

OCHyams
Copy link
Contributor

The verifier check was in the wrong place, meaning it wasn't actually checking many instructions.

Fixing that causes a test failure (coro-dwarf-key-instrs.cpp) because coros turn off the feature but still annotate instructions with the metadata (which is a supported situation, but the verifier doesn't like it, and it's hard to teach the verifier to like it).

Fix that by avoiding emitting any key instruction metadata if the DISubprogram has opted out of key instructions.

@llvmbotllvmbot added clangClang issues not falling into any other category clang:codegenIR generation bugs: mangling, exceptions, etc. debuginfo llvm:ir labelsJul 16, 2025
@llvmbot
Copy link
Member

llvmbot commentedJul 16, 2025
edited
Loading

@llvm/pr-subscribers-llvm-ir
@llvm/pr-subscribers-debuginfo

@llvm/pr-subscribers-clang

Author: Orlando Cazalet-Hyams (OCHyams)

Changes

The verifier check was in the wrong place, meaning it wasn't actually checking many instructions.

Fixing that causes a test failure (coro-dwarf-key-instrs.cpp) because coros turn off the feature but still annotate instructions with the metadata (which is a supported situation, but the verifier doesn't like it, and it's hard to teach the verifier to like it).

Fix that by avoiding emitting any key instruction metadata if the DISubprogram has opted out of key instructions.


Full diff:https://github.com/llvm/llvm-project/pull/149043.diff

2 Files Affected:

  • (modified) clang/lib/CodeGen/CGDebugInfo.cpp (+4)
  • (modified) llvm/lib/IR/Verifier.cpp (+7-6)
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cppindex f97c7b6445984..0dde045453e3a 100644--- a/clang/lib/CodeGen/CGDebugInfo.cpp+++ b/clang/lib/CodeGen/CGDebugInfo.cpp@@ -170,6 +170,10 @@ void CGDebugInfo::addInstToSpecificSourceAtom(llvm::Instruction *KeyInstruction,   if (!Group || !CGM.getCodeGenOpts().DebugKeyInstructions)     return;+  llvm::DISubprogram *SP = KeyInstruction->getFunction()->getSubprogram();+  if (!SP || !SP->getKeyInstructionsEnabled())+    return;+   addInstSourceAtomMetadata(KeyInstruction, Group, /*Rank=*/1);    llvm::Instruction *BackupI =diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cppindex 8004077b92665..ccaa8ccba085d 100644--- a/llvm/lib/IR/Verifier.cpp+++ b/llvm/lib/IR/Verifier.cpp@@ -3185,12 +3185,6 @@ void Verifier::visitFunction(const Function &F) {     CheckDI(SP->describes(&F),             "!dbg attachment points at wrong subprogram for function", N, &F,             &I, DL, Scope, SP);--    if (DL->getAtomGroup())-      CheckDI(DL->getScope()->getSubprogram()->getKeyInstructionsEnabled(),-              "DbgLoc uses atomGroup but DISubprogram doesn't have Key "-              "Instructions enabled",-              DL, DL->getScope()->getSubprogram());   };   for (auto &BB : F)     for (auto &I : BB) {@@ -5492,6 +5486,13 @@ void Verifier::visitInstruction(Instruction &I) {   if (MDNode *N = I.getDebugLoc().getAsMDNode()) {     CheckDI(isa<DILocation>(N), "invalid !dbg metadata attachment", &I, N);     visitMDNode(*N, AreDebugLocsAllowed::Yes);++    auto *DL = cast<DILocation>(N);+    if (DL->getAtomGroup())+      CheckDI(DL->getScope()->getSubprogram()->getKeyInstructionsEnabled(),+              "DbgLoc uses atomGroup but DISubprogram doesn't have Key "+              "Instructions enabled",+              DL, DL->getScope()->getSubprogram());   }    if (auto *DII = dyn_cast<DbgVariableIntrinsic>(&I)) {

Copy link
Member

@jmorsejmorse left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Given that we've found a verifier error that necessitates this patch, it presumably wants a test.

@SLTozer
Copy link
Contributor

So just to makes sure my understanding is correct: we have an existing bug and an existing test which should exercise that bug, but the verifier doesn't catch it currently. This patch then fixes both the verifier and the bug, and therefore a new test isn't needed for the non-verifier change because the coverage for the non-verifier change already exists incoro-dwarf-key-instrs.cpp - is that about right? And agreeing with the above, this should include a small test that the verifier check works.

@OCHyams
Copy link
ContributorAuthor

So, to be clear:

  • Verifier check was checking very few instructions per function
  • Fixing the check causes coro-dwarf-key-instrs.cpp to fail
  • Fixing the problem stops coro-dwarf-key-instrs.cpp failing

I suppose I could add a check for the verifier condition independently of coro-dwarf-key-instrs.cpp ... coming right up

Copy link
Contributor

@SLTozerSLTozer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

LGTM with some inline nits.

Comment on lines 5491 to 5495
if (DL->getAtomGroup())
CheckDI(DL->getScope()->getSubprogram()->getKeyInstructionsEnabled(),
"DbgLoc uses atomGroup but DISubprogram doesn't have Key"
"Instructions enabled",
DL, DL->getScope()->getSubprogram());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Nit, braces.

OCHyams reacted with thumbs up emoji
@@ -7,6 +7,8 @@

define dso_local void @f() !dbg !10 {
entry:
; include non-key location to check verifier is checking the whole function.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Suggested change
;include non-key location to check verifier is checking the whole function.
;Include non-key location to check verifier is checking the whole function.

OCHyams reacted with thumbs up emoji
@OCHyamsOCHyams merged commit653872f intollvm:mainJul 16, 2025
7 of 9 checks passed
@OCHyamsOCHyams added this to theLLVM 21.x Release milestoneJul 16, 2025
@OCHyams
Copy link
ContributorAuthor

/cherry-pick653872f

@llvmbot
Copy link
Member

/pull-request#149053

@llvmbotllvmbot moved this fromNeeds Triage toDone inLLVM Release StatusJul 16, 2025
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@jmorsejmorsejmorse left review comments

@SLTozerSLTozerSLTozer approved these changes

@gregbedwellgregbedwellAwaiting requested review from gregbedwell

Assignees
No one assigned
Labels
clang:codegenIR generation bugs: mangling, exceptions, etc.clangClang issues not falling into any other categorydebuginfollvm:ir
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

4 participants
@OCHyams@llvmbot@SLTozer@jmorse

[8]ページ先頭

©2009-2025 Movatter.jp