diff options
author | John McCall <rjmccall@apple.com> | 2010-01-06 09:43:14 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-01-06 09:43:14 +0000 |
commit | b1622a1fd7b7f4ab8d00d0183d17c90ad25c14e3 (patch) | |
tree | e4fc82aaeb530faf9d99061f43b10196764970c9 /test/SemaCXX | |
parent | d87bcfafc340b06322ee4fb3bb249088e1f87b7a (diff) |
Improve the diagnostics used to report implicitly-generated class members
as parts of overload sets. Also, refer to constructors as 'constructors'
rather than functions.
Adjust a lot of tests.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92832 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/SemaCXX')
-rw-r--r-- | test/SemaCXX/condition.cpp | 4 | ||||
-rw-r--r-- | test/SemaCXX/constructor-initializer.cpp | 7 | ||||
-rw-r--r-- | test/SemaCXX/conversion-function.cpp | 4 | ||||
-rw-r--r-- | test/SemaCXX/converting-constructor.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/copy-initialization.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/dcl_init_aggr.cpp | 6 | ||||
-rw-r--r-- | test/SemaCXX/decl-init-ref.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/default2.cpp | 4 | ||||
-rw-r--r-- | test/SemaCXX/direct-initializer.cpp | 12 | ||||
-rw-r--r-- | test/SemaCXX/functional-cast.cpp | 6 | ||||
-rw-r--r-- | test/SemaCXX/namespace.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/nested-name-spec.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/overloaded-builtin-operators.cpp | 4 | ||||
-rw-r--r-- | test/SemaCXX/rval-references.cpp | 4 |
14 files changed, 28 insertions, 33 deletions
diff --git a/test/SemaCXX/condition.cpp b/test/SemaCXX/condition.cpp index a0b57e1baa..7931d11d14 100644 --- a/test/SemaCXX/condition.cpp +++ b/test/SemaCXX/condition.cpp @@ -16,8 +16,8 @@ void test() { for (;s;) ; // expected-error {{value of type 'struct S' is not contextually convertible to 'bool'}} 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 {{no viable conversion}} expected-error {{value of type 'struct S' is not contextually convertible to 'bool'}} expected-note{{candidate function}} - while (struct {} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{no viable conversion}} expected-error {{value of type 'struct <anonymous>' is not contextually convertible to 'bool'}} expected-note{{candidate function}} + while (struct S {} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{no viable conversion}} expected-error {{value of type 'struct S' is not contextually convertible to 'bool'}} expected-note{{candidate is the implicit copy constructor}} + while (struct {} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{no viable conversion}} expected-error {{value of type 'struct <anonymous>' is not contextually convertible to 'bool'}} expected-note{{candidate is the implicit copy constructor}} switch (enum {E} x=0) ; // expected-error {{types may not be defined in conditions}} expected-error {{cannot initialize}} if (int x=0) { // expected-note 2 {{previous definition is here}} diff --git a/test/SemaCXX/constructor-initializer.cpp b/test/SemaCXX/constructor-initializer.cpp index 67d4074cbc..ecab4e47fd 100644 --- a/test/SemaCXX/constructor-initializer.cpp +++ b/test/SemaCXX/constructor-initializer.cpp @@ -97,13 +97,10 @@ struct Current : Derived { // expected-error {{member initializer 'NonExisting' does not name a non-static data member or}} }; - // FIXME. This is bad message! -struct M { // expected-note {{candidate function}} \ - // expected-note {{candidate function}} \ +struct M { // expected-note 2 {{candidate is the implicit copy constructor}} \ // expected-note {{declared here}} \ // expected-note {{declared here}} - M(int i, int j); // expected-note {{candidate function}} \ - // // expected-note {{candidate function}} + M(int i, int j); // expected-note 2 {{candidate constructor}} }; struct N : M { diff --git a/test/SemaCXX/conversion-function.cpp b/test/SemaCXX/conversion-function.cpp index db322f4a3d..4fef172bd5 100644 --- a/test/SemaCXX/conversion-function.cpp +++ b/test/SemaCXX/conversion-function.cpp @@ -56,9 +56,9 @@ public: // This used to crash Clang. struct Flip; -struct Flop { // expected-note{{candidate function}} +struct Flop { // expected-note{{candidate is the implicit copy constructor}} Flop(); - Flop(const Flip&); // expected-note{{candidate function}} + Flop(const Flip&); // expected-note{{candidate constructor}} }; struct Flip { operator Flop() const; // expected-note{{candidate function}} diff --git a/test/SemaCXX/converting-constructor.cpp b/test/SemaCXX/converting-constructor.cpp index e78798b82c..3ef003ce76 100644 --- a/test/SemaCXX/converting-constructor.cpp +++ b/test/SemaCXX/converting-constructor.cpp @@ -27,7 +27,7 @@ public: FromShort(short s); }; -class FromShortExplicitly { // expected-note{{candidate function}} +class FromShortExplicitly { // expected-note{{candidate is the implicit copy constructor}} public: explicit FromShortExplicitly(short s); }; diff --git a/test/SemaCXX/copy-initialization.cpp b/test/SemaCXX/copy-initialization.cpp index ad149232a4..2cf878a844 100644 --- a/test/SemaCXX/copy-initialization.cpp +++ b/test/SemaCXX/copy-initialization.cpp @@ -2,7 +2,7 @@ class X { public: explicit X(const X&); - X(int*); // expected-note 2{{candidate function}} + X(int*); // expected-note 2{{candidate constructor}} explicit X(float*); }; diff --git a/test/SemaCXX/dcl_init_aggr.cpp b/test/SemaCXX/dcl_init_aggr.cpp index 87b51e32e5..f928626a03 100644 --- a/test/SemaCXX/dcl_init_aggr.cpp +++ b/test/SemaCXX/dcl_init_aggr.cpp @@ -40,9 +40,9 @@ char cv[4] = { 'a', 's', 'd', 'f', 0 }; // expected-error{{excess elements in ar struct TooFew { int a; char* b; int c; }; TooFew too_few = { 1, "asdf" }; // okay -struct NoDefaultConstructor { // expected-note 3 {{candidate function}} \ +struct NoDefaultConstructor { // expected-note 3 {{candidate is the implicit copy constructor}} \ // expected-note{{declared here}} - NoDefaultConstructor(int); // expected-note 3 {{candidate function}} + NoDefaultConstructor(int); // expected-note 3 {{candidate constructor}} }; struct TooFewError { // expected-error{{implicit default constructor for}} int a; @@ -115,7 +115,7 @@ B2 b2_2 = { 4, d2, 0 }; B2 b2_3 = { c2, a2, a2 }; // C++ [dcl.init.aggr]p15: -union u { int a; char* b; }; // expected-note{{candidate function}} +union u { int a; char* b; }; // expected-note{{candidate is the implicit copy constructor}} u u1 = { 1 }; u u2 = u1; u u3 = 1; // expected-error{{no viable conversion}} diff --git a/test/SemaCXX/decl-init-ref.cpp b/test/SemaCXX/decl-init-ref.cpp index 294543f495..656f3436a0 100644 --- a/test/SemaCXX/decl-init-ref.cpp +++ b/test/SemaCXX/decl-init-ref.cpp @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -fsyntax-only -verify -std=c++0x %s -struct A {}; // expected-note {{candidate function}} +struct A {}; // expected-note {{candidate is the implicit copy constructor}} struct BASE { operator A(); // expected-note {{candidate function}} diff --git a/test/SemaCXX/default2.cpp b/test/SemaCXX/default2.cpp index 880255e453..d2c44bd998 100644 --- a/test/SemaCXX/default2.cpp +++ b/test/SemaCXX/default2.cpp @@ -82,7 +82,7 @@ int Y::mem4(int i = a) // expected-error{{invalid use of nonstatic data member ' // constructors. class Z { public: - Z(Z&, int i = 17); // expected-note 3 {{candidate function}} + Z(Z&, int i = 17); // expected-note 3 {{candidate constructor}} void f(Z& z) { Z z2; // expected-error{{no matching constructor for initialization}} @@ -103,7 +103,7 @@ struct ZZ { void f(ZZ z = g()); // expected-error{{no matching constructor for initialization}} - ZZ(ZZ&, int = 17); // expected-note{{candidate function}} + ZZ(ZZ&, int = 17); // expected-note{{candidate constructor}} }; // http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#325 diff --git a/test/SemaCXX/direct-initializer.cpp b/test/SemaCXX/direct-initializer.cpp index 03a5da3a30..bc1cde5827 100644 --- a/test/SemaCXX/direct-initializer.cpp +++ b/test/SemaCXX/direct-initializer.cpp @@ -13,16 +13,16 @@ class Y { explicit Y(float); }; -class X { // expected-note{{candidate function}} +class X { // expected-note{{candidate is the implicit copy constructor}} public: - explicit X(int); // expected-note{{candidate function}} - X(float, float, float); // expected-note{{candidate function}} - X(float, Y); // expected-note{{candidate function}} + explicit X(int); // expected-note{{candidate constructor}} + X(float, float, float); // expected-note{{candidate constructor}} + X(float, Y); // expected-note{{candidate constructor}} }; -class Z { // expected-note{{candidate function}} +class Z { // expected-note{{candidate is the implicit copy constructor}} public: - Z(int); // expected-note{{candidate function}} + Z(int); // expected-note{{candidate constructor}} }; void g() { diff --git a/test/SemaCXX/functional-cast.cpp b/test/SemaCXX/functional-cast.cpp index 63be77008c..946d4713f7 100644 --- a/test/SemaCXX/functional-cast.cpp +++ b/test/SemaCXX/functional-cast.cpp @@ -10,10 +10,8 @@ struct InitViaConstructor { InitViaConstructor(int i = 7); }; -// FIXME: error messages for implicitly-declared special member -// function candidates are very poor -struct NoValueInit { // expected-note 2 {{candidate function}} - NoValueInit(int i, int j); // expected-note 2 {{candidate function}} +struct NoValueInit { // expected-note 2 {{candidate is the implicit copy constructor}} + NoValueInit(int i, int j); // expected-note 2 {{candidate constructor}} }; void test_cxx_functional_value_init() { diff --git a/test/SemaCXX/namespace.cpp b/test/SemaCXX/namespace.cpp index ab690b7286..38b31f721a 100644 --- a/test/SemaCXX/namespace.cpp +++ b/test/SemaCXX/namespace.cpp @@ -9,7 +9,7 @@ int A; // expected-error {{redefinition of 'A' as different kind of symbol}} class A; // expected-error {{redefinition of 'A' as different kind of symbol}} class B {}; // expected-note {{previous definition is here}} \ - // FIXME: ugly expected-note{{candidate function}} + // expected-note{{candidate is the implicit copy assignment operator}} void C(); // expected-note {{previous definition is here}} namespace C {} // expected-error {{redefinition of 'C' as different kind of symbol}} diff --git a/test/SemaCXX/nested-name-spec.cpp b/test/SemaCXX/nested-name-spec.cpp index 4e65b41e66..a53231dca7 100644 --- a/test/SemaCXX/nested-name-spec.cpp +++ b/test/SemaCXX/nested-name-spec.cpp @@ -178,7 +178,7 @@ bool (foo_S::value); namespace somens { - struct a { }; // expected-note{{candidate function}} + struct a { }; // expected-note{{candidate is the implicit copy constructor}} } template <typename T> diff --git a/test/SemaCXX/overloaded-builtin-operators.cpp b/test/SemaCXX/overloaded-builtin-operators.cpp index 12903cc7fa..e9ffc2ad3f 100644 --- a/test/SemaCXX/overloaded-builtin-operators.cpp +++ b/test/SemaCXX/overloaded-builtin-operators.cpp @@ -59,7 +59,7 @@ void f(Short s, Long l, Enum1 e1, Enum2 e2, Xpmf pmf) { // FIXME: should pass (void)static_cast<no&>(islong(e1 % e2)); } -struct ShortRef { // expected-note{{candidate function}} +struct ShortRef { // expected-note{{candidate is the implicit copy assignment operator}} operator short&(); }; @@ -67,7 +67,7 @@ struct LongRef { operator volatile long&(); }; -struct XpmfRef { // expected-note{{candidate function}} +struct XpmfRef { // expected-note{{candidate is the implicit copy assignment operator}} operator pmf&(); }; diff --git a/test/SemaCXX/rval-references.cpp b/test/SemaCXX/rval-references.cpp index 7ff3d584c0..1cde26352a 100644 --- a/test/SemaCXX/rval-references.cpp +++ b/test/SemaCXX/rval-references.cpp @@ -67,8 +67,8 @@ struct MoveOnly { MoveOnly(); MoveOnly(const MoveOnly&) = delete; // expected-note {{candidate function}} \ // expected-note 3{{explicitly marked deleted here}} - MoveOnly(MoveOnly&&); // expected-note {{candidate function}} - MoveOnly(int&&); // expected-note {{candidate function}} + MoveOnly(MoveOnly&&); // expected-note {{candidate constructor}} + MoveOnly(int&&); // expected-note {{candidate constructor}} }; MoveOnly gmo; |