tahonermann wrote:

> The removal of the null check on `Init` in the code snippet leads to a 
> segmentation fault when `Init` is null because it attempts to access a member 
> function on a null pointer. The test case 
> `test/SemaCXX/paren-list-agg-init.cpp` below expects compiler diagnostics for 
> improper array initialization, not a crash. Therefore, the null check is 
> necessary to prevent dereferencing a null pointer and to ensure the code 
> handles cases where the initializer is absent.
> 
> ```
> int arr6[n](1, 2, 3); // expected-warning {{variable length arrays in C++ are 
> a Clang extension}} \
>                            expected-note {{function parameter 'n' with 
> unknown value cannot be used in a constant expression}} \
>                            expected-error {{variable-sized object may not be 
> initialized}}
> ```

Thanks, @smanna12. That is interesting as it implies that the call to 
`InitializationSequence::Perform()` did indeed return a result that was valid 
but null. Would you be able to debug to find out where that null result is 
coming from? Perhaps here:
```
clang/lib/Sema/SemaInit.cpp:
 7486 ExprResult InitializationSequence::Perform(Sema &S,
 7487                                            const InitializedEntity 
&Entity,
 7488                                            const InitializationKind &Kind,
 7489                                            MultiExprArg Args,
 7490                                            QualType *ResultType) {
 ....
 7573   // No steps means no initialization.
 7574   if (Steps.empty())
 7575     return ExprResult((Expr *)nullptr);
 ....
 8474 }
```

https://github.com/llvm/llvm-project/pull/94368
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to