Skip to content

Conversation

mizvekov
Copy link
Contributor

@mizvekov mizvekov commented Mar 10, 2025

Instead of manually adding a note pointing to the relevant template parameter to every relevant error, which is very easy to miss, this patch adds a new conde synthesis context note, so that this can work using RAII magic.

This fixes a bunch of places where these notes were missing, and is more future-proof.

Some diagnostics are reworked to make better use of this note:

  • Errors about missing template arguments now refer to the parameter which is missing an argument.
  • Template Template parameter mismatches now refer to template parameters as parameters instead of arguments.

It's likely this will add the note to some diagnostics where the parameter is not super relevant, but this can be reworked with time and the decrease in maintenance burden makes up for it.

This bypasses the templight dumper for the new context entry, as the tests are very hard to update.

This depends on #125453, which is needed to avoid losing the context note for errors occuring during template argument deduction.

Original PR: #126088

@mizvekov mizvekov self-assigned this Mar 10, 2025
@mizvekov
Copy link
Contributor Author

Keeping in draft form while I investigate the performance regression reported here: #126088 (comment)

cor3ntin added a commit that referenced this pull request Aug 4, 2025
…late parameters) (#150823)

This is a first pass at implementing
[P2841R7](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p2841r7.pdf).

The implementation is far from complete; however, I'm aiming to do that
in chunks, to make our lives easier.

In particular, this does not implement
 - Subsumption
 - Mangling
- Satisfaction checking is minimal as we should focus on #141776 first
(note that I'm currently very stuck)

FTM, release notes, status page, etc, will be updated once the feature
is more mature. Given the state of the feature, it is not yet allowed in
older language modes.

Of note: 
- Mismatches between template template arguments and template template
parameters are a bit wonky. This is addressed by #130603
- We use `UnresolvedLookupExpr` to model template-id. While this is
pre-existing, I have been wondering if we want to introduce a different
OverloadExpr subclass for that. I did not make the change in this patch.
@mizvekov mizvekov changed the base branch from main to users/mizvekov/fix-substnttp-transform September 26, 2025 03:02
@mizvekov mizvekov force-pushed the users/mizvekov/clang-check-template-parameter-eval-context branch from 32717ea to 59ec190 Compare September 26, 2025 03:02
@mizvekov mizvekov force-pushed the users/mizvekov/fix-substnttp-transform branch from 13649cf to 1160542 Compare September 26, 2025 19:19
Base automatically changed from users/mizvekov/fix-substnttp-transform to users/mizvekov/simplify-nttp-placeholder-deduction September 28, 2025 00:30
@mizvekov mizvekov force-pushed the users/mizvekov/simplify-nttp-placeholder-deduction branch from 40f248a to 30da2b4 Compare September 28, 2025 00:36
Base automatically changed from users/mizvekov/simplify-nttp-placeholder-deduction to main September 28, 2025 00:59
…rameters

Instead of manually adding a note pointing to the relevant template
parameter to every relevant error, which is very easy to miss,
this patch adds a new instantiation context note, so that this
can work using RAII magic.

This fixes a bunch of places where these notes were missing, and is
more future-proof.

Some diagnostics are reworked to make better use of this note:
- Errors about missing template arguments now refer to the parameter
  which is missing an argument.
- Template Template parameter mismatches now refer to template
  parameters as parameters instead of arguments.

It's likely this will add the note to some diagnostics where the
parameter is not super relevant, but this can be reworked with time
and the decrease in maintenance burden makes up for it.

This bypasses the templight dumper for the new context entry, as the
tests are very hard to update.

This depends on #125453, which is needed to avoid losing the context
note for errors occuring during template argument deduction.

Original PR: #126088
@mizvekov mizvekov force-pushed the users/mizvekov/clang-check-template-parameter-eval-context branch from 59ec190 to 0aa0cc7 Compare September 28, 2025 01:39
@mizvekov mizvekov changed the title Reland: [clang] Implement evaluation context for checking template parameters Reland: [clang] Implement code synthesis context for checking template parameters Sep 28, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant