Index: lib/Sema/SemaExprCXX.cpp =================================================================== --- lib/Sema/SemaExprCXX.cpp +++ lib/Sema/SemaExprCXX.cpp @@ -7779,8 +7779,8 @@ // 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(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: test/Sema/typo-correction-ambiguity.c =================================================================== --- /dev/null +++ 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'}} +}