1 /* { dg-do link } */ 2 /* { dg-require-dll "" } */ 3 /* { dg-additional-sources "dll-12a.c" } */ 4 /* { dg-options "-w -O2 -std=gnu99 -fkeep-inline-dllexport" } */ 5 6 /* Test that inline functions declared "dllexport" appear in object files, 7 even if they are not called, when -fkeep-inline-dllexport is supplied. 8 9 This behavior is required by the ARM C++ ABI: 10 11 Exporting a function that can be inlined should force the 12 creation and export of an out-of-line copy of it. 13 14 and should presumably also apply. 15 16 Visual Studio 2005 also honors that rule. */ 17 i1()18__declspec(dllexport) inline void i1() {} 19 e1()20__declspec(dllexport) extern inline void e1() {} 21 22 /* It is invalid to declare the function inline after its definition. */ 23 #if 0 24 __declspec(dllexport) void i2() {} 25 inline void i2(); 26 27 __declspec(dllexport) extern void e2() {} 28 inline void e2(); 29 #endif 30 i3()31__declspec(dllexport) inline void i3() {} 32 void i3(); 33 e3()34__declspec(dllexport) inline void e3() {} 35 extern void e3(); 36 37 __declspec(dllexport) void i4(); i4()38inline void i4() {}; 39 40 __declspec(dllexport) extern void e4(); e4()41inline void e4() {}; 42 43 __declspec(dllexport) inline void i5(); i5()44void i5() {}; 45 46 __declspec(dllexport) inline void e5(); e5()47extern void e5() {}; 48 49 /* Make sure that just declaring the function -- without defining it 50 -- does not cause errors. */ 51 __declspec(dllexport) inline void i6(); 52 __declspec(dllexport) extern inline void e6(); 53