| /* { dg-do run } */ | |
| /* { dg-options "-O3" } */ | |
| struct A { | |
| void *p; | |
| A (void *q) : p (q) {} | |
| A (const A &) : p () {} | |
| }; | |
| struct CBase { | |
| virtual void BaseFunc () {} | |
| }; | |
| struct MMixin { | |
| virtual A MixinFunc (int, A) = 0; | |
| }; | |
| struct CExample: CBase, public MMixin | |
| { | |
| A MixinFunc (int arg, A arg2) | |
| { | |
| if (arg != 1 || arg2.p) | |
| return 0; | |
| return this; | |
| } | |
| }; | |
| void *test (MMixin & anExample) | |
| { | |
| return anExample.MixinFunc (1, (0)).p; | |
| } | |
| int main () | |
| { | |
| CExample c; | |
| test (c); | |
| return 0; | |
| } |