aaron.ballman accepted this revision.
aaron.ballman added a comment.
This revision is now accepted and ready to land.

Aside from the request for a comment about `SourceLocation SL`, this LGTM 
(though we may want to improve the diagnostic behavior in the future).



================
Comment at: clang/test/AST/Interp/cxx20.cpp:119
+    A a;
+    constexpr C2() {} // expected-note {{subobject of type 'int' is not 
initialized}}
+  };
----------------
tbaeder wrote:
> aaron.ballman wrote:
> > This note is kind of confusing to me. At this location, it's not a 
> > subobject of type `int` that matters, it's `A` that's not fully 
> > initialized, and within `A` the note points out which field is not 
> > initialized.
> > 
> > I think this could get especially confusing in a case like:
> > ```
> > class C {
> > public:
> >   A a;
> >   int b = 0;
> > 
> >   constexpr C() {}
> > }
> > ```
> > because we'll talk about `int` not being initialized and it will look very 
> > much like it is.
> I thought this might even be an improvement over the current situation. It's 
> followed by the "subobject declared here" note as well. With the current 
> interpreter, the output is:
> 
> ```
> array.cpp:95:16: error: constexpr variable 'c2' must be initialized by a 
> constant expression
>   constexpr C2 c2; // expected-error {{must be initialized by a constant 
> expression}} \
>                ^~
> array.cpp:95:16: note: subobject of type 'int' is not initialized
> array.cpp:88:18: note: subobject declared here
>   struct A { int a; };
>                  ^
> ```
> 
> And with the new one:
> ```
> array.cpp:95:16: error: constexpr variable 'c2' must be initialized by a 
> constant expression
>   constexpr C2 c2; // expected-error {{must be initialized by a constant 
> expression}} \
>                ^~
> array.cpp:93:15: note: subobject of type 'int' is not initialized
>     constexpr C2() {} // expected-note {{subobject of type 'int' is not 
> initialized}}
>               ^
> array.cpp:95:16: note: in call to 'C2()'
>   constexpr C2 c2; // expected-error {{must be initialized by a constant 
> expression}} \
>                ^
> array.cpp:88:18: note: subobject declared here
>   struct A { int a; };
>                  ^
> ```
> 
> But I dislike both very much, no idea why there's no "subobject declared here 
> is not initialized" diagnostic and we need two notes instead :(
I think we can live with the behavior for now and improve the diagnostics once 
we've got more basic functionality in place.


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

https://reviews.llvm.org/D136828

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

Reply via email to