1*9ab84eeaSChris Fallin #include <stdio.h>
2*9ab84eeaSChris Fallin #include <wizer.h>
3*9ab84eeaSChris Fallin 
4*9ab84eeaSChris Fallin class Test {
5*9ab84eeaSChris Fallin   public:
6*9ab84eeaSChris Fallin     Test() : value(1) {
7*9ab84eeaSChris Fallin         printf(
8*9ab84eeaSChris Fallin             "global constructor (should be the first printed line)\n");
9*9ab84eeaSChris Fallin     }
10*9ab84eeaSChris Fallin     ~Test() {
11*9ab84eeaSChris Fallin         printf("global destructor (should be the last printed line)\n");
12*9ab84eeaSChris Fallin     }
13*9ab84eeaSChris Fallin     int value;
14*9ab84eeaSChris Fallin };
15*9ab84eeaSChris Fallin 
16*9ab84eeaSChris Fallin bool initialized = false;
17*9ab84eeaSChris Fallin int orig_value = 0;
18*9ab84eeaSChris Fallin Test t;
19*9ab84eeaSChris Fallin 
20*9ab84eeaSChris Fallin static void init_func() {
21*9ab84eeaSChris Fallin     // This should run after the ctor for `t`, and before `main`.
22*9ab84eeaSChris Fallin     orig_value = t.value;
23*9ab84eeaSChris Fallin     t.value = 2;
24*9ab84eeaSChris Fallin     initialized = true;
25*9ab84eeaSChris Fallin }
26*9ab84eeaSChris Fallin 
27*9ab84eeaSChris Fallin WIZER_INIT(init_func);
28*9ab84eeaSChris Fallin 
29*9ab84eeaSChris Fallin int main(int argc, char** argv) {
30*9ab84eeaSChris Fallin     if (!initialized) init_func();
31*9ab84eeaSChris Fallin     printf("argc (should not be baked into snapshot): %d\n", argc);
32*9ab84eeaSChris Fallin     printf("orig_value (should be 1): %d\n", orig_value);
33*9ab84eeaSChris Fallin     printf("t.value (should be 2): %d\n", t.value);
34*9ab84eeaSChris Fallin }
35