78 lines · c
1// RUN: %clang_cc1 -fsyntax-only -verify %s2// RUN: %clang_cc1 -fsyntax-only -fwrapv-pointer -verify=fwrapv %s3 4// fwrapv-no-diagnostics5 6int add_ptr_idx_ult_ptr(const char *ptr, unsigned index) {7 return ptr + index < ptr; // expected-warning {{pointer comparison always evaluates to false}}8}9 10int add_idx_ptr_ult_ptr(const char *ptr, unsigned index) {11 return index + ptr < ptr; // expected-warning {{pointer comparison always evaluates to false}}12}13 14int ptr_ugt_add_ptr_idx(const char *ptr, unsigned index) {15 return ptr > ptr + index; // expected-warning {{pointer comparison always evaluates to false}}16}17 18int ptr_ugt_add_idx_ptr(const char *ptr, unsigned index) {19 return ptr > index + ptr; // expected-warning {{pointer comparison always evaluates to false}}20}21 22int add_ptr_idx_uge_ptr(const char *ptr, unsigned index) {23 return ptr + index >= ptr; // expected-warning {{pointer comparison always evaluates to true}}24}25 26int add_idx_ptr_uge_ptr(const char *ptr, unsigned index) {27 return index + ptr >= ptr; // expected-warning {{pointer comparison always evaluates to true}}28}29 30int ptr_ule_add_ptr_idx(const char *ptr, unsigned index) {31 return ptr <= ptr + index; // expected-warning {{pointer comparison always evaluates to true}}32}33 34int ptr_ule_add_idx_ptr(const char *ptr, unsigned index) {35 return ptr <= index + ptr; // expected-warning {{pointer comparison always evaluates to true}}36}37 38int add_ptr_idx_ult_ptr_array(unsigned index) {39 char ptr[10];40 return ptr + index < ptr; // expected-warning {{pointer comparison always evaluates to false}}41}42 43// Negative tests with wrong predicate.44 45int add_ptr_idx_ule_ptr(const char *ptr, unsigned index) {46 return ptr + index <= ptr;47}48 49int add_ptr_idx_ugt_ptr(const char *ptr, unsigned index) {50 return ptr + index > ptr;51}52 53int ptr_uge_add_idx_ptr(const char *ptr, unsigned index) {54 return ptr >= index + ptr;55}56 57int ptr_ult_add_idx_ptr(const char *ptr, unsigned index) {58 return ptr < index + ptr;59}60 61// Negative test with signed index.62 63int add_ptr_idx_ult_ptr_signed(const char *ptr, int index) {64 return ptr + index < ptr;65}66 67// Negative test with unrelated pointers. 68 69int add_ptr_idx_ult_ptr2(const char *ptr, const char *ptr2, unsigned index) {70 return ptr + index < ptr2;71}72 73// Negative test with non-pointer operands.74 75int add_ptr_idx_ult_ptr_not_pointer(unsigned ptr, unsigned index) {76 return ptr + index < ptr;77}78