microsoft / microsoft/DirectXShaderCompiler

Bad template resolution for operator overloads

Open
#7,325 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

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

Description

Here's a godbolt showcasing the problem: https://godbolt.org/z/1j1EPbfos

As you can see in it, the templated operator() fails to resolve correctly when I is Bar<SomeCondition> for the struct Foo<Bar<SomeCondition>>. It works if you provide an explicit, non-templated version where the argument is exactly Bar<SomeCondition>, as you can see by uncommenting the commented method. Also, the problem is explicitly with operators, as the method baz resolves just fine when I is Bar<SomeCondition>. This works as one would expect in CPP: https://godbolt.org/z/efrY14hW8

This issue affects both DXIL and SPIR-V targets

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

Start with the HLSL reproducer in the linked Godbolt example and compare it with the working C++ example. Reproduce the templated operator() failure for Foo<Bar> on both DXIL and SPIR-V targets, then verify that operator overload resolution matches the non-operator baz behavior.

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
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.