microsoft / microsoft/DirectXShaderCompiler

Assertion `MaybeODRUseExprs.empty() && "Leftover expressions for odr-use checking"` in heavily templated code

Open
#7,001 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug crash
Dominant language
C++
Stars
3.7k
Forks
900
Avg merge
2d 11h
Merged PRs (30d)
44

Description

Description

We do some very simple metaprogramming consteval math for attributes

Steps to Reproduce

These sorts of bugs are a problem to reproduce on your official Godbolt as you don't have assertions/exception enabled builds:
https://godbolt.org/z/EnnPxqbfa

We have our own instance with a Debug build, but outside of a debugger you can't see the assertion being raised
our short links don't work yet

Actual Behavior

One assertion per compilation:

Error: assert(MaybeODRUseExprs.empty() && "Leftover expressions for odr-use checking")
File:
D:\work\Nabla\3rdparty\dxc\dxc\tools\clang\lib\Sema\SemaDecl.cpp(11119)
Func:    clang::Sema::ActOnFinishFunctionBody

Environment

  • DXC version: latest trunk as of Nov 04
  • Host Operating System: godbolt

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the assertion with the linked metaprogramming example using an assertion-enabled DXC build. Start in dxc/tools/clang/lib/Sema/SemaDecl.cpp at ActOnFinishFunctionBody around line 11119, then trace how the reproduced function body leaves expressions for ODR-use checking. Done means the example compiles without the assertion and the relevant compiler behavior is covered by a regression test.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.