2013-07-09 07:13:44 +08:00
// RUN: %clang_cc1 -fsyntax-only -verify -Wno-c++11-extensions %s
//
// FIXME: This file is overflow from test/SemaCXX/typo-correction.cpp due to a
// hard-coded limit of 20 different typo corrections Sema::CorrectTypo will
// attempt within a single file (which is to avoid having very broken files take
// minutes to finally be rejected by the parser).
2014-06-12 02:07:01 +08:00
namespace PR12951 {
// If there are two corrections that have the same identifier and edit distance
// and only differ by their namespaces, don't suggest either as a correction
// since both are equally likely corrections.
namespace foobar { struct Thing { } ; }
namespace bazquux { struct Thing { } ; }
void f ( ) { Thing t ; } // expected-error{{unknown type name 'Thing'}}
}
2013-09-28 03:40:12 +08:00
namespace bogus_keyword_suggestion {
void test ( ) {
2013-12-14 09:07:05 +08:00
status = " OK " ; // expected-error-re {{use of undeclared identifier 'status'{{$}}}}
return status ; // expected-error-re {{use of undeclared identifier 'status'{{$}}}}
2013-09-28 03:40:12 +08:00
}
}
namespace PR13387 {
struct A {
void CreateFoo ( float , float ) ;
void CreateBar ( float , float ) ;
} ;
struct B : A {
using A : : CreateFoo ;
void CreateFoo ( int , int ) ;
} ;
void f ( B & x ) {
x . Createfoo ( 0 , 0 ) ; // expected-error {{no member named 'Createfoo' in 'PR13387::B'; did you mean 'CreateFoo'?}}
}
}
struct DataStruct { void foo ( ) ; } ;
struct T {
DataStruct data_struct ;
void f ( ) ;
} ;
// should be void T::f();
void f ( ) {
2013-12-14 09:07:05 +08:00
data_struct - > foo ( ) ; // expected-error-re{{use of undeclared identifier 'data_struct'{{$}}}}
2013-09-28 03:40:12 +08:00
}
2013-07-09 07:13:44 +08:00
namespace PR12287 {
class zif {
void nab ( int ) ;
} ;
void nab ( ) ; // expected-note{{'::PR12287::nab' declared here}}
void zif : : nab ( int ) {
nab ( ) ; // expected-error{{too few arguments to function call, expected 1, have 0; did you mean '::PR12287::nab'?}}
}
}
2013-07-31 08:48:10 +08:00
namespace TemplateFunction {
2013-08-17 08:46:16 +08:00
template < class T >
void A ( T ) { } // expected-note {{'::TemplateFunction::A' declared here}}
2013-07-31 08:48:10 +08:00
2013-08-17 08:46:16 +08:00
template < class T >
void B ( T ) { } // expected-note {{'::TemplateFunction::B' declared here}}
2013-07-31 08:48:10 +08:00
class Foo {
public :
void A ( int , int ) { }
void B ( ) { }
} ;
void test ( Foo F , int num ) {
F . A ( num ) ; // expected-error {{too few arguments to function call, expected 2, have 1; did you mean '::TemplateFunction::A'?}}
F . B ( num ) ; // expected-error {{too many arguments to function call, expected 0, have 1; did you mean '::TemplateFunction::B'?}}
}
}
2013-09-27 03:10:29 +08:00
namespace using_suggestion_val_dropped_specifier {
void FFF ( ) { } // expected-note {{'::using_suggestion_val_dropped_specifier::FFF' declared here}}
namespace N { }
using 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'?}}
}
namespace class_member_typo_corrections {
class Outer {
public :
class Inner { } ; // expected-note {{'Outer::Inner' declared here}}
Inner MyMethod ( Inner arg ) ;
} ;
Inner Outer : : MyMethod ( Inner arg ) { // expected-error {{unknown type name 'Inner'; did you mean 'Outer::Inner'?}}
2013-09-27 05:13:05 +08:00
return Inner ( ) ;
2013-09-27 03:10:29 +08:00
}
class Result {
public :
enum ResultType {
ENTITY , // expected-note {{'Result::ENTITY' declared here}}
PREDICATE , // expected-note {{'Result::PREDICATE' declared here}}
LITERAL // expected-note {{'Result::LITERAL' declared here}}
} ;
ResultType type ( ) ;
} ;
void test ( ) {
Result result_cell ;
switch ( result_cell . type ( ) ) {
case ENTITY : // expected-error {{use of undeclared identifier 'ENTITY'; did you mean 'Result::ENTITY'?}}
case LITERAL : // expected-error {{use of undeclared identifier 'LITERAL'; did you mean 'Result::LITERAL'?}}
case PREDICAT : // expected-error {{use of undeclared identifier 'PREDICAT'; did you mean 'Result::PREDICATE'?}}
break ;
}
}
class Figure {
enum ResultType {
SQUARE ,
TRIANGLE ,
CIRCLE
} ;
public :
ResultType type ( ) ;
} ;
void testAccess ( ) {
Figure obj ;
switch ( obj . type ( ) ) { // expected-warning {{enumeration values 'SQUARE', 'TRIANGLE', and 'CIRCLE' not handled in switch}}
2013-12-14 09:07:05 +08:00
case SQUARE : // expected-error-re {{use of undeclared identifier 'SQUARE'{{$}}}}
case TRIANGLE : // expected-error-re {{use of undeclared identifier 'TRIANGLE'{{$}}}}
case CIRCE : // expected-error-re {{use of undeclared identifier 'CIRCE'{{$}}}}
2013-09-27 03:10:29 +08:00
break ;
}
}
}
2013-09-28 03:40:16 +08:00
long readline ( const char * , char * , unsigned long ) ;
void assign_to_unknown_var ( ) {
2013-12-14 09:07:05 +08:00
deadline_ = 1 ; // expected-error-re {{use of undeclared identifier 'deadline_'{{$}}}}
2013-09-28 03:40:16 +08:00
}
2013-09-28 07:54:23 +08:00
namespace no_ns_before_dot {
namespace re2 { }
void test ( ) {
2013-12-14 09:07:05 +08:00
req . set_check ( false ) ; // expected-error-re {{use of undeclared identifier 'req'{{$}}}}
2013-09-28 07:54:23 +08:00
}
}
2013-10-01 10:44:48 +08:00
namespace PR17394 {
class A {
protected :
long zzzzzzzzzz ;
} ;
class B : private A { } ;
B zzzzzzzzzy < > ; // expected-error {{expected ';' after top level declarator}}{}
}
2013-10-02 06:00:28 +08:00
namespace correct_fields_in_member_funcs {
struct S {
int my_member ; // expected-note {{'my_member' declared here}}
void f ( ) { my_menber = 1 ; } // expected-error {{use of undeclared identifier 'my_menber'; did you mean 'my_member'?}}
} ;
}
2013-10-14 22:05:48 +08:00
namespace PR17019 {
template < class F >
struct evil {
evil ( F de ) { // expected-note {{'de' declared here}}
de_ ; / / expected - error { { use of undeclared identifier ' de_ ' ; did you mean ' de ' ? } } \
// expected-warning {{expression result unused}}
}
~ evil ( ) {
de_ - > bar ( ) // expected-error {{use of undeclared identifier 'de_'}}
}
} ;
void meow ( ) {
evil < int > Q ( 0 ) ; // expected-note {{in instantiation of member function}}
}
}
2013-10-19 08:05:00 +08:00
namespace fix_class_name_qualifier {
class MessageHeaders { } ;
class MessageUtils {
public :
static void ParseMessageHeaders ( int , int ) ; // expected-note {{'MessageUtils::ParseMessageHeaders' declared here}}
} ;
void test ( ) {
// No, we didn't mean to call MessageHeaders::MessageHeaders.
MessageHeaders : : ParseMessageHeaders ( 5 , 4 ) ; // expected-error {{no member named 'ParseMessageHeaders' in 'fix_class_name_qualifier::MessageHeaders'; did you mean 'MessageUtils::ParseMessageHeaders'?}}
}
}
2013-12-17 03:19:18 +08:00
namespace PR18213 { // expected-note {{'PR18213' declared here}}
struct WrapperInfo {
int i ;
} ;
template < typename T > struct Wrappable {
static WrapperInfo kWrapperInfo ;
} ;
// Note the space before "::PR18213" is intended and needed, as it highlights
// the actual typo, which is the leading "::".
// TODO: Suggest removing the "::" from "::PR18213" (the right correction)
// instead of incorrectly suggesting dropping "PR18213::WrapperInfo::".
template < >
PR18213 : : WrapperInfo : : PR18213 : : Wrappable < int > : : kWrapperInfo = { 0 } ; / / expected - error { { no member named ' PR18213 ' in ' PR18213 : : WrapperInfo ' ; did you mean simply ' PR18213 ' ? } } \
// expected-error {{C++ requires a type specifier for all declarations}}
}
2014-02-06 02:57:51 +08:00
namespace PR18651 {
struct {
int x ;
} a , b ;
int y = x ; // expected-error-re {{use of undeclared identifier 'x'{{$}}}}
}
2014-02-10 05:47:04 +08:00
namespace PR18685 {
template < class C , int I , int J >
class SetVector {
public :
SetVector ( ) { }
} ;
template < class C , int I >
class SmallSetVector : public SetVector < C , I , 8 > { } ;
class foo { } ;
SmallSetVector < foo * , 2 > fooSet ;
}
PR18685 : : BitVector Map ; // expected-error-re {{no type named 'BitVector' in namespace 'PR18685'{{$}}}}
2014-02-14 04:14:07 +08:00
namespace shadowed_template {
template < typename T > class Fizbin { } ; // expected-note {{'::shadowed_template::Fizbin' declared here}}
class Baz {
int Fizbin ( ) ;
// TODO: Teach the parser to recover from the typo correction instead of
// continuing to treat the template name as an implicit-int declaration.
Fizbin < int > qux ; / / expected - error { { unknown type name ' Fizbin ' ; did you mean ' : : shadowed_template : : Fizbin ' ? } } \
// expected-error {{expected member name or ';' after declaration specifiers}}
} ;
}
2014-03-01 02:12:42 +08:00
namespace PR18852 {
void func ( ) {
struct foo {
void bar ( ) { }
} ;
bar ( ) ; // expected-error-re {{use of undeclared identifier 'bar'{{$}}}}
}
2014-04-05 06:16:30 +08:00
class Thread {
public :
void Start ( ) ;
static void Stop ( ) ; // expected-note {{'Thread::Stop' declared here}}
} ;
class Manager {
public :
void Start ( int ) ; // expected-note {{'Start' declared here}}
void Stop ( int ) ; // expected-note {{'Stop' declared here}}
} ;
void test ( Manager * m ) {
// Don't suggest Thread::Start as a correction just because it has the same
// (unqualified) name and accepts the right number of args; this is a method
// call on an object in an unrelated class.
m - > Start ( ) ; // expected-error-re {{too few arguments to function call, expected 1, have 0{{$}}}}
m - > Stop ( ) ; // expected-error-re {{too few arguments to function call, expected 1, have 0{{$}}}}
Stop ( ) ; // expected-error {{use of undeclared identifier 'Stop'; did you mean 'Thread::Stop'?}}
}
2014-03-01 02:12:42 +08:00
}
2014-03-22 05:54:25 +08:00
namespace std {
class bernoulli_distribution {
public :
double p ( ) const ;
} ;
}
void test ( ) {
// Make sure that typo correction doesn't suggest changing 'p' to
// 'std::bernoulli_distribution::p' as that is most likely wrong.
if ( p ) // expected-error-re {{use of undeclared identifier 'p'{{$}}}}
return ;
}
2014-06-24 06:57:51 +08:00
namespace PR19681 {
struct TypoA { } ;
struct TypoB {
void test ( ) ;
private :
template < typename T > void private_memfn ( T ) ; // expected-note{{declared here}}
} ;
void TypoB : : test ( ) {
// FIXME: should suggest 'PR19681::TypoB::private_memfn' instead of '::PR19681::TypoB::private_memfn'
( void ) static_cast < void ( TypoB : : * ) ( int ) > ( & TypoA : : private_memfn ) ; // expected-error{{no member named 'private_memfn' in 'PR19681::TypoA'; did you mean '::PR19681::TypoB::private_memfn'?}}
}
}
2014-07-29 02:14:02 +08:00
namespace testWantFunctionLikeCasts {
long test ( bool a ) {
if ( a )
return struc ( 5.7 ) ; // expected-error-re {{use of undeclared identifier 'struc'{{$}}}}
else
return lon ( 8.0 ) ; // expected-error {{use of undeclared identifier 'lon'; did you mean 'long'?}}
}
}