hazohelet added a comment.

I've noticed several shortcoming/limitations of this patch.

1. Function arguments: When we parse the arguments to a function call, the 
callee isn't still resolved, so we don't know whether it's consteval. If the 
callee is consteval, its argument is known to be constant-evaluated regardless 
of its surrounding evaluation context.

e.g.

  consteval int ce(int n){ return n;};
  int f() {
        int a = ce(__builtin_is_constant_evaluated()); // tautologically true
  }

2. init-statement of constexpr-if:

The condition is required to be a constant expression, but the init-stmt before 
it isn't.
e.g. Given `if constexpr (InitStmt; Cond) {}`, `InitStmt` is evaluated in the 
surrounding evaluation context.
If the init-statement is a declaration we can push initializer evaluation 
context like we do in other variables. However, if the init-statement is an 
expression, when clang parses the expression, clang doesn't know whether it is 
parsing the init-statement or the condition. 
https://github.com/llvm/llvm-project/blob/e3c57fdd8439ba82c67347629a3c66f293e1f3d0/clang/lib/Parse/ParseExprCXX.cpp#L2102

If we are to handle these cases with perfection, we need to defer warning 
emissions, but I'm skeptical about the value we obtain from this effort.

For the first problem, we can make `IsRuntimeEvaluated` false while parsing 
arguments to avoid emitting incorrect diagnostics although it makes false 
negatives on tautologically-false uses in arguments.
The second problem is difficult because we cannot avoid incorrect diagnostics 
in `InitStmt` expression of constexpr-if with a simple fix. But I think it's 
acceptable for the time being because it would be a pretty rare case to use 
`is_constant_evaluated` there.

@cor3ntin 
BTW, can I separate the initializer evaluation context bug fix part to make 
another PR? Another patch I'm working on locally also suffers from the 
evaluation context bug, and I want to land that part relatively soon.
Also, it might be nice to separate the NFC libc++ test modifications I recently 
uploaded because it's too much despite being NFC. Or we can turn off this 
tautology warning against macros. Do you think it's reasonable?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D155064/new/

https://reviews.llvm.org/D155064

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to