annotate gcc/testsuite/g++.dg/ext/dllimport-MI1.C @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents 04ced10e8804
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // { dg-do compile { target i?86-*-cygwin* i?86-*-mingw* x86_64-*-mingw* } }
kono
parents:
diff changeset
2 // Test handling of MI thunks in dllimported classes.
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 // To build the dll and client app:
kono
parents:
diff changeset
5 // g++ -shared -o MI.dll dllexport-MI1.C
kono
parents:
diff changeset
6 // g++ -o MItest.exe dllimport-MI1.C -L. MI.dll
kono
parents:
diff changeset
7
kono
parents:
diff changeset
8 #include <stdlib.h>
kono
parents:
diff changeset
9 #include "dll-MI1.h"
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 extern DLL_IMPEXP MI1 dllMI1;
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 // This should use the implicit copy ctor for D1 (not imported)
kono
parents:
diff changeset
14 // and the explicit copy ctor for D2 (dll-imported).
kono
parents:
diff changeset
15 MI1 dllMI1LocalCopy = dllMI1;
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 class MI2 : public D1, public D2
kono
parents:
diff changeset
18 {
kono
parents:
diff changeset
19 public:
kono
parents:
diff changeset
20 int vf() const { return D2::vf();}
kono
parents:
diff changeset
21 };
kono
parents:
diff changeset
22
kono
parents:
diff changeset
23 class MI3 : public MI1
kono
parents:
diff changeset
24 {
kono
parents:
diff changeset
25 };
kono
parents:
diff changeset
26
kono
parents:
diff changeset
27 int main ()
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 {
kono
parents:
diff changeset
30 MI1 bar1;
kono
parents:
diff changeset
31 MI2 bar2;
kono
parents:
diff changeset
32 MI3 bar3;
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 if (dllMI1.vf() != D1_return)
kono
parents:
diff changeset
35 abort();
kono
parents:
diff changeset
36
kono
parents:
diff changeset
37 if (dllMI1LocalCopy.vf() != D1_return)
kono
parents:
diff changeset
38 abort();
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 if (bar1.vf() != D1_return)
kono
parents:
diff changeset
41 abort();
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 if (bar2.vf() != (D2_return))
kono
parents:
diff changeset
44 abort();
kono
parents:
diff changeset
45
kono
parents:
diff changeset
46 if (bar3.vf() != D1_return )
kono
parents:
diff changeset
47 abort();
kono
parents:
diff changeset
48 }
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 // Scan for import of explicit copy ctor for D2, but no import
kono
parents:
diff changeset
51 // of compiler generated copy ctor for D1.
kono
parents:
diff changeset
52 // { dg-final { scan-assembler "__imp\[_\]*__ZN2D2C2ERKS_" } }
kono
parents:
diff changeset
53 // { dg-final { scan-assembler-not "__imp\[_\]*__ZN2D1C2ERKS_" } }