insertvalue_origin.cc revision 7c9150579ed0278492f51cc8434b1d63a44b9bd1
1// RUN: %clangxx_msan -fsanitize-memory-track-origins -O0 %s -o %t && not %run %t >%t.out 2>&1 2// RUN: FileCheck %s < %t.out && FileCheck %s < %t.out 3// RUN: %clangxx_msan -fsanitize-memory-track-origins -O3 %s -o %t && not %run %t >%t.out 2>&1 4// RUN: FileCheck %s < %t.out && FileCheck %s < %t.out 5 6// Test origin propagation through insertvalue IR instruction. 7 8#include <stdio.h> 9#include <stdint.h> 10 11struct mypair { 12 int64_t x; 13 int y; 14}; 15 16mypair my_make_pair(int64_t x, int y) { 17 mypair p; 18 p.x = x; 19 p.y = y; 20 return p; 21} 22 23int main() { 24 int64_t * volatile p = new int64_t; 25 mypair z = my_make_pair(*p, 0); 26 if (z.x) 27 printf("zzz\n"); 28 // CHECK: MemorySanitizer: use-of-uninitialized-value 29 // CHECK: {{in main .*insertvalue_origin.cc:}}[[@LINE-3]] 30 31 // CHECK: Uninitialized value was created by a heap allocation 32 // CHECK: {{in main .*insertvalue_origin.cc:}}[[@LINE-8]] 33 delete p; 34 return 0; 35} 36