Serosh-commits wrote:
> Yeah sorry but none of this makes sense to me. None of the ast nodes are
> marked has having errors, so adding those `containsErrors()` checks makes no
> difference. All those checks in the `Pointer` accessors make no sense since
> that state should never happen.
>
> ```c++
> constexpr const int *foo[][2];
> ```
>
> this declaration gets marked as invalid, so why not
>
> ```c++
> constexpr const int *foo[][2] = { {nullptr, int}, };
> ```
>
> ?
@tbaederr Sorry for the previous approach i realize now that adding checks in
the interpreter was just masking the issue
I've been thinking about it and realized that while ActOnUninitializedDecl
already marks constexpr variables as invalid,
ActOnInitializerError doesn't do the same when an initializer simply fails to
parse. I think this gap is why the interpreter s till tries to evaluate them
Am I correct that we should just add VD->isConstexpr() to
ActOnInitializerError to stay consistent, or is there a better way to handle
this in Sema?
if (VD->getType()->isUndeducedType() || VD->isConstexpr()) {
D->setInvalidDecl();
return;
}
https://github.com/llvm/llvm-project/pull/180261
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits