Index: lib/tsan/rtl/tsan_rtl_report.cc =================================================================== --- lib/tsan/rtl/tsan_rtl_report.cc +++ lib/tsan/rtl/tsan_rtl_report.cc @@ -25,6 +25,7 @@ #include "tsan_mman.h" #include "tsan_flags.h" #include "tsan_fd.h" +#include "llvm/Support/Compiler.h" namespace __tsan { @@ -680,6 +681,12 @@ PrintStack(SymbolizeStack(trace)); } +// Always inlining PrintCurrentStackSlow, because LocatePcInTrace assumes +// __sanitizer_print_stack_trace exists in the actual unwinded stack, but +// tail-call to PrintCurrentStackSlow breaks this assumption because +// __sanitizer_print_stack_trace disappears after tail-call. +// See PR27280 comment 1~3 for examples. +LLVM_ATTRIBUTE_ALWAYS_INLINE void PrintCurrentStackSlow(uptr pc) { #ifndef SANITIZER_GO BufferedStackTrace *ptrace =