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 Song void 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 Song int main(void) {
30d21b3d34SFangrui Song   f();
31d21b3d34SFangrui Song   return 0;
32d21b3d34SFangrui Song }
33