diff options
Diffstat (limited to 'clang/test/SemaCXX')
-rw-r--r-- | clang/test/SemaCXX/condition.cpp | 4 | ||||
-rw-r--r-- | clang/test/SemaCXX/constructor.cpp | 5 | ||||
-rw-r--r-- | clang/test/SemaCXX/copy-initialization.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/default1.cpp | 4 | ||||
-rw-r--r-- | clang/test/SemaCXX/default2.cpp | 12 |
5 files changed, 22 insertions, 5 deletions
diff --git a/clang/test/SemaCXX/condition.cpp b/clang/test/SemaCXX/condition.cpp index d611364cf03..43117e61c38 100644 --- a/clang/test/SemaCXX/condition.cpp +++ b/clang/test/SemaCXX/condition.cpp @@ -16,8 +16,8 @@ void test() { for (;s;) ; // expected-error {{expression must have bool type (or be convertible to bool) ('struct S' invalid)}} switch (s) {} // expected-error {{statement requires expression of integer type ('struct S' invalid)}} - while (struct S {} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{incompatible type}} expected-error {{expression must have bool type}} - while (struct {} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{incompatible type}} expected-error {{expression must have bool type}} + while (struct S {} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{cannot initialize 'x' with an rvalue of type 'int'}} expected-error {{expression must have bool type}} + while (struct {} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{cannot initialize 'x' with an rvalue of type 'int'}} expected-error {{expression must have bool type}} switch (enum {E} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{incompatible type}} if (int x=0) { // expected-note {{previous definition is here}} diff --git a/clang/test/SemaCXX/constructor.cpp b/clang/test/SemaCXX/constructor.cpp index 536593d5120..68099ecac96 100644 --- a/clang/test/SemaCXX/constructor.cpp +++ b/clang/test/SemaCXX/constructor.cpp @@ -1,5 +1,4 @@ // RUN: clang -fsyntax-only -verify %s - typedef int INT; class Foo { @@ -37,3 +36,7 @@ struct y { y(int); }; extern y b; + +struct Length { + Length l() const { return *this; } +}; diff --git a/clang/test/SemaCXX/copy-initialization.cpp b/clang/test/SemaCXX/copy-initialization.cpp index 5ef84de9acd..e380cc1ad3c 100644 --- a/clang/test/SemaCXX/copy-initialization.cpp +++ b/clang/test/SemaCXX/copy-initialization.cpp @@ -13,5 +13,5 @@ void f(Y y, int *ip, float *fp) { X x1 = y; // expected-error{{no matching constructor for initialization of 'x1'; candidate is:}} X x2 = 0; X x3 = ip; - X x4 = fp; // expected-error{{incompatible type initializing 'x4', expected 'class X'}} + X x4 = fp; // expected-error{{cannot initialize 'x4' with an lvalue of type 'float *'}} } diff --git a/clang/test/SemaCXX/default1.cpp b/clang/test/SemaCXX/default1.cpp index 286be6106b1..28444207d86 100644 --- a/clang/test/SemaCXX/default1.cpp +++ b/clang/test/SemaCXX/default1.cpp @@ -26,4 +26,6 @@ struct Y { explicit Y(int); }; -void k(Y y = 17); // expected-error{{incompatible type in default argument}} +void k(Y y = 17); // expected-error{{cannot initialize 'y' with an rvalue of type 'int'}} + +void kk(Y = 17); // expected-error{{cannot initialize a value of type 'struct Y' with an rvalue of type 'int'}} diff --git a/clang/test/SemaCXX/default2.cpp b/clang/test/SemaCXX/default2.cpp index 863ac0e25fd..c2873af3f08 100644 --- a/clang/test/SemaCXX/default2.cpp +++ b/clang/test/SemaCXX/default2.cpp @@ -103,8 +103,20 @@ public: Z z2; // expected-error{{no matching constructor for initialization}} Z z3(z); } + + void test_Z(const Z& z) { + Z z2(z); // expected-error{{no matching constructor for initialization of 'z2'}} + } }; void test_Z(const Z& z) { Z z2(z); // expected-error{{no matching constructor for initialization of 'z2'}} } + +struct ZZ { + void f(ZZ z = g()); // expected-error{{no matching constructor for initialization}} + + static ZZ g(int = 17); + + ZZ(ZZ&, int = 17); // expected-note{{candidate function}} +}; |