[clang] [clang] Fix assertion when substituting an incomplete template argument list into a member access qualified by a template parameter (PR #225088)

via cfe-commits cfe-commits at lists.llvm.org
Mon Sep 21 07:47:49 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Akash Manna (akash-manna-sky)

<details>
<summary>Changes</summary>

Fixes #<!-- -->204059

When a function template's return type contains a member access whose nested-name-specifier starts with a template type parameter, e.g. `decltype(t.U::template B<>::MEM)`, the parser records `U` as the first qualifier found in scope. During substitution, `TransformFirstQualifierInScope` fetched `U`'s template argument without checking that one exists. Two callers legitimately substitute with an incomplete list: explicit template argument substitution before deduction (`k<S>(S{})`), and partial deduction for code completion signature help (`k(`). The first hit an out-of-bounds index, the second a null argument, and both tripped an assertion.

Every other parameter handler in the instantiator checks `hasTemplateArgument` first and records the substitution as incomplete. This does the same here, leaving the qualifier dependent so the expression is rebuilt as a dependent member access. Signature help then shows the candidate with `U` unresolved, and the explicit call correctly reports that `U` could not be inferred.


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


4 Files Affected:

- (modified) clang/docs/ReleaseNotes.md (+6) 
- (modified) clang/lib/Sema/SemaTemplateInstantiate.cpp (+5) 
- (added) clang/test/CodeCompletion/GH204059.cpp (+10) 
- (modified) clang/test/SemaTemplate/dependent-names.cpp (+9) 


``````````diff
<html><body><h1>504 Gateway Time-out</h1>
The server didn't respond in time.
</body></html>

``````````

</details>


https://github.com/llvm/llvm-project/pull/225088


More information about the cfe-commits mailing list