[Clang] Workaround dependent source location issues (#106925)
commit82a11e46ce87ea570358e4c25ee445929402a490
authorcor3ntin <corentinjabot@gmail.com>
Wed, 4 Sep 2024 08:02:55 +0000 (4 10:02 +0200)
committerTobias Hieta <tobias@hieta.se>
Tue, 10 Sep 2024 06:20:29 +0000 (10 08:20 +0200)
treeedbe3a7af59eedcc170e55140a5f7d8ef782ab91
parente657e0256509f6f665917904078a5389684fc716
[Clang] Workaround dependent source location issues (#106925)

In #78436 we made some SourceLocExpr dependent to
deal with the fact that their value should reflect the name of
specialized function - rather than the rtemplate in which they are first
used.

However SourceLocExpr are unusual in two ways
 - They don't depend on template arguments
- They morally depend on the context in which they are used (rather than
called from).

It's fair to say that this is quite novels and confuses clang. In
particular, in some cases, we used to create dependent SourceLocExpr and
never subsequently transform them, leaving dependent objects in
instantiated functions types. To work around that we avoid replacing
SourceLocExpr when we think they could remain dependent.
It's certainly not perfect but it fixes a number of reported bugs, and
seem to only affect scenarios in which the value of the SourceLocExpr
does not matter (overload resolution).

Fixes #106428
Fixes #81155
Fixes #80210
Fixes #85373

---------

Co-authored-by: Aaron Ballman <aaron@aaronballman.com>
clang/docs/ReleaseNotes.rst
clang/lib/Sema/SemaExpr.cpp
clang/test/SemaCXX/source_location.cpp