1*7c3d14c8STreehugger Robot // RUN: %clangxx_asan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s 2*7c3d14c8STreehugger Robot 3*7c3d14c8STreehugger Robot #include <string.h> 4*7c3d14c8STreehugger Robot 5*7c3d14c8STreehugger Robot namespace XXX { 6*7c3d14c8STreehugger Robot struct YYY { ZZZXXX::YYY7*7c3d14c8STreehugger Robot static int ZZZ(int x) { 8*7c3d14c8STreehugger Robot char array[10]; 9*7c3d14c8STreehugger Robot memset(array, 0, 10); 10*7c3d14c8STreehugger Robot return array[x]; // BOOOM 11*7c3d14c8STreehugger Robot // CHECK: ERROR: AddressSanitizer: stack-buffer-overflow 12*7c3d14c8STreehugger Robot // CHECK: READ of size 1 at 13*7c3d14c8STreehugger Robot // CHECK: is located in stack of thread T0 at offset 14*7c3d14c8STreehugger Robot // CHECK: XXX::YYY::ZZZ 15*7c3d14c8STreehugger Robot } 16*7c3d14c8STreehugger Robot }; 17*7c3d14c8STreehugger Robot } // namespace XXX 18*7c3d14c8STreehugger Robot main(int argc,char ** argv)19*7c3d14c8STreehugger Robotint main(int argc, char **argv) { 20*7c3d14c8STreehugger Robot int res = XXX::YYY::ZZZ(argc + 10); 21*7c3d14c8STreehugger Robot return res; 22*7c3d14c8STreehugger Robot } 23