[clang] Fix typos in member initializers

This was regressed in ca61961380. As we
attached InitExprs as-is to the AST, without performing transformations.

Differential Revision: https://reviews.llvm.org/D142187
This commit is contained in:
Kadir Cetinkaya
2023-01-20 09:43:48 +01:00
parent 269cfd3156
commit ebd9a2477e
2 changed files with 14 additions and 6 deletions

View File

@@ -4098,9 +4098,11 @@ void Sema::ActOnFinishCXXInClassMemberInitializer(Decl *D,
return;
}
ExprResult Init = InitExpr;
if (!FD->getType()->isDependentType() && !InitExpr->isTypeDependent()) {
Init = ConvertMemberDefaultInitExpression(FD, InitExpr, InitLoc);
ExprResult Init = CorrectDelayedTyposInExpr(InitExpr, /*InitDecl=*/nullptr,
/*RecoverUncorrectedTypos=*/true);
assert(Init.isUsable() && "Init should at least have a RecoveryExpr");
if (!FD->getType()->isDependentType() && !Init.get()->isTypeDependent()) {
Init = ConvertMemberDefaultInitExpression(FD, Init.get(), InitLoc);
// C++11 [class.base.init]p7:
// The initialization of each base and member constitutes a
// full-expression.
@@ -4112,9 +4114,7 @@ void Sema::ActOnFinishCXXInClassMemberInitializer(Decl *D,
}
}
InitExpr = Init.get();
FD->setInClassInitializer(InitExpr);
FD->setInClassInitializer(Init.get());
}
/// Find the direct and/or virtual base specifiers that

8
clang/test/PCH/typo3.cpp Normal file
View File

@@ -0,0 +1,8 @@
// RUN: not %clang_cc1 -emit-pch %s -o %t.pch 2>&1 | FileCheck %s
struct S {
// Make sure TypoExprs in default init exprs are corrected before serializing
// in PCH.
int y = bar;
// CHECK: use of undeclared identifier 'bar'
};