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 Weberint main() { 2956eb8dcfSPaul Kirth // CHECK: {{vector<.*vector<.*vector<.*vector<.*vector<}} 3074989affSNico Weber A<10>().RecursiveTemplateFunction(0); 3174989affSNico Weber } 32