typo-correction-pt2.cpp revision b5c7768a74936d4e2c7a484570a638cb74702d8b
1// RUN: %clang_cc1 -fsyntax-only -verify -Wno-c++11-extensions %s 2// 3// FIXME: This file is overflow from test/SemaCXX/typo-correction.cpp due to a 4// hard-coded limit of 20 different typo corrections Sema::CorrectTypo will 5// attempt within a single file (which is to avoid having very broken files take 6// minutes to finally be rejected by the parser). 7 8namespace bogus_keyword_suggestion { 9void test() { 10 status = "OK"; // expected-error-re {{use of undeclared identifier 'status'$}} 11 return status; // expected-error-re {{use of undeclared identifier 'status'$}} 12 } 13} 14 15namespace PR13387 { 16struct A { 17 void CreateFoo(float, float); 18 void CreateBar(float, float); 19}; 20struct B : A { 21 using A::CreateFoo; 22 void CreateFoo(int, int); 23}; 24void f(B &x) { 25 x.Createfoo(0,0); // expected-error {{no member named 'Createfoo' in 'PR13387::B'; did you mean 'CreateFoo'?}} 26} 27} 28 29struct DataStruct {void foo();}; 30struct T { 31 DataStruct data_struct; 32 void f(); 33}; 34// should be void T::f(); 35void f() { 36 data_struct->foo(); // expected-error-re{{use of undeclared identifier 'data_struct'$}} 37} 38 39namespace PR12287 { 40class zif { 41 void nab(int); 42}; 43void nab(); // expected-note{{'::PR12287::nab' declared here}} 44void zif::nab(int) { 45 nab(); // expected-error{{too few arguments to function call, expected 1, have 0; did you mean '::PR12287::nab'?}} 46} 47} 48 49namespace TemplateFunction { 50template <class T> 51void A(T) { } // expected-note {{'::TemplateFunction::A' declared here}} 52 53template <class T> 54void B(T) { } // expected-note {{'::TemplateFunction::B' declared here}} 55 56class Foo { 57 public: 58 void A(int, int) {} 59 void B() {} 60}; 61 62void test(Foo F, int num) { 63 F.A(num); // expected-error {{too few arguments to function call, expected 2, have 1; did you mean '::TemplateFunction::A'?}} 64 F.B(num); // expected-error {{too many arguments to function call, expected 0, have 1; did you mean '::TemplateFunction::B'?}} 65} 66} 67namespace using_suggestion_val_dropped_specifier { 68void FFF() {} // expected-note {{'::using_suggestion_val_dropped_specifier::FFF' declared here}} 69namespace N { } 70using N::FFF; // expected-error {{no member named 'FFF' in namespace 'using_suggestion_val_dropped_specifier::N'; did you mean '::using_suggestion_val_dropped_specifier::FFF'?}} 71} 72 73namespace class_member_typo_corrections { 74class Outer { 75public: 76 class Inner {}; // expected-note {{'Outer::Inner' declared here}} 77 Inner MyMethod(Inner arg); 78}; 79 80Inner Outer::MyMethod(Inner arg) { // expected-error {{unknown type name 'Inner'; did you mean 'Outer::Inner'?}} 81 return Inner(); 82} 83 84class Result { 85public: 86 enum ResultType { 87 ENTITY, // expected-note {{'Result::ENTITY' declared here}} 88 PREDICATE, // expected-note {{'Result::PREDICATE' declared here}} 89 LITERAL // expected-note {{'Result::LITERAL' declared here}} 90 }; 91 92 ResultType type(); 93}; 94 95void test() { 96 Result result_cell; 97 switch (result_cell.type()) { 98 case ENTITY: // expected-error {{use of undeclared identifier 'ENTITY'; did you mean 'Result::ENTITY'?}} 99 case LITERAL: // expected-error {{use of undeclared identifier 'LITERAL'; did you mean 'Result::LITERAL'?}} 100 case PREDICAT: // expected-error {{use of undeclared identifier 'PREDICAT'; did you mean 'Result::PREDICATE'?}} 101 break; 102 } 103} 104 105class Figure { 106 enum ResultType { 107 SQUARE, 108 TRIANGLE, 109 CIRCLE 110 }; 111 112public: 113 ResultType type(); 114}; 115 116void testAccess() { 117 Figure obj; 118 switch (obj.type()) { // expected-warning {{enumeration values 'SQUARE', 'TRIANGLE', and 'CIRCLE' not handled in switch}} 119 case SQUARE: // expected-error-re {{use of undeclared identifier 'SQUARE'$}} 120 case TRIANGLE: // expected-error-re {{use of undeclared identifier 'TRIANGLE'$}} 121 case CIRCE: // expected-error-re {{use of undeclared identifier 'CIRCE'$}} 122 break; 123 } 124} 125} 126 127long readline(const char *, char *, unsigned long); 128void assign_to_unknown_var() { 129 deadline_ = 1; // expected-error-re {{use of undeclared identifier 'deadline_'$}} 130} 131 132namespace no_ns_before_dot { 133namespace re2 {} 134void test() { 135 req.set_check(false); // expected-error-re {{use of undeclared identifier 'req'$}} 136} 137} 138 139namespace PR17394 { 140 class A { 141 protected: 142 long zzzzzzzzzz; 143 }; 144 class B : private A {}; 145 B zzzzzzzzzy<>; // expected-error {{expected ';' after top level declarator}}{} 146} 147 148namespace correct_fields_in_member_funcs { 149struct S { 150 int my_member; // expected-note {{'my_member' declared here}} 151 void f() { my_menber = 1; } // expected-error {{use of undeclared identifier 'my_menber'; did you mean 'my_member'?}} 152}; 153} 154 155namespace PR17019 { 156 template<class F> 157 struct evil { 158 evil(F de) { // expected-note {{'de' declared here}} 159 de_; // expected-error {{use of undeclared identifier 'de_'; did you mean 'de'?}} \ 160 // expected-warning {{expression result unused}} 161 } 162 ~evil() { 163 de_->bar() // expected-error {{use of undeclared identifier 'de_'}} 164 } 165 }; 166 167 void meow() { 168 evil<int> Q(0); // expected-note {{in instantiation of member function}} 169 } 170} 171 172namespace fix_class_name_qualifier { 173class MessageHeaders {}; 174class MessageUtils { 175 public: 176 static void ParseMessageHeaders(int, int); // expected-note {{'MessageUtils::ParseMessageHeaders' declared here}} 177}; 178 179void test() { 180 // No, we didn't mean to call MessageHeaders::MessageHeaders. 181 MessageHeaders::ParseMessageHeaders(5, 4); // expected-error {{no member named 'ParseMessageHeaders' in 'fix_class_name_qualifier::MessageHeaders'; did you mean 'MessageUtils::ParseMessageHeaders'?}} 182} 183} 184