summaryrefslogtreecommitdiff
path: root/test/SemaCXX/typo-correction-cxx11.cpp
blob: 8c588203cc1283b73059f02d5d4459a48b30554e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// 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'?}}
}
}