summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp59
-rw-r--r--clang/test/SemaCXX/for-range-dereference.cpp6
2 files changed, 60 insertions, 5 deletions
diff --git a/clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp b/clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp
index 473c8b62bad..f42fc9b6e5a 100644
--- a/clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp
+++ b/clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp
@@ -150,9 +150,9 @@ void g() {
struct NoEnd {
null_t begin();
};
- for (auto u : NoBegin()) { // expected-error {{range type 'NoBegin' has 'end' member but no 'begin' member}}
+ for (auto u : NoBegin()) { // expected-error {{no viable 'begin' function available}}
}
- for (auto u : NoEnd()) { // expected-error {{range type 'NoEnd' has 'begin' member but no 'end' member}}
+ for (auto u : NoEnd()) { // expected-error {{no viable 'end' function available}}
}
struct NoIncr {
@@ -271,3 +271,58 @@ namespace rdar13712739 {
template void foo(const int&); // expected-note{{in instantiation of function template specialization}}
}
+
+namespace p0962r1 {
+ namespace NA {
+ struct A {
+ void begin();
+ };
+ int *begin(A);
+ int *end(A);
+ }
+
+ namespace NB {
+ struct B {
+ void end();
+ };
+ int *begin(B);
+ int *end(B);
+ }
+
+ namespace NC {
+ struct C {
+ void begin();
+ };
+ int *begin(C);
+ }
+
+ namespace ND {
+ struct D {
+ void end();
+ };
+ int *end(D);
+ }
+
+ namespace NE {
+ struct E {
+ void begin(); // expected-note {{member is not a candidate because range type 'p0962r1::NE::E' has no 'end' member}}
+ };
+ int *end(E);
+ }
+
+ namespace NF {
+ struct F {
+ void end(); // expected-note {{member is not a candidate because range type 'p0962r1::NF::F' has no 'begin' member}}
+ };
+ int *begin(F);
+ }
+
+ void use(NA::A a, NB::B b, NC::C c, ND::D d, NE::E e, NF::F f) {
+ for (auto x : a) {}
+ for (auto x : b) {}
+ for (auto x : c) {} // expected-error {{no viable 'end' function}}
+ for (auto x : d) {} // expected-error {{no viable 'begin' function}}
+ for (auto x : e) {} // expected-error {{no viable 'begin' function}}
+ for (auto x : f) {} // expected-error {{no viable 'end' function}}
+ }
+}
diff --git a/clang/test/SemaCXX/for-range-dereference.cpp b/clang/test/SemaCXX/for-range-dereference.cpp
index 7377199024e..de4958c31bc 100644
--- a/clang/test/SemaCXX/for-range-dereference.cpp
+++ b/clang/test/SemaCXX/for-range-dereference.cpp
@@ -17,7 +17,7 @@ struct DeletedEnd : public T {
struct DeletedADLBegin { };
int* begin(DeletedADLBegin) = delete; //expected-note {{candidate function has been explicitly deleted}} \
- expected-note 5 {{candidate function not viable: no known conversion}}
+ expected-note 6 {{candidate function not viable: no known conversion}}
struct PrivateEnd {
Data *begin();
@@ -27,7 +27,7 @@ struct PrivateEnd {
};
struct ADLNoEnd { };
-Data * begin(ADLNoEnd); // expected-note 6 {{candidate function not viable: no known conversion}}
+Data * begin(ADLNoEnd); // expected-note 7 {{candidate function not viable: no known conversion}}
struct OverloadedStar {
T operator*();
@@ -45,7 +45,7 @@ void f() {
for (auto i : parr) { }// expected-error{{invalid range expression of type 'int (*)[10]'; did you mean to dereference it with '*'?}}
NoBegin NB;
- for (auto i : NB) { }// expected-error{{range type 'NoBegin' has 'end' member but no 'begin' member}}
+ for (auto i : NB) { }// expected-error{{invalid range expression of type 'NoBegin'; no viable 'begin' function available}}
NoBegin *pNB;
for (auto i : pNB) { }// expected-error{{invalid range expression of type 'NoBegin *'; no viable 'begin' function available}}
NoBegin **ppNB;
OpenPOWER on IntegriCloud