1d21b3d34SFangrui Song // RUN: %clangxx_msan -O0 %s -o %t && %run %t 2d21b3d34SFangrui Song 3d21b3d34SFangrui Song #include <assert.h> 4d21b3d34SFangrui Song #include <execinfo.h> 5d21b3d34SFangrui Song #include <stdio.h> 6d21b3d34SFangrui Song #include <string.h> 7d21b3d34SFangrui Song #include <stdlib.h> 8d21b3d34SFangrui Song 9d21b3d34SFangrui Song __attribute__((noinline)) f()10d21b3d34SFangrui Songvoid f() { 11d21b3d34SFangrui Song void *buf[10]; 12d21b3d34SFangrui Song int sz = backtrace(buf, sizeof(buf) / sizeof(*buf)); 13d21b3d34SFangrui Song assert(sz > 0); 14d21b3d34SFangrui Song for (int i = 0; i < sz; ++i) 15*921009e6SIlya Leoshkevich if (!buf[i]) { 16*921009e6SIlya Leoshkevich #if defined(__s390x__) 17*921009e6SIlya Leoshkevich // backtrace() may return a bogus trailing NULL on s390x. 18*921009e6SIlya Leoshkevich if (i == sz - 1) 19*921009e6SIlya Leoshkevich continue; 20*921009e6SIlya Leoshkevich #endif 21d21b3d34SFangrui Song exit(1); 22*921009e6SIlya Leoshkevich } 23d21b3d34SFangrui Song char **s = backtrace_symbols(buf, sz); 24d21b3d34SFangrui Song assert(s != 0); 25d21b3d34SFangrui Song for (int i = 0; i < sz; ++i) 26d21b3d34SFangrui Song printf("%d\n", (int)strlen(s[i])); 27d21b3d34SFangrui Song } 28d21b3d34SFangrui Song main(void)29d21b3d34SFangrui Songint main(void) { 30d21b3d34SFangrui Song f(); 31d21b3d34SFangrui Song return 0; 32d21b3d34SFangrui Song } 33