[ISSUE] https://github.com/llvm/llvm-project/issues/59718
struct x y; int main(void) { (void)(1 ? y : y); } struct x {int i;};
The conditional operator(?:) requires the second and third operands to be of compatible types. To be compatible, they also need to be complete (however, both can be void). Therefore, the expected response from clang after running the above code as a C program should be error dialogue pointing out that both the types are incomplete hence incompatible, but the code compiled without any errors.
The patch ensures the completeness in the CheckCondtionalOperand function present in llvm-project/clang/lib/Sema/SemaChecking.cpp
You might as well use RequireCompleteExprType(E, diag::err_incomplete_type) as it's slightly simpler but does the same thing.