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