brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.7 KiB · 4c4bb87 Raw
314 lines · cpp
1// RUN: %clang_cc1 -verify -fsyntax-only -triple i386-linux -Wredundant-parens -pedantic-errors -fcxx-exceptions -fexceptions %s2// RUN: %clang_cc1 -verify -fsyntax-only -triple i386-linux -Wredundant-parens -pedantic-errors -fcxx-exceptions -fexceptions -std=c++98 %s3// RUN: %clang_cc1 -verify -fsyntax-only -triple i386-linux -Wredundant-parens -pedantic-errors -fcxx-exceptions -fexceptions -std=c++11 %s4 5const char const *x10; // expected-error {{duplicate 'const' declaration specifier}}6 7int x(*g); // expected-error {{use of undeclared identifier 'g'}}8 9private int cplusplus_is_not_opencl; // expected-error {{expected unqualified-id}}10 11struct Type {12  int Type;13};14 15typedef char bool; // expected-error {{redeclaration of C++ built-in type 'bool'}}16 17// PR4451 - We should recover well from the typo of '::' as ':' in a2.18namespace y {19  struct a { };20  typedef int b;21}22 23y::a a1;24y:a a2;  // expected-error {{unexpected ':' in nested name specifier}}25y::a a3 = a2;26 27// Some valid colons:28void foo() {29y:  // label30  y::a s;31 32  int a = 4;33  a = a ? a : a+1;34}35 36struct b : y::a {};37 38template <typename T>39class someclass {40 41  int bar() {42    T *P;43    return 1 ? P->x : P->y;44  }45};46 47class asm_class_test {48  void foo() __asm__("baz");49};50 51enum { fooenum = 1, };52#if __cplusplus <= 199711L53// expected-error@-2 {{commas at the end of enumerator lists are a C++11 extension}}54#endif55 56struct a {57  int Type : fooenum;58};59 60void test(struct Type *P) {61  int Type;62  Type = 1 ? P->Type : Type;63 64  Type = (y:b) 4;   // expected-error {{unexpected ':' in nested name specifier}}65  Type = 1 ? (66              (y:b)  // expected-error {{unexpected ':' in nested name specifier}}67              4) : 5;68}69 70struct test4 {71  int x  // expected-error {{expected ';' at end of declaration list}}72  int y;73  int z  // expected-error {{expected ';' at end of declaration list}}74};75 76// Make sure we know these are legitimate commas and not typos for ';'.77namespace Commas {78  struct S {79    static int a;80    int c,81    operator()();82  };83 84  int global1,85  __attribute__(()) global2,86  (global5), // expected-warning {{redundant parentheses surrounding declarator}}87  *global6,88  &global7 = global1,89  &&global8 = static_cast<int&&>(global1),90#if __cplusplus <= 199711L91  // expected-error@-2 2{{rvalue references are a C++11 extension}}92#endif93 94  S::a,95  global9,96  global10 = 0,97  global11 == 0, // expected-error {{did you mean '='}}98  global12 __attribute__(()),99  global13(0),100  global14[2],101  global15;102 103  void g() {104    static int a,105    b __asm__("ebx"), // expected-error {{expected ';' at end of declaration}}106    Statics:return;107  }108}109 110// PR5825111struct test5 {};112::new(static_cast<void*>(0)) test5; // expected-error {{expected unqualified-id}}113 114 115// PR6782116template<class T>117class Class1;118 119class Class2 {120} // expected-error {{expected ';' after class}}121 122typedef Class1<Class2> Type1;123 124struct CodeCompleteConsumer {125};126 127void CodeCompleteConsumer::() { // expected-error {{xpected unqualified-id}}128}129 130;131 132// PR4111133void f(sqrgl); // expected-error {{unknown type name 'sqrgl'}}134 135// PR9903136struct S {137  typedef void a() { }; // expected-error {{function definition declared 'typedef'}}138  typedef void c() try { } catch(...) { } // expected-error {{function definition declared 'typedef'}}139  int n, m;140  typedef S() : n(1), m(2) { } // expected-error {{function definition declared 'typedef'}}141};142 143 144namespace TestIsValidAfterTypeSpecifier {145struct s {} v;146 147namespace a {148struct s operator++(struct s a)149{ return a; }150}151 152namespace b {153// The newline after s should make no difference.154struct s155operator++(struct s a)156{ return a; }157}158 159struct X {160  struct s161  friend f();162  struct s163  virtual f();164};165 166struct s167&r0 = v;168struct s169bitand r2 = v;170 171}172 173struct DIE {174  void foo() {}175};176 177void test (DIE die, DIE *Die, DIE INT, DIE *FLOAT) {178  DIE.foo();  // expected-error {{cannot use dot operator on a type}}179  die.foo();180 181  DIE->foo();  // expected-error {{cannot use arrow operator on a type}}182  Die->foo();183 184  int.foo();  // expected-error {{cannot use dot operator on a type}}185  INT.foo();186 187  float->foo();  // expected-error {{cannot use arrow operator on a type}}188  FLOAT->foo();189}190 191namespace PR15017 {192  template<typename T = struct X { int i; }> struct S {}; // expected-error {{'PR15017::X' cannot be defined in a type specifier}}193}194 195// Ensure we produce at least some diagnostic for attributes in C++98.196[[]] struct S; // expected-error {{misplaced attributes}}197#if __cplusplus < 201103L198// expected-error@-2 {{[[]] attributes are a C++11 extension}}199#endif200 201namespace test7 {202  struct Foo {203    void a();204    void b();205  };206 207  void Foo::208  // Comment!209  a() {}210 211 212  void Foo::  // expected-error {{expected unqualified-id}}213  // Comment!214}215 216void test8() {217  struct {} o;218  // This used to crash.219  (&o)->(); // expected-error{{expected unqualified-id}}220}221 222namespace PR5066 {223  template<typename T> struct X {};224  X<int N> x; // expected-error {{type-id cannot have a name}}225 226  using T = int (*T)(); // expected-error {{type-id cannot have a name}}227#if __cplusplus <= 199711L228  // expected-error@-2 {{alias declarations are a C++11 extensio}}229#endif230 231}232 233namespace PR17255 {234void foo() {235  typename A::template B<> c; // expected-error {{use of undeclared identifier 'A'}}236#if __cplusplus <= 199711L237  // expected-error@-2 {{'template' keyword outside of a template}}238#endif239}240}241 242namespace PR17567 {243  struct Foobar { // expected-note 2{{declared here}}244    FooBar(); // expected-error {{missing return type for function 'FooBar'; did you mean the constructor name 'Foobar'?}}245    ~FooBar(); // expected-error {{undeclared identifier 'FooBar' in destructor name}}246  };247  FooBar::FooBar() {} // expected-error {{undeclared}} expected-error {{missing return type}}248  FooBar::~FooBar() {} // expected-error 2{{undeclared}}249}250 251namespace DuplicateFriend {252  struct A {253    friend void friend f(); // expected-warning {{duplicate 'friend' declaration specifier}}254    friend struct B friend; // expected-warning {{duplicate 'friend' declaration specifier}}255  };256}257 258namespace NNS {259  struct A {};260  namespace B { extern A C1, C2, *C3, C4[], C5; }261  // Do not produce a redundant parentheses warning here; removing these parens262  // changes the meaning of the program.263  A (::NNS::B::C1);264  A (NNS::B::C2); // expected-warning {{redundant parentheses surrounding declarator}}265  A (*::NNS::B::C3); // expected-warning {{redundant parentheses surrounding declarator}}266  A (::NNS::B::C4[2]);267  // Removing one of these sets of parentheses would be reasonable.268  A ((::NNS::B::C5)); // expected-warning {{redundant parentheses surrounding declarator}}269 270  void f() {271    // FIXME: A vexing-parse warning here would be useful.272    A(::NNS::B::C1); // expected-error {{definition or redeclaration}}273    A(NNS::B::C1); // expected-warning {{redundant paren}} expected-error {{definition or redeclaration}}274  }275}276 277inline namespace ParensAroundFriend { // expected-error 0-1{{C++11}}278  struct A {};279  struct B {280    static A C();281  };282  namespace X {283    struct B {};284    struct D {285      // No warning here: while this could be written as286      //   friend (::B::C)();287      // we do need parentheses *somewhere* here.288      friend A (::B::C());289    };290  }291}292 293namespace rdar37099386 {294  class A typename A; // expected-error {{expected a qualified name after 'typename'}}295  // expected-error@-1 {{cannot combine with previous 'class' declaration specifier}}296}297 298// PR8380299extern ""      // expected-error {{unknown linkage language}}300test6a { ;// expected-error {{a type specifier is required for all declarations}}301#if __cplusplus <= 199711L302// expected-error@-2 {{expected ';' after top level declarator}}303#else304// expected-error@-4 {{expected expression}}305// expected-note@-5 {{to match this}}306#endif307 308  int test6b;309#if __cplusplus >= 201103L310// expected-error@+3 {{expected}}311// expected-error@-3 {{expected ';' after top level declarator}}312#endif313 314