1*7c3d14c8STreehugger Robot // RUN: %clangxx_msan -O0 %s -o %t && %run %t 2*7c3d14c8STreehugger Robot 3*7c3d14c8STreehugger Robot #include <assert.h> 4*7c3d14c8STreehugger Robot #include <execinfo.h> 5*7c3d14c8STreehugger Robot #include <stdio.h> 6*7c3d14c8STreehugger Robot #include <string.h> 7*7c3d14c8STreehugger Robot #include <stdlib.h> 8*7c3d14c8STreehugger Robot 9*7c3d14c8STreehugger Robot __attribute__((noinline)) f()10*7c3d14c8STreehugger Robotvoid f() { 11*7c3d14c8STreehugger Robot void *buf[10]; 12*7c3d14c8STreehugger Robot int sz = backtrace(buf, sizeof(buf) / sizeof(*buf)); 13*7c3d14c8STreehugger Robot assert(sz > 0); 14*7c3d14c8STreehugger Robot for (int i = 0; i < sz; ++i) 15*7c3d14c8STreehugger Robot if (!buf[i]) 16*7c3d14c8STreehugger Robot exit(1); 17*7c3d14c8STreehugger Robot char **s = backtrace_symbols(buf, sz); 18*7c3d14c8STreehugger Robot assert(s > 0); 19*7c3d14c8STreehugger Robot for (int i = 0; i < sz; ++i) 20*7c3d14c8STreehugger Robot printf("%d\n", (int)strlen(s[i])); 21*7c3d14c8STreehugger Robot } 22*7c3d14c8STreehugger Robot main(void)23*7c3d14c8STreehugger Robotint main(void) { 24*7c3d14c8STreehugger Robot f(); 25*7c3d14c8STreehugger Robot return 0; 26*7c3d14c8STreehugger Robot } 27