blob: 6c39282e5a31bbfa0b18b57a1285db4ff9e9b794 [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 -emit-llvm-only %s
John McCallb681b612009-11-22 02:49:43 +00002
3// Tests that Sema properly creates member-access expressions for
4// these instead of bare FieldDecls.
5
6struct Foo {
7 int myvalue;
8
9 // We have to override these to get something with an lvalue result.
10 int &operator++(int);
11 int &operator--(int);
12};
13
14struct Test0 {
15 Foo memfoo;
16 int memint;
17 int memarr[10];
18 Test0 *memptr;
19 struct MemClass { int a; } memstruct;
20 int &memfun();
21
22 void test() {
23 int *p;
24 p = &Test0::memfoo++;
25 p = &Test0::memfoo--;
26 p = &Test0::memarr[1];
27 p = &Test0::memptr->memint;
28 p = &Test0::memstruct.a;
29 p = &Test0::memfun();
30 }
31};
32
33void test0() {
34 Test0 mytest;
35 mytest.test();
36}
Douglas Gregoreed5ddc2011-03-16 17:42:23 +000037
38namespace rdar9065289 {
39 typedef void (*FuncPtr)();
40 struct X0 { };
41
42 struct X1
43 {
44 X0* x0;
45 FuncPtr X0::*fptr;
46 };
47
48 void f(X1 p) {
49 (p.x0->*(p.fptr))();
50 }
51}