summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/ptr-to-datamember.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/CodeGenCXX/ptr-to-datamember.cpp')
-rw-r--r--clang/test/CodeGenCXX/ptr-to-datamember.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/ptr-to-datamember.cpp b/clang/test/CodeGenCXX/ptr-to-datamember.cpp
index b0d7ddc7796..eee03c060f9 100644
--- a/clang/test/CodeGenCXX/ptr-to-datamember.cpp
+++ b/clang/test/CodeGenCXX/ptr-to-datamember.cpp
@@ -2,6 +2,12 @@
extern "C" int printf(...);
+struct F {
+ F() : iF(1), fF(2.0) {}
+ int iF;
+ float fF;
+};
+
struct V {
double d;
int iV;
@@ -23,8 +29,28 @@ public:
float f;
double d;
int Ai;
+ F Af;
};
+void pr(const F& b) {
+ printf(" %d %f\n", b.iF, b.fF);
+}
+
+void test_aggr_pdata(A& a1) {
+ F A::* af = &A::Af;
+ pr(a1.*af);
+
+ (a1.*af).iF = 100;
+ (a1.*af).fF = 200.00;
+ printf(" %d %f\n", (a1.*af).iF, (a1.*af).fF);
+ pr(a1.*af);
+
+ (a1.*af).iF++;
+ (a1.*af).fF--;
+ --(a1.*af).fF;
+ pr(a1.*af);
+}
+
int main()
{
A a1;
@@ -40,4 +66,5 @@ int main()
printf("%d\n", &A::B::V::iV);
printf("%d\n", &A::B1::V::iV);
printf("%d, %f, %f \n", a1.*pa, a1.*pf, a1.*pd);
+ test_aggr_pdata(a1);
}
OpenPOWER on IntegriCloud