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

Reply via email to