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