hokein updated this revision to Diff 296611. hokein marked an inline comment as done. hokein added a comment.
rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D84387/new/ https://reviews.llvm.org/D84387 Files: clang/lib/Sema/SemaCast.cpp clang/test/AST/ast-dump-recovery.c clang/test/Sema/error-dependence.c Index: clang/test/Sema/error-dependence.c =================================================================== --- clang/test/Sema/error-dependence.c +++ clang/test/Sema/error-dependence.c @@ -6,6 +6,10 @@ // verify "assigning to 'int' from incompatible type '<dependent type>'" is // not emitted. s = call(); // expected-error {{too few arguments to function call}} + + // verify diagnostic "operand of type '<dependent type>' where arithmetic or + // pointer type is required" is not emitted. + (float)call(); // expected-error {{too few arguments to function call}} } void test2(int* ptr, float f) { Index: clang/test/AST/ast-dump-recovery.c =================================================================== --- clang/test/AST/ast-dump-recovery.c +++ clang/test/AST/ast-dump-recovery.c @@ -81,4 +81,9 @@ // CHECK-NEXT: |-DeclRefExpr {{.*}} 'int *' lvalue // CHECK-NEXT: `-DeclRefExpr {{.*}} 'float' lvalue (ptr > f ? ptr : f); + + // CHECK: CStyleCastExpr {{.*}} 'float' contains-errors <Dependent> + // CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>' + // CHECK-NEXT: `-DeclRefExpr {{.*}} 'some_func' + (float)some_func(); } Index: clang/lib/Sema/SemaCast.cpp =================================================================== --- clang/lib/Sema/SemaCast.cpp +++ clang/lib/Sema/SemaCast.cpp @@ -2707,6 +2707,17 @@ return; } + // If the type is dependent, we won't do any other semantic analysis now. + if (Self.getASTContext().isDependenceAllowed() && + (DestType->isDependentType() || SrcExpr.get()->isTypeDependent() || + SrcExpr.get()->isValueDependent())) { + assert((DestType->containsErrors() || SrcExpr.get()->containsErrors() || + SrcExpr.get()->containsErrors()) && + "should only occur in error-recovery path."); + assert(Kind == CK_Dependent); + return; + } + // Overloads are allowed with C extensions, so we need to support them. if (SrcExpr.get()->getType() == Self.Context.OverloadTy) { DeclAccessPair DAP;
Index: clang/test/Sema/error-dependence.c =================================================================== --- clang/test/Sema/error-dependence.c +++ clang/test/Sema/error-dependence.c @@ -6,6 +6,10 @@ // verify "assigning to 'int' from incompatible type '<dependent type>'" is // not emitted. s = call(); // expected-error {{too few arguments to function call}} + + // verify diagnostic "operand of type '<dependent type>' where arithmetic or + // pointer type is required" is not emitted. + (float)call(); // expected-error {{too few arguments to function call}} } void test2(int* ptr, float f) { Index: clang/test/AST/ast-dump-recovery.c =================================================================== --- clang/test/AST/ast-dump-recovery.c +++ clang/test/AST/ast-dump-recovery.c @@ -81,4 +81,9 @@ // CHECK-NEXT: |-DeclRefExpr {{.*}} 'int *' lvalue // CHECK-NEXT: `-DeclRefExpr {{.*}} 'float' lvalue (ptr > f ? ptr : f); + + // CHECK: CStyleCastExpr {{.*}} 'float' contains-errors <Dependent> + // CHECK-NEXT: `-RecoveryExpr {{.*}} '<dependent type>' + // CHECK-NEXT: `-DeclRefExpr {{.*}} 'some_func' + (float)some_func(); } Index: clang/lib/Sema/SemaCast.cpp =================================================================== --- clang/lib/Sema/SemaCast.cpp +++ clang/lib/Sema/SemaCast.cpp @@ -2707,6 +2707,17 @@ return; } + // If the type is dependent, we won't do any other semantic analysis now. + if (Self.getASTContext().isDependenceAllowed() && + (DestType->isDependentType() || SrcExpr.get()->isTypeDependent() || + SrcExpr.get()->isValueDependent())) { + assert((DestType->containsErrors() || SrcExpr.get()->containsErrors() || + SrcExpr.get()->containsErrors()) && + "should only occur in error-recovery path."); + assert(Kind == CK_Dependent); + return; + } + // Overloads are allowed with C extensions, so we need to support them. if (SrcExpr.get()->getType() == Self.Context.OverloadTy) { DeclAccessPair DAP;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits