aaron.ballman added a comment.

In D111669#3088970 <https://reviews.llvm.org/D111669#3088970>, @rjmccall wrote:

> Hmm.  Generally these cases are expected to handle the situation where 
> there's no result slot passed in, which currently isn't exclusive to an 
> ignored result (although you could argue it should be).  IIRC we usually 
> don't pass in a slot when evaluating an expression of agg type as anything 
> except an initializer, e.g. when evaluating the `E` in `E.member`.  The 
> general fix is to call `EnsureDest` before accessing `Dest`.  The only reason 
> we wouldn't need to do that is if `ConstantExpr` is restricted in where it 
> can appear such that that's impossible.

Thank you for the suggestion to use `EnsureDest`, that worked like a charm.

> Skipping an unnecessary initialization does sound like a good optimization in 
> general, but that's on top of the bug fix, not an alternative.
>
> Separately, seeing this code makes me worried that it doesn't support the 
> full set of constant initialization.  We do have some kinds of constant 
> initialization that can't be emitted as abstract initializers, e.g. 
> address-diversified pointer auth.  But we can deal with that as a separate 
> patch.

FWIW, there are actually quite a few crashes during codegen involving consteval 
support (https://bugs.llvm.org/buglist.cgi?quicksearch=consteval&list_id=224889 
has quite a few of them), so I share your worries.


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

https://reviews.llvm.org/D111669

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

Reply via email to