1*1601879fSAlexander Shaposhnikov // RUN: %clangxx_nsan -O2 %s -o %t 2*1601879fSAlexander Shaposhnikov // RUN: %run %t 2>&1 | FileCheck %s 3*1601879fSAlexander Shaposhnikov 4*1601879fSAlexander Shaposhnikov #include <cstring> 5*1601879fSAlexander Shaposhnikov #include <iostream> 6*1601879fSAlexander Shaposhnikov 7*1601879fSAlexander Shaposhnikov extern "C" void __nsan_dump_shadow_mem(const char *addr, size_t size_bytes, 8*1601879fSAlexander Shaposhnikov size_t bytes_per_line, size_t reserved); 9*1601879fSAlexander Shaposhnikov 10*1601879fSAlexander Shaposhnikov int main() { 11*1601879fSAlexander Shaposhnikov // Define a C-style string with commas as delimiters 12*1601879fSAlexander Shaposhnikov char input[] = "apple,banana,cherry,date"; 13*1601879fSAlexander Shaposhnikov char *token; 14*1601879fSAlexander Shaposhnikov char *rest = input; // Pointer to keep track of the rest of the string 15*1601879fSAlexander Shaposhnikov 16*1601879fSAlexander Shaposhnikov // Tokenize the string using strsep 17*1601879fSAlexander Shaposhnikov while ((token = strsep(&rest, ",")) != NULL) { 18*1601879fSAlexander Shaposhnikov std::cout << token << std::endl; 19*1601879fSAlexander Shaposhnikov } 20*1601879fSAlexander Shaposhnikov 21*1601879fSAlexander Shaposhnikov __nsan_dump_shadow_mem(&input[5], 1, 1, 0); 22*1601879fSAlexander Shaposhnikov // CHECK: 0x{{[a-f0-9]*}}: _ 23*1601879fSAlexander Shaposhnikov return 0; 24*1601879fSAlexander Shaposhnikov } 25