1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
module inputs.inlinables;
import ldc.attributes;
extern (C): // simplify mangling for easier function name matching
int easily_inlinable(int i)
{
if (i > 0)
return easily_inlinable(i - 1);
return 2;
}
pragma(inline, false) int never_inline()
{
return 1;
}
@weak int external()
{
return 1;
}
pragma(inline, true) int always_inline()
{
int a;
foreach (i; 1 .. 10)
{
foreach (ii; 1 .. 10)
{
foreach (iii; 1 .. 10)
{
a += i * external();
}
}
}
return a;
}
pragma(inline, true) int always_inline_chain0()
{
return always_inline_chain1();
}
pragma(inline, true) int always_inline_chain1()
{
return always_inline_chain2();
}
pragma(inline, true) int always_inline_chain2()
{
return 345;
}
class A
{
int virtual_func()
{
return 12345;
}
pragma(inline, true) final int final_func()
{
return virtual_func();
}
final int final_class_function()
{
return 12345;
}
}
// Weak-linkage functions can not be inlined.
@weak int weak_function()
{
return 654;
}
int module_variable = 666;
pragma(inline, true) void write_module_variable(int i)
{
module_variable = i;
}
pragma(inline, true) void write_function_static_variable(int i)
{
static int static_func_var = 5;
static_func_var = i;
}
pragma(inline, true) auto get_typeid_A()
{
return typeid(A);
}
pragma(inline, true) int call_template_foo(int i)
{
return template_foo(i);
}
pragma(inline, true) T template_foo(T)(T i)
{
return i;
}
void call_enforce_with_default_template_params()
{
import std.exception;
enforce(true, { assert(0); });
}
|