diff --git a/test/lib.h b/test/lib.h index d1ef9d3..08c1c66 100644 --- a/test/lib.h +++ b/test/lib.h @@ -1,6 +1,27 @@ #pragma once #include +struct Reg { + int r_; + Reg(int r) : r_(r) {} +}; + +inline const Reg& getReg0() { static const Reg r(0); return r; } +inline const Reg& getReg1() { static const Reg r(1); return r; } +inline const Reg& getReg2() { static const Reg r(2); return r; } + +static const Reg& r0 = getReg0(); +static const Reg& r1 = getReg1(); +static const Reg& r2 = getReg2(); + +inline void putReg() +{ + puts("putReg"); + printf("r0=%p, %d\n", &r0, r0.r_); + printf("r0=%p, %d\n", &r0, r1.r_); + printf("r0=%p, %d\n", &r0, r2.r_); +} + struct A { int a; A() @@ -30,11 +51,13 @@ typedef XT<0> X; void init(); -static struct Init { +struct Init { Init() { puts("Init"); init(); + putReg(); } -} s_init; +}; +static Init s_init; diff --git a/test/lib_min.cpp b/test/lib_min.cpp index a0e9223..1662bfc 100644 --- a/test/lib_min.cpp +++ b/test/lib_min.cpp @@ -1,5 +1,9 @@ #include +static const struct XXX { + XXX() { puts("XXX"); } +} s_sss; + struct A { int aaa; A() @@ -35,9 +39,13 @@ static struct Init { } } s_init; +int f() { puts("f"); return 4; } + +static const int r = f(); int main() { puts("main"); + printf("r=%d\n", r); X::sss.put(); } diff --git a/test/lib_run.cpp b/test/lib_run.cpp index 459092a..18c29f3 100644 --- a/test/lib_run.cpp +++ b/test/lib_run.cpp @@ -4,5 +4,6 @@ int main() { puts("main"); X::a.put(); + putReg(); } diff --git a/test/lib_test.cpp b/test/lib_test.cpp index dc7eee1..c111f7c 100644 --- a/test/lib_test.cpp +++ b/test/lib_test.cpp @@ -7,6 +7,7 @@ void init() if (!init) return; init = false; X::a.put(); + putReg(); }