This revision was not accepted when it landed; it landed in state "Needs Review". This revision was automatically updated to reflect the committed changes. Closed by commit rG7a2b704bf0cf: [Sema][Typo Correction] Fix another infinite loop on ambiguity (authored by dgoldman).
Changed prior to commit: https://reviews.llvm.org/D69060?vs=225272&id=226455#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D69060/new/ https://reviews.llvm.org/D69060 Files: clang/lib/Sema/SemaExprCXX.cpp clang/test/Sema/typo-correction-ambiguity.c Index: clang/test/Sema/typo-correction-ambiguity.c =================================================================== --- /dev/null +++ clang/test/Sema/typo-correction-ambiguity.c @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +// Check the following typo correction behavior in C: +// - no typos are diagnosed when a call expression has ambiguous (multiple) corrections + +int v_63; + +void v_2_0(int v_452, int v_454) {} + +int v_3_0() { + for (int v_345 = 0 ; v_63;) + v_2_0(v_195, // expected-error {{use of undeclared identifier 'v_195'}} + v_231); // expected-error {{use of undeclared identifier 'v_231'}} +} Index: clang/lib/Sema/SemaExprCXX.cpp =================================================================== --- clang/lib/Sema/SemaExprCXX.cpp +++ clang/lib/Sema/SemaExprCXX.cpp @@ -7780,8 +7780,9 @@ // If we found a valid result, double check to make sure it's not ambiguous. if (!IsAmbiguous && !Res.isInvalid() && !AmbiguousTypoExprs.empty()) { - auto SavedTransformCache = std::move(TransformCache); - TransformCache.clear(); + auto SavedTransformCache = + llvm::SmallDenseMap<TypoExpr *, ExprResult, 2>(TransformCache); + // Ensure none of the TypoExprs have multiple typo correction candidates // with the same edit length that pass all the checks and filters. while (!AmbiguousTypoExprs.empty()) {
Index: clang/test/Sema/typo-correction-ambiguity.c =================================================================== --- /dev/null +++ clang/test/Sema/typo-correction-ambiguity.c @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s + +// Check the following typo correction behavior in C: +// - no typos are diagnosed when a call expression has ambiguous (multiple) corrections + +int v_63; + +void v_2_0(int v_452, int v_454) {} + +int v_3_0() { + for (int v_345 = 0 ; v_63;) + v_2_0(v_195, // expected-error {{use of undeclared identifier 'v_195'}} + v_231); // expected-error {{use of undeclared identifier 'v_231'}} +} Index: clang/lib/Sema/SemaExprCXX.cpp =================================================================== --- clang/lib/Sema/SemaExprCXX.cpp +++ clang/lib/Sema/SemaExprCXX.cpp @@ -7780,8 +7780,9 @@ // If we found a valid result, double check to make sure it's not ambiguous. if (!IsAmbiguous && !Res.isInvalid() && !AmbiguousTypoExprs.empty()) { - auto SavedTransformCache = std::move(TransformCache); - TransformCache.clear(); + auto SavedTransformCache = + llvm::SmallDenseMap<TypoExpr *, ExprResult, 2>(TransformCache); + // Ensure none of the TypoExprs have multiple typo correction candidates // with the same edit length that pass all the checks and filters. while (!AmbiguousTypoExprs.empty()) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits