xref: /llvm-project/compiler-rt/test/sanitizer_common/TestCases/symbolize_stack.cpp (revision 62a71cc5ef3f4286fe9bb325971913b507797094)
174989affSNico Weber // RUN: %clangxx -O0 %s -o %t && %run %t 2>&1 | FileCheck %s
274989affSNico Weber 
374989affSNico Weber // Test that symbolizer does not crash on frame with large function name.
474989affSNico Weber 
574989affSNico Weber // On Darwin LSan reports a false positive
6*62a71cc5SJulian Lettner // UNSUPPORTED: darwin && lsan
774989affSNico Weber 
874989affSNico Weber #include <sanitizer/common_interface_defs.h>
974989affSNico Weber #include <vector>
1074989affSNico Weber 
1174989affSNico Weber template <int N> struct A {
1274989affSNico Weber   template <class T> void RecursiveTemplateFunction(const T &t);
1374989affSNico Weber };
1474989affSNico Weber 
1574989affSNico Weber template <int N>
1674989affSNico Weber template <class T>
RecursiveTemplateFunction(const T &)1774989affSNico Weber __attribute__((noinline)) void A<N>::RecursiveTemplateFunction(const T &) {
1874989affSNico Weber   std::vector<T> t;
1974989affSNico Weber   return A<N - 1>().RecursiveTemplateFunction(t);
2074989affSNico Weber }
2174989affSNico Weber 
2274989affSNico Weber template <>
2374989affSNico Weber template <class T>
RecursiveTemplateFunction(const T &)2474989affSNico Weber __attribute__((noinline)) void A<0>::RecursiveTemplateFunction(const T &) {
2574989affSNico Weber   __sanitizer_print_stack_trace();
2674989affSNico Weber }
2774989affSNico Weber 
main()2874989affSNico Weber int main() {
2956eb8dcfSPaul Kirth   // CHECK: {{vector<.*vector<.*vector<.*vector<.*vector<}}
3074989affSNico Weber   A<10>().RecursiveTemplateFunction(0);
3174989affSNico Weber }
32