summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/undefined-internal.cpp
diff options
context:
space:
mode:
authorNick Lewycky <nicholas@mxc.ca>2013-02-07 05:08:22 +0000
committerNick Lewycky <nicholas@mxc.ca>2013-02-07 05:08:22 +0000
commit134af91b0649359a068d30479b66452dd68a23c0 (patch)
tree322de913fd7b2f9395a230b0aa78589352756102 /clang/test/SemaCXX/undefined-internal.cpp
parent4a230ffa96b7af6e7394e7458ba7604d05c1d3e8 (diff)
downloadbcm5719-llvm-134af91b0649359a068d30479b66452dd68a23c0.tar.gz
bcm5719-llvm-134af91b0649359a068d30479b66452dd68a23c0.zip
Apply the pure-virtual odr rule to other constructs which can call overloaded
operators. llvm-svn: 174584
Diffstat (limited to 'clang/test/SemaCXX/undefined-internal.cpp')
-rw-r--r--clang/test/SemaCXX/undefined-internal.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/undefined-internal.cpp b/clang/test/SemaCXX/undefined-internal.cpp
index 227e6b4a85e..40ab33cac42 100644
--- a/clang/test/SemaCXX/undefined-internal.cpp
+++ b/clang/test/SemaCXX/undefined-internal.cpp
@@ -231,3 +231,41 @@ namespace test10 {
};
}
}
+
+namespace test11 {
+ namespace {
+ struct A {
+ virtual bool operator()() const = 0;
+ virtual void operator!() const = 0;
+ virtual bool operator+(const A&) const = 0;
+ virtual int operator[](int) const = 0;
+ virtual const A* operator->() const = 0;
+ int member;
+ };
+
+ struct B {
+ bool operator()() const; // expected-warning {{function 'test11::<anonymous namespace>::B::operator()' has internal linkage but is not defined}}
+ void operator!() const; // expected-warning {{function 'test11::<anonymous namespace>::B::operator!' has internal linkage but is not defined}}
+ bool operator+(const B&) const; // expected-warning {{function 'test11::<anonymous namespace>::B::operator+' has internal linkage but is not defined}}
+ int operator[](int) const; // expected-warning {{function 'test11::<anonymous namespace>::B::operator[]' has internal linkage but is not defined}}
+ const B* operator->() const; // expected-warning {{function 'test11::<anonymous namespace>::B::operator->' has internal linkage but is not defined}}
+ int member;
+ };
+ }
+
+ void test1(A &a1, A &a2) {
+ a1();
+ !a1;
+ a1 + a2;
+ a1[0];
+ (void)a1->member;
+ }
+
+ void test2(B &b1, B &b2) {
+ b1(); // expected-note {{used here}}
+ !b1; // expected-note {{used here}}
+ b1 + b2; // expected-note {{used here}}
+ b1[0]; // expected-note {{used here}}
+ (void)b1->member; // expected-note {{used here}}
+ }
+}
OpenPOWER on IntegriCloud