[PATCH] D156509: [clang][Interp] Diagnose unknown parameter values
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 28 07:40:58 PDT 2023
aaron.ballman added inline comments.
================
Comment at: clang/lib/AST/Interp/Interp.cpp:550-554
+ if (isa<ParmVarDecl>(D)) {
+ S.FFDiag(E, diag::note_constexpr_function_param_value_unknown) << D;
+ S.Note(D->getLocation(), diag::note_declared_at) << D->getSourceRange();
+ return false;
+ }
----------------
No need for this given all code paths return false.
However, what should we do for calls to this for something other than a `ParmVarDecl`? Should we issue a generic note so the constant expression fails but we get notified to the missing cases?
================
Comment at: clang/test/AST/Interp/functions.cpp:305-312
+ void param(bool b) { // ref-note {{declared here}} \
+ // expected-note {{declared here}}
+ static_assert(b); // ref-error {{not an integral constant expression}} \
+ // ref-note {{function parameter 'b' with unknown value}} \
+ // expected-error {{not an integral constant expression}} \
+ // expected-note {{function parameter 'b' with unknown value}}
+ static_assert(true ? true : b);
----------------
I'd like another test along the lines of:
```
consteval void param(bool b) {
static_assert(b); // Same error despite this being a consteval function where `b`'s value is always going to be known at compile time
}
```
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D156509/new/
https://reviews.llvm.org/D156509
More information about the cfe-commits
mailing list