brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 80742cd Raw
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