|  | // 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))(); | 
|  | } | 
|  | } |