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=279039#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;
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;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits