125b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: %clangxx_msan -m64 -O0 %s -o %t && not %run %t >%t.out 2>&1 225b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: FileCheck %s < %t.out 325b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: %clangxx_msan -m64 -O1 %s -o %t && not %run %t >%t.out 2>&1 425b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: FileCheck %s < %t.out 525b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: %clangxx_msan -m64 -O2 %s -o %t && not %run %t >%t.out 2>&1 625b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: FileCheck %s < %t.out 725b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: %clangxx_msan -m64 -O3 %s -o %t && not %run %t >%t.out 2>&1 825b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: FileCheck %s < %t.out 925b3c049e70834cf33790a28643ab058b507b35cBen Cheng 1025b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: %clangxx_msan -fsanitize-memory-track-origins -m64 -O0 %s -o %t && not %run %t >%t.out 2>&1 1125b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: FileCheck %s < %t.out && FileCheck %s --check-prefix=CHECK-ORIGINS < %t.out 1225b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: %clangxx_msan -fsanitize-memory-track-origins -m64 -O1 %s -o %t && not %run %t >%t.out 2>&1 1325b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: FileCheck %s < %t.out && FileCheck %s --check-prefix=CHECK-ORIGINS < %t.out 1425b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: %clangxx_msan -fsanitize-memory-track-origins -m64 -O2 %s -o %t && not %run %t >%t.out 2>&1 1525b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: FileCheck %s < %t.out && FileCheck %s --check-prefix=CHECK-ORIGINS < %t.out 1625b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: %clangxx_msan -fsanitize-memory-track-origins -m64 -O3 %s -o %t && not %run %t >%t.out 2>&1 1725b3c049e70834cf33790a28643ab058b507b35cBen Cheng// RUN: FileCheck %s < %t.out && FileCheck %s --check-prefix=CHECK-ORIGINS < %t.out 1825b3c049e70834cf33790a28643ab058b507b35cBen Cheng 1925b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include <sanitizer/msan_interface.h> 2025b3c049e70834cf33790a28643ab058b507b35cBen Cheng#include <stdlib.h> 2125b3c049e70834cf33790a28643ab058b507b35cBen Cheng 2225b3c049e70834cf33790a28643ab058b507b35cBen Chengint main(int argc, char **argv) { 2325b3c049e70834cf33790a28643ab058b507b35cBen Cheng int *volatile p = (int *)malloc(sizeof(int)); 2425b3c049e70834cf33790a28643ab058b507b35cBen Cheng 2525b3c049e70834cf33790a28643ab058b507b35cBen Cheng __msan_check_mem_is_initialized(p, sizeof(*p)); 2625b3c049e70834cf33790a28643ab058b507b35cBen Cheng // CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value 2725b3c049e70834cf33790a28643ab058b507b35cBen Cheng // CHECK: {{#0 0x.* in main .*check_mem_is_initialized.cc:}}[[@LINE-2]] 2825b3c049e70834cf33790a28643ab058b507b35cBen Cheng 2925b3c049e70834cf33790a28643ab058b507b35cBen Cheng // CHECK-ORIGINS: Uninitialized value was created by a heap allocation 3025b3c049e70834cf33790a28643ab058b507b35cBen Cheng // CHECK-ORIGINS: {{#0 0x.* in .*malloc}} 3125b3c049e70834cf33790a28643ab058b507b35cBen Cheng // CHECK-ORIGINS: {{#1 0x.* in main .*check_mem_is_initialized.cc:}}[[@LINE-8]] 3225b3c049e70834cf33790a28643ab058b507b35cBen Cheng return 0; 3325b3c049e70834cf33790a28643ab058b507b35cBen Cheng} 3425b3c049e70834cf33790a28643ab058b507b35cBen Cheng