1*7c3d14c8STreehugger Robot // Test that stack of main thread is included in the root set. 2*7c3d14c8STreehugger Robot // RUN: LSAN_BASE="report_objects=1:use_registers=0" 3*7c3d14c8STreehugger Robot // RUN: %clangxx_lsan %s -o %t 4*7c3d14c8STreehugger Robot // RUN: LSAN_OPTIONS=$LSAN_BASE:"use_stacks=0" not %run %t 2>&1 | FileCheck %s 5*7c3d14c8STreehugger Robot // RUN: LSAN_OPTIONS=$LSAN_BASE:"use_stacks=1" %run %t 2>&1 6*7c3d14c8STreehugger Robot // RUN: LSAN_OPTIONS="" %run %t 2>&1 7*7c3d14c8STreehugger Robot 8*7c3d14c8STreehugger Robot #include <stdio.h> 9*7c3d14c8STreehugger Robot #include <stdlib.h> 10*7c3d14c8STreehugger Robot main()11*7c3d14c8STreehugger Robotint main() { 12*7c3d14c8STreehugger Robot void *stack_var = malloc(1337); 13*7c3d14c8STreehugger Robot fprintf(stderr, "Test alloc: %p.\n", stack_var); 14*7c3d14c8STreehugger Robot // Do not return from main to prevent the pointer from going out of scope. 15*7c3d14c8STreehugger Robot exit(0); 16*7c3d14c8STreehugger Robot } 17*7c3d14c8STreehugger Robot // CHECK: Test alloc: [[ADDR:.*]]. 18*7c3d14c8STreehugger Robot // CHECK: LeakSanitizer: detected memory leaks 19*7c3d14c8STreehugger Robot // CHECK: [[ADDR]] (1337 bytes) 20*7c3d14c8STreehugger Robot // CHECK: SUMMARY: {{(Leak|Address)}}Sanitizer: 21