49 lines · cpp
1// RUN: %clangxx_asan -O0 %s -o %t -mllvm -asan-detect-invalid-pointer-pair2 3// RUN: %env_asan_opts=detect_invalid_pointer_pairs=2:halt_on_error=0 %run %t 2>&1 | FileCheck %s4// XFAIL: msvc5#include <assert.h>6#include <stdlib.h>7 8int foo(char *p, char *q) {9 return p - q;10}11 12char global1[100] = {}, global2[100] = {};13 14int main() {15 // Heap allocated memory.16 char *heap1 = (char *)malloc(42);17 char *heap2 = (char *)malloc(42);18 19 // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair20 // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-subtract-errors.cpp:[[@LINE+1]]21 foo(heap1, heap2);22 23 // Global variables.24 // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair25 // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-subtract-errors.cpp:[[@LINE+1]]26 foo(&global1[0], &global2[10]);27 28 // Stack variables.29 char stack1, stack2;30 // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair31 // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-subtract-errors.cpp:[[@LINE+1]]32 foo(&stack1, &stack2);33 34 // Mixtures.35 // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair36 // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-subtract-errors.cpp:[[@LINE+1]]37 foo(heap1, &stack1);38 // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair39 // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-subtract-errors.cpp:[[@LINE+1]]40 foo(heap1, &global1[0]);41 // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair42 // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-subtract-errors.cpp:[[@LINE+1]]43 foo(&stack1, &global1[0]);44 45 free(heap1);46 free(heap2);47 return 0;48}49