brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 84c264b Raw
108 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] = {};13char __attribute__((used)) smallest_global[5] = {};14char small_global[7] = {};15char __attribute__((used)) little_global[10] = {};16char __attribute__((used)) medium_global[4000] = {};17char large_global[5000] = {};18char __attribute__((used)) largest_global[6000] = {};19 20int main() {21  // Heap allocated memory.22  char *heap1 = (char *)malloc(42);23  char *heap2 = (char *)malloc(42);24 25  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair26  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]27  foo(heap1, heap2);28  free(heap1);29  free(heap2);30 31  heap1 = (char *)malloc(1024);32  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair33  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]34  foo(heap1, heap1 + 1025);35  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair36  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]37  foo(heap1 + 1024, heap1 + 1025);38  free(heap1);39 40  heap1 = (char *)malloc(4096);41  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair42  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]43  foo(heap1, heap1 + 4097);44  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair45  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]46  foo(heap1, 0);47 48  // Global variables.49  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair50  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]51  foo(&global1[0], &global2[10]);52 53  char *p = &small_global[0];54  foo(p, p); // OK55  foo(p, p + 7); // OK56  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair57  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]58  foo(p, p + 8);59  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair60  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]61  foo(p - 1, p);62  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair63  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]64  foo(p, p - 1);65  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair66  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]67  foo(p - 1, p + 8);68 69  p = &large_global[0];70  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair71  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]72  foo(p - 1, p);73  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair74  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]75  foo(p, p - 1);76  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair77  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]78  foo(p, &global1[0]);79  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair80  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]81  foo(p, &small_global[0]);82  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair83  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]84  foo(p, 0);85 86  // Stack variables.87  char stack1, stack2;88  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair89  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]90  foo(&stack1, &stack2);91 92  // Mixtures.93  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair94  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]95  foo(heap1, &stack1);96  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair97  foo(heap1, &global1[0]);98  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair99  foo(&stack1, &global1[0]);100  // CHECK: ERROR: AddressSanitizer: invalid-pointer-pair101  // CHECK: #{{[0-9]+ .*}} in main {{.*}}invalid-pointer-pairs-compare-errors.cpp:[[@LINE+1]]102  foo(&stack1, 0);103 104  free(heap1);105 106  return 0;107}108