teak-llvm/clang/test/SemaCXX/typo-correction-cxx11.cpp
Kaelyn Takata 26ffc5f7fb Fix a typo correction crash when resolving ambiguous corrections.
In certain cases, the tree transform would introduce new TypoExprs while
trying one of the corrections, invalidating the unique_ptr in the state
reference, and also causing a TypoExpr to exist that will never be
corrected since it doesn't exist in the final corrected expression. The
simple solution to both problems is to temporarily disable typo
correction while handling potentially ambiguous typo corrections.

llvm-svn: 240734
2015-06-25 23:47:39 +00:00

61 lines
1.5 KiB
C++

// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
namespace PR23186 {
decltype(ned); // expected-error-re {{use of undeclared identifier 'ned'{{$}}}}
// The code below was triggering an UNREACHABLE in ASTContext::getTypeInfoImpl
// once the above code failed to recover properly after making the bogus
// correction of 'ned' to 'new'.
template <typename>
struct S {
enum { V };
void f() {
switch (0)
case V:
;
}
};
}
namespace PR23140 {
auto lneed = gned.*[] {}; // expected-error-re {{use of undeclared identifier 'gned'{{$}}}}
void test(int aaa, int bbb, int thisvar) { // expected-note {{'thisvar' declared here}}
int thatval = aaa * (bbb + thatvar); // expected-error {{use of undeclared identifier 'thatvar'; did you mean 'thisvar'?}}
}
}
namespace PR18854 {
void f() {
for (auto&& x : e) { // expected-error-re {{use of undeclared identifier 'e'{{$}}}}
auto Functor = [x]() {};
long Alignment = __alignof__(Functor);
}
}
}
namespace NewTypoExprFromResolvingTypoAmbiguity {
struct A {
void Swap(A *other);
};
struct pair {
int first;
A *second;
};
struct map {
public:
void swap(map &x);
pair find(int x);
};
void run(A *annotations) {
map new_annotations;
auto &annotation = *annotations;
auto new_it = new_annotations.find(5);
auto &new_anotation = new_it.second; // expected-note {{'new_anotation' declared here}}
new_annotation->Swap(&annotation); // expected-error {{use of undeclared identifier 'new_annotation'; did you mean 'new_anotation'?}}
}
}