yronglin wrote:
Sorry for the very late update, I had some troubles in the past two months.
This update check the number of C++11 in-class-initializer in the class and
update `CXXRecordDecl::DefinitionData::HasInClassInitializer` when calling
`FieldDecl::hasInClassInitializer()`.
I think we might go futhur to create `RecoveryExpr` for invalid
in-class-initializer in `FieldDecl`, but this will interrupt the processing of
the rest class members. e.g. The "default member initializer for 'r' needed"
will missing because `FibTree *l` is invalid in the following:
```C++
namespace use_self {
struct FibTree {
int n;
FibTree *l = // expected-note {{declared here}}
n > 1 ? new FibTree{n-1} : &fib0; // expected-error {{default member
initializer for 'l' needed}}
FibTree *r = // expected-note {{declared here}}
n > 2 ? new FibTree{n-2} : &fib0; // expected-error {{default member
initializer for 'r' needed}}
int v = l->v + r->v;
static FibTree fib0;
};
FibTree FibTree::fib0{0, nullptr, nullptr, 1};
int fib(int n) { return FibTree{n}.v; }
}
```
The `hadError` flag will be true after filled in `FibTree *l`.
https://github.com/llvm/llvm-project/blob/fce917d39d97b8697e04fc52b1727307fc341212/clang/lib/Sema/SemaInit.cpp#L895-L912
https://github.com/llvm/llvm-project/pull/113049
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits