From 222e2a7620e6520ffaf4fc4e69d79c18da31542e Mon Sep 17 00:00:00 2001 From: "Zancanaro; Carlo" Date: Mon, 24 Sep 2012 09:58:17 +1000 Subject: Add the clang library to the repo (with some of my changes, too). --- clang/test/SemaCXX/member-pointers-2.cpp | 51 ++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 clang/test/SemaCXX/member-pointers-2.cpp (limited to 'clang/test/SemaCXX/member-pointers-2.cpp') diff --git a/clang/test/SemaCXX/member-pointers-2.cpp b/clang/test/SemaCXX/member-pointers-2.cpp new file mode 100644 index 0000000..6c39282 --- /dev/null +++ b/clang/test/SemaCXX/member-pointers-2.cpp @@ -0,0 +1,51 @@ +// RUN: %clang_cc1 -emit-llvm-only %s + +// Tests that Sema properly creates member-access expressions for +// these instead of bare FieldDecls. + +struct Foo { + int myvalue; + + // We have to override these to get something with an lvalue result. + int &operator++(int); + int &operator--(int); +}; + +struct Test0 { + Foo memfoo; + int memint; + int memarr[10]; + Test0 *memptr; + struct MemClass { int a; } memstruct; + int &memfun(); + + void test() { + int *p; + p = &Test0::memfoo++; + p = &Test0::memfoo--; + p = &Test0::memarr[1]; + p = &Test0::memptr->memint; + p = &Test0::memstruct.a; + p = &Test0::memfun(); + } +}; + +void test0() { + Test0 mytest; + mytest.test(); +} + +namespace rdar9065289 { + typedef void (*FuncPtr)(); + struct X0 { }; + + struct X1 + { + X0* x0; + FuncPtr X0::*fptr; + }; + + void f(X1 p) { + (p.x0->*(p.fptr))(); + } +} -- cgit v1.2.3