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