1*d21b3d34SFangrui Song // RUN: %clangxx_msan -fsanitize-memory-track-origins -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s 2*d21b3d34SFangrui Song // RUN: %clangxx_msan -fsanitize-memory-track-origins -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s 3*d21b3d34SFangrui Song // RUN: %clangxx_msan -fsanitize-memory-track-origins -O2 %s -o %t && not %run %t 2>&1 | FileCheck %s 4*d21b3d34SFangrui Song 5*d21b3d34SFangrui Song // Test condition origin propagation through "select" IR instruction. 6*d21b3d34SFangrui Song 7*d21b3d34SFangrui Song #include <stdio.h> 8*d21b3d34SFangrui Song #include <stdint.h> 9*d21b3d34SFangrui Song 10*d21b3d34SFangrui Song __attribute__((noinline)) max_by_ptr(int * a,int * b)11*d21b3d34SFangrui Songint *max_by_ptr(int *a, int *b) { 12*d21b3d34SFangrui Song return *a < *b ? b : a; 13*d21b3d34SFangrui Song } 14*d21b3d34SFangrui Song main(void)15*d21b3d34SFangrui Songint main(void) { 16*d21b3d34SFangrui Song int x; 17*d21b3d34SFangrui Song int *volatile px = &x; 18*d21b3d34SFangrui Song int y = 43; 19*d21b3d34SFangrui Song int *p = max_by_ptr(px, &y); 20*d21b3d34SFangrui Song // CHECK: Uninitialized value was created by an allocation of 'x' in the stack frame of function 'main' 21*d21b3d34SFangrui Song return *p; 22*d21b3d34SFangrui Song } 23