[clang] fix error recovery ICE on copy elision when returing invalid variable
authorMatheus Izvekov <mizvekov@gmail.com>
Thu, 2 Sep 2021 20:21:51 +0000 (22:21 +0200)
committerMatheus Izvekov <mizvekov@gmail.com>
Fri, 3 Sep 2021 18:34:08 +0000 (20:34 +0200)
commitd98c34f4d7950f531661ba3f498222ccf6239a0f
tree427afe5a172049ea62baf005b7ea1012a16fab02
parentd0c064715c6c94567d2380b1425821695c3a64ed
[clang] fix error recovery ICE on copy elision when returing invalid variable

See PR51708.

Attempting copy elision in dependent contexts with invalid variable,
such as a variable with incomplete type, would cause a crash when attempting
to calculate it's alignment.

The fix is to just skip this optimization on invalid VarDecl, as otherwise this
provides no benefit to error recovery: This functionality does not try to
diagnose anything, it only calculates a flag which will affect where the
variable will be allocated during codegen.

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Reviewed By: rtrieu

Differential Revision: https://reviews.llvm.org/D109191
clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
clang/test/CXX/class/class.init/class.copy.elision/p3.cpp