hokein created this revision.
hokein added a reviewer: sammccall.
Herald added a project: clang.
hokein requested review of this revision.
The dependent mechanism for C error-recovery is mostly finished,
this is the only place we have missed.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D89045
Files:
clang/lib/Sema/SemaExpr.cpp
clang/test/AST/ast-dump-recovery.c
Index: clang/test/AST/ast-dump-recovery.c
===================================================================
--- clang/test/AST/ast-dump-recovery.c
+++ clang/test/AST/ast-dump-recovery.c
@@ -24,14 +24,10 @@
int unary_address = &(a + 1);
// CHECK: VarDecl {{.*}} ternary 'int' cinit
-// CHECK-NEXT: `-RecoveryExpr {{.*}}
+// CHECK-NEXT: `-ConditionalOperator {{.*}}
// CHECK-NEXT: |-DeclRefExpr {{.*}} 'a'
-// CHECK-NEXT: |-TypoExpr {{.*}}
+// CHECK-NEXT: |-RecoveryExpr {{.*}}
// CHECK-NEXT: `-DeclRefExpr {{.*}} 'a'
-// FIXME: The TypoExpr should never be print, and should be downgraded to
-// RecoveryExpr -- typo correction is performed too early in C-only codepath,
-// which makes no correction when clang finishes the full expr
(Sema::Sema::ActOnFinishFullExpr).
-// this will be fixed when we support dependent mechanism and delayed typo
correction for C.
int ternary = a ? undef : a;
void test1() {
Index: clang/lib/Sema/SemaExpr.cpp
===================================================================
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -8558,7 +8558,7 @@
SourceLocation ColonLoc,
Expr *CondExpr, Expr *LHSExpr,
Expr *RHSExpr) {
- if (!getLangOpts().CPlusPlus) {
+ if (!Context.isDependenceAllowed()) {
// C cannot handle TypoExpr nodes in the condition because it
// doesn't handle dependent types properly, so make sure any TypoExprs have
// been dealt with before checking the operands.
Index: clang/test/AST/ast-dump-recovery.c
===================================================================
--- clang/test/AST/ast-dump-recovery.c
+++ clang/test/AST/ast-dump-recovery.c
@@ -24,14 +24,10 @@
int unary_address = &(a + 1);
// CHECK: VarDecl {{.*}} ternary 'int' cinit
-// CHECK-NEXT: `-RecoveryExpr {{.*}}
+// CHECK-NEXT: `-ConditionalOperator {{.*}}
// CHECK-NEXT: |-DeclRefExpr {{.*}} 'a'
-// CHECK-NEXT: |-TypoExpr {{.*}}
+// CHECK-NEXT: |-RecoveryExpr {{.*}}
// CHECK-NEXT: `-DeclRefExpr {{.*}} 'a'
-// FIXME: The TypoExpr should never be print, and should be downgraded to
-// RecoveryExpr -- typo correction is performed too early in C-only codepath,
-// which makes no correction when clang finishes the full expr (Sema::Sema::ActOnFinishFullExpr).
-// this will be fixed when we support dependent mechanism and delayed typo correction for C.
int ternary = a ? undef : a;
void test1() {
Index: clang/lib/Sema/SemaExpr.cpp
===================================================================
--- clang/lib/Sema/SemaExpr.cpp
+++ clang/lib/Sema/SemaExpr.cpp
@@ -8558,7 +8558,7 @@
SourceLocation ColonLoc,
Expr *CondExpr, Expr *LHSExpr,
Expr *RHSExpr) {
- if (!getLangOpts().CPlusPlus) {
+ if (!Context.isDependenceAllowed()) {
// C cannot handle TypoExpr nodes in the condition because it
// doesn't handle dependent types properly, so make sure any TypoExprs have
// been dealt with before checking the operands.
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits