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
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to