1 // Test dedup_token_length 2 // RUN: %clangxx -O0 %s -o %t 3 // RUN: env %tool_options='abort_on_error=0' not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK0 4 // RUN: env %tool_options='abort_on_error=0, dedup_token_length=0' not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK0 5 // RUN: env %tool_options='abort_on_error=0, dedup_token_length=1' not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK1 6 // RUN: env %tool_options='abort_on_error=0, dedup_token_length=2' not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK2 7 // RUN: env %tool_options='abort_on_error=0, dedup_token_length=3' not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK3 8 9 // REQUIRES: stable-runtime 10 // FIXME: implement SEGV handler in other sanitizers, not just asan. 11 // XFAIL: msan 12 // XFAIL: lsan 13 // XFAIL: tsan 14 15 volatile int *null = 0; 16 17 namespace Xyz { 18 template<class A, class B> void Abc() { 19 *null = 0; 20 } 21 } 22 23 extern "C" void bar() { 24 Xyz::Abc<int, int>(); 25 } 26 27 void FOO() { 28 bar(); 29 } 30 31 int main(int argc, char **argv) { 32 FOO(); 33 } 34 35 // CHECK0-NOT: DEDUP_TOKEN: 36 // CHECK1: DEDUP_TOKEN: void Xyz::Abc<int, int>() 37 // CHECK1-NOT: bar 38 // CHECK2: DEDUP_TOKEN: void Xyz::Abc<int, int>()--bar 39 // CHECK2-NOT: FOO 40 // CHECK3: DEDUP_TOKEN: void Xyz::Abc<int, int>()--bar--FOO() 41