1// { dg-do compile { target i?86-*-cygwin* i?86-*-mingw*} }
2//  Test handling of MI thunks in dllimported classes.
3
4// To build the dll and client app:
5// g++ -shared -o MI.dll dllexport-MI1.C
6// g++ -o MItest.exe dllimport-MI1.C  -L. MI.dll
7
8#include <stdlib.h>
9#include "dll-MI1.h"
10
11extern DLL_IMPEXP MI1 dllMI1;
12
13// This should use the implicit copy ctor for D1 (not imported)
14// and the explicit copy ctor for D2 (dll-imported).
15MI1 dllMI1LocalCopy = dllMI1;
16
17class  MI2 : public D1, public D2
18{
19public:
20  int vf() const { return D2::vf();}
21};
22
23class  MI3 : public MI1
24{
25};
26
27int main ()
28
29{
30  MI1 bar1;
31  MI2 bar2;
32  MI3 bar3;
33
34  if (dllMI1.vf() != D1_return)
35    abort();
36
37  if (dllMI1LocalCopy.vf() != D1_return)
38    abort();
39
40  if (bar1.vf() != D1_return)
41    abort();
42
43  if (bar2.vf() != (D2_return))
44    abort();
45
46  if (bar3.vf() != D1_return )
47    abort();
48}
49
50// Scan for import of explicit copy ctor for D2, but no import
51// of compiler generated copy ctor for D1.
52// { dg-final { scan-assembler  "__imp___ZN2D2C2ERKS_" } }
53// { dg-final { scan-assembler-not "__imp___ZN2D1C2ERKS_" } }
54