blob: 8f289a2b1e961149b54590d117c8cba50aea3308 [file] [log] [blame]
Daniel Dunbard7d5f022009-03-24 02:24:46 +00001// RUN: clang-cc -fsyntax-only -verify %s
Douglas Gregor030ff0c2008-10-31 20:25:05 +00002typedef int INT;
3
Douglas Gregorb48fe382008-10-31 09:07:45 +00004class Foo {
5 Foo();
6 (Foo)(float) { }
Chris Lattner5f4a6822008-11-23 23:12:31 +00007 explicit Foo(int); // expected-note {{previous declaration is here}}
Douglas Gregorb48fe382008-10-31 09:07:45 +00008 Foo(const Foo&);
9
Douglas Gregor030ff0c2008-10-31 20:25:05 +000010 ((Foo))(INT); // expected-error{{cannot be redeclared}}
11
Douglas Gregor33297562009-03-27 04:38:56 +000012 Foo(Foo foo, int i = 17, int j = 42); // expected-error{{copy constructor must pass its first argument by reference}}
Douglas Gregor030ff0c2008-10-31 20:25:05 +000013
Douglas Gregorb48fe382008-10-31 09:07:45 +000014 static Foo(short, short); // expected-error{{constructor cannot be declared 'static'}}
15 virtual Foo(double); // expected-error{{constructor cannot be declared 'virtual'}}
16 Foo(long) const; // expected-error{{'const' qualifier is not allowed on a constructor}}
17
18 int Foo(int, int); // expected-error{{constructor cannot have a return type}}
19};
Douglas Gregor9d350972008-12-12 08:25:50 +000020
21Foo::Foo(const Foo&) { }
22
Douglas Gregor9e7d9de2008-12-15 21:24:18 +000023typedef struct {
24 int version;
25} Anon;
26extern const Anon anon;
27extern "C" const Anon anon2;
28
Sebastian Redl1f5432c2008-12-23 16:41:32 +000029// PR3188: The extern declaration complained about not having an appropriate
30// constructor.
31struct x;
32extern x a;
33
34// A similar case.
35struct y {
36 y(int);
37};
38extern y b;
Douglas Gregor61366e92008-12-24 00:01:03 +000039
40struct Length {
41 Length l() const { return *this; }
42};
Anders Carlsson5a8cb0b2009-04-29 23:19:39 +000043
44// <rdar://problem/6815988>
45struct mmst_reg{
46 char mmst_reg[10];
47};
Anders Carlsson4649cac2009-04-30 22:41:11 +000048
49// PR3948
50namespace PR3948 {
51// PR3948
52class a {
53 public:
54 int b(int a());
55};
56int x();
57void y() {
58 a z; z.b(x);
59}
60}