diff options
Diffstat (limited to 'test/CXX')
-rw-r--r-- | test/CXX/class.access/class.friend/p1.cpp | 5 | ||||
-rw-r--r-- | test/CXX/class.access/class.friend/p11.cpp | 11 | ||||
-rw-r--r-- | test/CXX/class/class.friend/p1.cpp | 4 | ||||
-rw-r--r-- | test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp | 29 | ||||
-rw-r--r-- | test/CXX/drs/dr1xx.cpp | 5 | ||||
-rw-r--r-- | test/CXX/drs/dr2xx.cpp | 4 | ||||
-rw-r--r-- | test/CXX/drs/dr5xx.cpp | 8 | ||||
-rw-r--r-- | test/CXX/drs/dr6xx.cpp | 42 | ||||
-rw-r--r-- | test/CXX/stmt.stmt/stmt.select/p3.cpp | 9 | ||||
-rw-r--r-- | test/CXX/temp/temp.param/p3.cpp | 4 |
10 files changed, 85 insertions, 36 deletions
diff --git a/test/CXX/class.access/class.friend/p1.cpp b/test/CXX/class.access/class.friend/p1.cpp index b6a1bcdab9..b335b0a8c8 100644 --- a/test/CXX/class.access/class.friend/p1.cpp +++ b/test/CXX/class.access/class.friend/p1.cpp @@ -11,12 +11,11 @@ // friends members of the befriending class. struct S { static void f(); }; // expected-note 2 {{'S' declared here}} -S* g() { return 0; } +S* g() { return 0; } // expected-note 2 {{'g' declared here}} struct X { friend struct S; - friend S* g(); // expected-note 2 {{'g' declared here}} - // FIXME: The above two notes would be better attached to line 11. + friend S* g(); }; void test1() { diff --git a/test/CXX/class.access/class.friend/p11.cpp b/test/CXX/class.access/class.friend/p11.cpp index 0d25c59c9b..0deead19a0 100644 --- a/test/CXX/class.access/class.friend/p11.cpp +++ b/test/CXX/class.access/class.friend/p11.cpp @@ -19,17 +19,16 @@ namespace test1 { } namespace test2 { - void bar(); // expected-note {{'::test2::bar' declared here}} + void bar(); // expected-note 3{{'::test2::bar' declared here}} - void foo() { // expected-note {{'::test2::foo' declared here}} + void foo() { // expected-note 2{{'::test2::foo' declared here}} struct S1 { friend void foo(); // expected-error {{no matching function 'foo' found in local scope; did you mean '::test2::foo'?}} }; void foo(); // expected-note {{local declaration nearly matches}} struct S2 { - friend void foo(); // expected-note{{'::test2::foo' declared here}} - // TODO: the above note should go on line 24 + friend void foo(); }; { @@ -47,8 +46,6 @@ namespace test2 { struct S4 { friend void bar(); // expected-error {{no matching function 'bar' found in local scope; did you mean '::test2::bar'?}} - // expected-note@-1 {{'::test2::bar' declared here}} - // TODO: the above note should go on line 22 }; { void bar(); } @@ -81,8 +78,6 @@ namespace test2 { struct S9 { struct Inner { friend void baz(); // expected-error {{no matching function 'baz' found in local scope; did you mean 'bar'?}} - // expected-note@-1 {{'::test2::bar' declared here}} - // TODO: the above note should go on line 22 }; }; diff --git a/test/CXX/class/class.friend/p1.cpp b/test/CXX/class/class.friend/p1.cpp index 037fc3dadb..08498c0733 100644 --- a/test/CXX/class/class.friend/p1.cpp +++ b/test/CXX/class/class.friend/p1.cpp @@ -51,9 +51,9 @@ class A { friend class A::AInner; // this is okay as an extension friend class AInner; // okay, refers to ::AInner - friend void Derived::missing_member(); // expected-error {{no function named 'missing_member' with type 'void ()' was found in the specified scope}} + friend void Derived::missing_member(); // expected-error {{friend declaration of 'missing_member' does not match any declaration in 'Derived'}} - friend void Derived::base_member(); // expected-error {{no function named 'base_member' with type 'void ()' was found in the specified scope}} + friend void Derived::base_member(); // expected-error {{friend declaration of 'base_member' does not match any declaration in 'Derived'}} friend int Base::typedeffed_member(); // okay: should look through typedef diff --git a/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp b/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp index 49c418a687..43de9343bd 100644 --- a/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp +++ b/test/CXX/dcl.dcl/dcl.attr/dcl.attr.nodiscard/p2.cpp @@ -32,6 +32,35 @@ void g() { // OK, warning suppressed. (void)fp(); } + +namespace PR31526 { +typedef E (*fp1)(); +typedef S (*fp2)(); + +typedef S S_alias; +typedef S_alias (*fp3)(); + +typedef fp2 fp2_alias; + +void f() { + fp1 one; + fp2 two; + fp3 three; + fp2_alias four; + + one(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}} + two(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}} + three(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}} + four(); // expected-warning {{ignoring return value of function declared with 'nodiscard' attribute}} + + // These are all okay because of the explicit cast to void. + (void)one(); + (void)two(); + (void)three(); + (void)four(); +} +} // namespace PR31526 + #ifdef EXT // expected-warning@4 {{use of the 'nodiscard' attribute is a C++17 extension}} // expected-warning@8 {{use of the 'nodiscard' attribute is a C++17 extension}} diff --git a/test/CXX/drs/dr1xx.cpp b/test/CXX/drs/dr1xx.cpp index a92501128b..26ab67d54d 100644 --- a/test/CXX/drs/dr1xx.cpp +++ b/test/CXX/drs/dr1xx.cpp @@ -401,13 +401,12 @@ namespace dr136 { // dr136: 3.4 extern "C" void k(int, int, int, int); // expected-note {{previous declaration is here}} namespace NSA { struct A { - friend void dr136::k(int, int, int, int = 0); // expected-error {{friend declaration specifying a default argument must be the only declaration}} \ - // expected-note {{previous declaration is here}} + friend void dr136::k(int, int, int, int = 0); // expected-error {{friend declaration specifying a default argument must be the only declaration}} }; } namespace NSB { struct A { - friend void dr136::k(int, int, int = 0, int); // expected-error {{friend declaration specifying a default argument must be the only declaration}} + friend void dr136::k(int, int, int = 0, int); // expected-error {{missing default argument on parameter}} }; } struct B { diff --git a/test/CXX/drs/dr2xx.cpp b/test/CXX/drs/dr2xx.cpp index 4e745ef2f4..b69c014b58 100644 --- a/test/CXX/drs/dr2xx.cpp +++ b/test/CXX/drs/dr2xx.cpp @@ -718,7 +718,7 @@ namespace dr261 { // dr261: no A() {} }; - // FIXME: These are ill-formed, with a required diagnostic, for the same + // FIXME: This is ill-formed, with a required diagnostic, for the same // reason. struct B { inline void operator delete(void*) __attribute__((unused)); @@ -726,7 +726,7 @@ namespace dr261 { // dr261: no }; struct C { inline void operator delete(void*) __attribute__((unused)); - virtual ~C() {} + virtual ~C() {} // expected-warning {{'operator delete' was marked unused but was used}} }; struct D { diff --git a/test/CXX/drs/dr5xx.cpp b/test/CXX/drs/dr5xx.cpp index c20a873fc1..2099612e23 100644 --- a/test/CXX/drs/dr5xx.cpp +++ b/test/CXX/drs/dr5xx.cpp @@ -740,17 +740,17 @@ namespace dr573 { // dr573: no namespace dr574 { // dr574: yes struct A { - A &operator=(const A&) const; // expected-note {{does not match because it is const}} + A &operator=(const A&) const; // expected-note {{different qualifiers}} }; struct B { - B &operator=(const B&) volatile; // expected-note {{nearly matches}} + B &operator=(const B&) volatile; // expected-note {{different qualifiers}} }; #if __cplusplus >= 201103L struct C { - C &operator=(const C&) &; // expected-note {{not viable}} expected-note {{nearly matches}} expected-note {{here}} + C &operator=(const C&) &; // expected-note {{not viable}} expected-note {{candidate}} expected-note {{here}} }; struct D { - D &operator=(const D&) &&; // expected-note {{not viable}} expected-note {{nearly matches}} expected-note {{here}} + D &operator=(const D&) &&; // expected-note {{not viable}} expected-note {{candidate}} expected-note {{here}} }; void test(C c, D d) { c = c; diff --git a/test/CXX/drs/dr6xx.cpp b/test/CXX/drs/dr6xx.cpp index f4eccfead2..b4247b2260 100644 --- a/test/CXX/drs/dr6xx.cpp +++ b/test/CXX/drs/dr6xx.cpp @@ -839,7 +839,7 @@ namespace dr673 { // dr673: yes F *f; // expected-error {{unknown type name}} } -namespace dr674 { // dr674: no +namespace dr674 { // dr674: 8 template<typename T> int f(T); int g(int); @@ -849,22 +849,50 @@ namespace dr674 { // dr674: no template<typename T> int h(T); class X { - // FIXME: This should deduce dr674::f<int>. - friend int dr674::f(int); // expected-error {{does not match any}} + friend int dr674::f(int); friend int dr674::g(int); friend int dr674::h<>(int); - int n; + int n; // expected-note 2{{private}} }; template<typename T> int f(T) { return X().n; } int g(int) { return X().n; } - template<typename T> int g(T) { return X().n; } - int h(int) { return X().n; } + template<typename T> int g(T) { return X().n; } // expected-error {{private}} + int h(int) { return X().n; } // expected-error {{private}} template<typename T> int h(T) { return X().n; } template int f(int); - template int g(int); + template int g(int); // expected-note {{in instantiation of}} template int h(int); + + + struct Y { + template<typename T> int f(T); + + int g(int); + template<typename T> int g(T); + + int h(int); + template<typename T> int h(T); + }; + + class Z { + friend int Y::f(int); + friend int Y::g(int); + friend int Y::h<>(int); + int n; // expected-note 2{{private}} + }; + + template<typename T> int Y::f(T) { return Z().n; } + int Y::g(int) { return Z().n; } + template<typename T> int Y::g(T) { return Z().n; } // expected-error {{private}} + int Y::h(int) { return Z().n; } // expected-error {{private}} + template<typename T> int Y::h(T) { return Z().n; } + + // FIXME: Should the <> be required here? + template int Y::f<>(int); + template int Y::g<>(int); // expected-note {{in instantiation of}} + template int Y::h<>(int); } namespace dr675 { // dr675: dup 739 diff --git a/test/CXX/stmt.stmt/stmt.select/p3.cpp b/test/CXX/stmt.stmt/stmt.select/p3.cpp index 7a6a408ec9..4804cc559d 100644 --- a/test/CXX/stmt.stmt/stmt.select/p3.cpp +++ b/test/CXX/stmt.stmt/stmt.select/p3.cpp @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -fsyntax-only -verify %s -// RUN: %clang_cc1 -fsyntax-only -std=c++1z -Wc++14-compat -verify %s -DCPP17 +// RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -verify %s +// RUN: %clang_cc1 -fsyntax-only -Wno-unused-value -std=c++1z -Wc++14-compat -verify %s -DCPP17 int f(); @@ -71,7 +71,6 @@ void whileInitStatement() { // last loop above. It would be nice to remove this. void whileInitStatement2() { while (; false) {} // expected-error {{expected expression}} - // expected-warning@-1 {{expression result unused}} - // expected-error@-2 {{expected ';' after expression}} - // expected-error@-3 {{expected expression}} + // expected-error@-1 {{expected ';' after expression}} + // expected-error@-2 {{expected expression}} } diff --git a/test/CXX/temp/temp.param/p3.cpp b/test/CXX/temp/temp.param/p3.cpp index c3c93396cb..f709630504 100644 --- a/test/CXX/temp/temp.param/p3.cpp +++ b/test/CXX/temp/temp.param/p3.cpp @@ -16,7 +16,7 @@ template<template<class T> class Y> struct X1 { // [Note: because of the name lookup rules, a template-parameter that // could be interpreted as either a non-type template-parameter or a // type-parameter (because its identifier is the name of an already -// existing class) is taken as a type-parameter. For example, +// existing class) is taken as a type-parameter. For example, class T { /* ... */ }; // expected-note{{candidate constructor (the implicit copy constructor) not viable}} #if __cplusplus >= 201103L // C++11 or later // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable}} @@ -27,7 +27,7 @@ int i; template<class T, T i> struct X2 { void f(T t) { - T t1 = i; //template-parameters T and i + T t1 = i; // template-parameters T and i ::T t2 = ::i; // global namespace members T and i \ // expected-error{{no viable conversion}} } |