[PATCH] D81395: [AST][RecoveryExpr] Preserve the invalid "undef_var" initializer.
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 21 00:38:30 PDT 2020
This revision was automatically updated to reflect the committed changes.
Closed by commit rG7af852dcbff9: [AST][RecoveryExpr] Preserve the invalid "undef_var" initializer. (authored by hokein).
Changed prior to commit:
https://reviews.llvm.org/D81395?vs=271928&id=279436#toc
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D81395/new/
https://reviews.llvm.org/D81395
Files:
clang/lib/Sema/SemaDecl.cpp
clang/test/AST/ast-dump-recovery.cpp
clang/test/SemaCXX/typo-correction-delayed.cpp
Index: clang/test/SemaCXX/typo-correction-delayed.cpp
===================================================================
--- clang/test/SemaCXX/typo-correction-delayed.cpp
+++ clang/test/SemaCXX/typo-correction-delayed.cpp
@@ -149,7 +149,8 @@
}
namespace PR21905 {
-int (*a) () = (void)Z; // expected-error-re {{use of undeclared identifier 'Z'{{$}}}}
+int (*a)() = (void)Z; // expected-error-re {{use of undeclared identifier 'Z'{{$}}}} \
+ // expected-error {{cannot initialize a variable of type 'int (*)()' with an rvalue of type 'void'}}
}
namespace PR21947 {
Index: clang/test/AST/ast-dump-recovery.cpp
===================================================================
--- clang/test/AST/ast-dump-recovery.cpp
+++ clang/test/AST/ast-dump-recovery.cpp
@@ -24,8 +24,11 @@
// CHECK-NEXT: |-UnresolvedLookupExpr {{.*}} 'some_func'
// CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors
s = some_func(undef1);
- // CHECK: `-VarDecl {{.*}} invalid var 'int'
- // FIXME: preserve the broken call.
+
+ // CHECK: VarDecl {{.*}} var 'int'
+ // CHECK-NEXT: `-CallExpr {{.*}} '<dependent type>' contains-errors
+ // CHECK-NEXT: |-UnresolvedLookupExpr {{.*}} 'some_func'
+ // CHECK-NEXT: `-RecoveryExpr {{.*}} contains-errors
int var = some_func(undef1);
}
@@ -178,9 +181,15 @@
// CHECK-NEXT: `-UnresolvedLookupExpr {{.*}} 'invalid'
Bar b6 = Bar{invalid()};
- // CHECK: `-RecoveryExpr {{.*}} 'Bar' contains-errors
+ // CHECK: RecoveryExpr {{.*}} 'Bar' contains-errors
// CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1
Bar(1);
+
+ // CHECK: `-VarDecl {{.*}} var1
+ // CHECK-NEXT: `-BinaryOperator {{.*}} '<dependent type>' contains-errors
+ // CHECK-NEXT: |-RecoveryExpr {{.*}} '<dependent type>' contains-errors
+ // CHECK-NEXT: `-IntegerLiteral {{.*}} 'int' 1
+ int var1 = undef + 1;
}
void InitializerForAuto() {
// CHECK: `-VarDecl {{.*}} invalid a 'auto'
Index: clang/lib/Sema/SemaDecl.cpp
===================================================================
--- clang/lib/Sema/SemaDecl.cpp
+++ clang/lib/Sema/SemaDecl.cpp
@@ -12039,7 +12039,7 @@
// Try to correct any TypoExprs in the initialization arguments.
for (size_t Idx = 0; Idx < Args.size(); ++Idx) {
ExprResult Res = CorrectDelayedTyposInExpr(
- Args[Idx], VDecl, /*RecoverUncorrectedTypos=*/false,
+ Args[Idx], VDecl, /*RecoverUncorrectedTypos=*/true,
[this, Entity, Kind](Expr *E) {
InitializationSequence Init(*this, Entity, Kind, MultiExprArg(E));
return Init.Failed() ? ExprError() : E;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D81395.279436.patch
Type: text/x-patch
Size: 2633 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200721/f0f67483/attachment-0001.bin>
More information about the cfe-commits
mailing list