hokein added a comment.

Thanks for tracking it down, and sorry for the delay.

I thought the crash was fix in https://reviews.llvm.org/D99145. Thinking more 
about it, this is a recovery-expr crash, see my comment below.



================
Comment at: clang/lib/Sema/SemaChecking.cpp:4543
   // getTypeAlignInChars requires complete types
-  if (ParamTy->isIncompleteType() || ArgTy->isIncompleteType() ||
-      ParamTy->isUndeducedType() || ArgTy->isUndeducedType())
+  auto CheckTypeOK = [](QualType Ty) {
+    if (Ty->isIncompleteType() || Ty->isUndeducedType())
----------------
The current fix is on top of kadir's fix, now the code becomes more add-hoc, it 
looks like a smell to me.


It looks like `CheckArgAlignment` has an implicit invariant (the arg type 
should never be undeduced), and this invariant was enforced by dropping the 
invalid AST. Now with `RecoveryExpr`, we might break the invariant -- when the 
RecoveryExpr preserves an `undeduced` type, like the test case in this patch 
(which is done via the 
[code](https://github.com/llvm/llvm-project/blob/main/clang/lib/Sema/SemaExprCXX.cpp#L1420)).


I think a right fix is to fix in the `RecoveryExpr` side, `RecoveryExpr` should 
not preserve an undeduced type, we did it for function return type already 
(https://reviews.llvm.org/D87350), but it didn't cover all places. I think a 
general fixing place is `Sema::CreateRecoveryExpr`, if the passing `T` is 
undeduced, fallback to dependent type.



Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D100667

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

Reply via email to