19ab84eeaSChris Fallin #include <stdio.h>
29ab84eeaSChris Fallin #include <wizer.h>
39ab84eeaSChris Fallin 
49ab84eeaSChris Fallin class Test {
59ab84eeaSChris Fallin public:
Test()69ab84eeaSChris Fallin   Test() : value(1) {
7*19c3380bSAlex Crichton     printf("global constructor (should be the first printed line)\n");
89ab84eeaSChris Fallin   }
~Test()9*19c3380bSAlex Crichton   ~Test() { printf("global destructor (should be the last printed line)\n"); }
109ab84eeaSChris Fallin   int value;
119ab84eeaSChris Fallin };
129ab84eeaSChris Fallin 
139ab84eeaSChris Fallin bool initialized = false;
149ab84eeaSChris Fallin int orig_value = 0;
159ab84eeaSChris Fallin Test t;
169ab84eeaSChris Fallin 
init_func()179ab84eeaSChris Fallin static void init_func() {
189ab84eeaSChris Fallin   // This should run after the ctor for `t`, and before `main`.
199ab84eeaSChris Fallin   orig_value = t.value;
209ab84eeaSChris Fallin   t.value = 2;
219ab84eeaSChris Fallin   initialized = true;
229ab84eeaSChris Fallin }
239ab84eeaSChris Fallin 
249ab84eeaSChris Fallin WIZER_INIT(init_func);
259ab84eeaSChris Fallin 
main(int argc,char ** argv)269ab84eeaSChris Fallin int main(int argc, char **argv) {
27*19c3380bSAlex Crichton   if (!initialized)
28*19c3380bSAlex Crichton     init_func();
299ab84eeaSChris Fallin   printf("argc (should not be baked into snapshot): %d\n", argc);
309ab84eeaSChris Fallin   printf("orig_value (should be 1): %d\n", orig_value);
319ab84eeaSChris Fallin   printf("t.value (should be 2): %d\n", t.value);
329ab84eeaSChris Fallin }
33