diff options
| author | John McCall <rjmccall@apple.com> | 2010-01-28 01:42:12 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2010-01-28 01:42:12 +0000 |
| commit | b3a44005549256475f21986fc39e884530e1942c (patch) | |
| tree | 2d49b81e69573a0ef76354f73351c0d0b636ff5f /clang/test | |
| parent | 81310810bd67e15bcaa977f3dc58c4696cc5b56e (diff) | |
| download | bcm5719-llvm-b3a44005549256475f21986fc39e884530e1942c.tar.gz bcm5719-llvm-b3a44005549256475f21986fc39e884530e1942c.zip | |
Access checking for overloaded operators.
llvm-svn: 94725
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CXX/class.access/p4.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/clang/test/CXX/class.access/p4.cpp b/clang/test/CXX/class.access/p4.cpp index 7d89659901a..3f4397a28b4 100644 --- a/clang/test/CXX/class.access/p4.cpp +++ b/clang/test/CXX/class.access/p4.cpp @@ -31,3 +31,39 @@ namespace test0 { void (A::*c)(Private&) = &A::foo; // expected-error {{access to private member outside any class}} } } + +// Member operators. +namespace test1 { + class A { + public: + void operator+(Public&); + void operator[](Public&); + protected: + void operator+(Protected&); // expected-note {{declared protected here}} + void operator[](Protected&); // expected-note {{declared protected here}} + private: + void operator+(Private&); // expected-note {{declared private here}} + void operator[](Private&); // expected-note {{declared private here}} + void operator-(); // expected-note {{declared private here}} + }; + void operator+(const A &, Public&); + void operator+(const A &, Protected&); + void operator+(const A &, Private&); + void operator-(const A &); + + void test(A &a, Public &pub, Protected &prot, Private &priv) { + a + pub; + a + prot; // expected-error {{access to protected member}} + a + priv; // expected-error {{access to private member}} + a[pub]; + a[prot]; // expected-error {{access to protected member}} + a[priv]; // expected-error {{access to private member}} + -a; // expected-error {{access to private member}} + + const A &ca = a; + ca + pub; + ca + prot; + ca + priv; + -ca; + } +} |

