| /* { dg-do run } */ |
| /* { dg-options "-O3 --param ipa-cp-eval-threshold=1" } */ |
| |
| extern "C" void abort (void); |
| |
| struct CBase { |
| virtual void BaseFunc () {} |
| }; |
| |
| struct MMixin { |
| virtual void * MixinFunc (int, void *) = 0; |
| }; |
| |
| struct CExample: CBase, public MMixin |
| { |
| int stuff, magic, more_stuff; |
| |
| CExample () |
| { |
| stuff = 0; |
| magic = 0xbeef; |
| more_stuff = 0; |
| } |
| void *MixinFunc (int arg, void *arg2) |
| { |
| if (arg != 1 || arg2) |
| return 0; |
| if (magic != 0xbeef) |
| abort(); |
| return this; |
| } |
| }; |
| |
| void *test (MMixin & anExample) |
| { |
| return anExample.MixinFunc (1, 0); |
| } |
| |
| int main () |
| { |
| CExample c; |
| test (c); |
| return 0; |
| } |