| // EXTRA_SOURCES: imports/ice10086y.d |
| // EXTRA_SOURCES: imports/ice10086x.d |
| |
| import imports.ice10086y; |
| import imports.ice10086x; |
| |
| void main() { test(); } |
| |
| static if (0) |
| { |
| /* this is a reduced one-file version that triggers a seg fault |
| because the use of OPframeptr gets inlined, and the offests |
| to it are not updated. |
| Compile with: -O -inline |
| */ |
| |
| pragma(inline, false) |
| auto bind(alias f, bindValues...)() |
| { |
| pragma(inline, false) |
| auto bind(Types...)(Types values) |
| { |
| return f(bindValues, values); |
| } |
| return bind(); |
| } |
| |
| |
| struct SS |
| { |
| int a1 = 123; |
| } |
| |
| pragma(inline, false) |
| @safe auto ff(SS rr) |
| { |
| return rr; |
| } |
| |
| // pragma(inline, false) |
| @safe auto gg(SS ss) // this getting inlined triggers the problem |
| { |
| return bind!(ff, ss); |
| } |
| |
| pragma(inline, false) |
| void test() |
| { |
| SS s1; |
| |
| auto zb = bind!(gg, s1)(); |
| assert(zb.a1 == 123); |
| } |
| |
| |
| void main() { test(); } |
| } |