brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 4cc86dc Raw
49 lines · cpp
1// Build a library with origin tracking and an executable w/o origin tracking.2// Test that origin tracking is enabled at runtime.3// RUN: %clangxx_msan -fsanitize-memory-track-origins -O0 %s -DBUILD_SO -fPIC -shared -o %t-so.so4// RUN: %clangxx_msan -O0 %s %t-so.so -o %t && not %run %t 2>&1 | FileCheck %s5 6#ifdef BUILD_SO7 8#include <stdlib.h>9 10extern "C" {11void my_access(int *p) {12  volatile int tmp;13  // Force initialize-ness check.14  if (*p)15    tmp = 1;16}17 18void *my_alloc(unsigned sz) {19  return malloc(sz);20}21}  // extern "C"22 23#else  // BUILD_SO24 25#include <stdlib.h>26 27extern "C" {28void my_access(int *p);29void *my_alloc(unsigned sz);30}31 32int main(int argc, char **argv) {33  int *x = (int *)my_alloc(sizeof(int));34  my_access(x);35  delete x;36 37  // CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value38  // CHECK: {{#0 0x.* in my_access .*dso-origin.cpp:}}39  // CHECK: {{#1 0x.* in main .*dso-origin.cpp:}}[[@LINE-5]]40  // CHECK: Uninitialized value was created by a heap allocation41  // CHECK: {{#0 0x.* in .*malloc}}42  // CHECK: {{#1 0x.* in my_alloc .*dso-origin.cpp:}}43  // CHECK: {{#2 0x.* in main .*dso-origin.cpp:}}[[@LINE-10]]44  // CHECK: SUMMARY: MemorySanitizer: use-of-uninitialized-value {{.*dso-origin.cpp:.* my_access}}45  return 0;46}47 48#endif  // BUILD_SO49