1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -fsyntax-only -verify %s 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinestypedef __SIZE_TYPE__ size_t; 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" void *memset(void *, int, size_t); 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" void *memmove(void *s1, const void *s2, size_t n); 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" void *memcpy(void *s1, const void *s2, size_t n); 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" void *memcmp(void *s1, const void *s2, size_t n); 9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" int strncmp(const char *s1, const char *s2, size_t n); 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" int strncasecmp(const char *s1, const char *s2, size_t n); 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" char *strncpy(char *dst, const char *src, size_t n); 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" char *strncat(char *dst, const char *src, size_t n); 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" char *strndup(const char *src, size_t n); 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" size_t strlcpy(char *dst, const char *src, size_t size); 15651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesextern "C" size_t strlcat(char *dst, const char *src, size_t size); 16651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesvoid f() { 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines char b1[80], b2[80]; 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memset(b1, 0, sizeof(b1) != 0)) {} // \ 20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-warning{{size argument in 'memset' call is a comparison}} \ 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{did you mean to compare}} \ 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{explicitly cast the argument}} 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memset(b1, 0, sizeof(b1)) != 0) {} 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memmove(b1, b2, sizeof(b1) == 0)) {} // \ 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-warning{{size argument in 'memmove' call is a comparison}} \ 27651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{did you mean to compare}} \ 28651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{explicitly cast the argument}} 29651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memmove(b1, b2, sizeof(b1)) == 0) {} 30651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 31651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memcpy(b1, b2, sizeof(b1) < 0)) {} // \ 32651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-warning{{size argument in 'memcpy' call is a comparison}} \ 33651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{did you mean to compare}} \ 34651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{explicitly cast the argument}} 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memcpy(b1, b2, sizeof(b1)) < 0) {} 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 37651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memcmp(b1, b2, sizeof(b1) <= 0)) {} // \ 38651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-warning{{size argument in 'memcmp' call is a comparison}} \ 39651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{did you mean to compare}} \ 40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{explicitly cast the argument}} 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memcmp(b1, b2, sizeof(b1)) <= 0) {} 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strncmp(b1, b2, sizeof(b1) > 0)) {} // \ 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-warning{{size argument in 'strncmp' call is a comparison}} \ 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{did you mean to compare}} \ 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{explicitly cast the argument}} 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strncmp(b1, b2, sizeof(b1)) > 0) {} 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strncasecmp(b1, b2, sizeof(b1) >= 0)) {} // \ 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-warning{{size argument in 'strncasecmp' call is a comparison}} \ 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{did you mean to compare}} \ 52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{explicitly cast the argument}} 53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strncasecmp(b1, b2, sizeof(b1)) >= 0) {} 54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strncpy(b1, b2, sizeof(b1) == 0 || true)) {} // \ 56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-warning{{size argument in 'strncpy' call is a comparison}} \ 57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{did you mean to compare}} \ 58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{explicitly cast the argument}} 59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strncpy(b1, b2, sizeof(b1)) == 0 || true) {} 60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strncat(b1, b2, sizeof(b1) - 1 >= 0 && true)) {} // \ 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-warning{{size argument in 'strncat' call is a comparison}} \ 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{did you mean to compare}} \ 64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{explicitly cast the argument}} 65651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strncat(b1, b2, sizeof(b1) - 1) >= 0 && true) {} 66651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 67651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strndup(b1, sizeof(b1) != 0)) {} // \ 68651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-warning{{size argument in 'strndup' call is a comparison}} \ 69651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{did you mean to compare}} \ 70651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{explicitly cast the argument}} 71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strndup(b1, sizeof(b1)) != 0) {} 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strlcpy(b1, b2, sizeof(b1) != 0)) {} // \ 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-warning{{size argument in 'strlcpy' call is a comparison}} \ 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{did you mean to compare}} \ 76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{explicitly cast the argument}} 77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strlcpy(b1, b2, sizeof(b1)) != 0) {} 78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strlcat(b1, b2, sizeof(b1) != 0)) {} // \ 80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-warning{{size argument in 'strlcat' call is a comparison}} \ 81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{did you mean to compare}} \ 82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines expected-note {{explicitly cast the argument}} 83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (strlcat(b1, b2, sizeof(b1)) != 0) {} 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memset(b1, 0, sizeof(b1) / 2)) {} 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memset(b1, 0, sizeof(b1) >> 2)) {} 87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memset(b1, 0, 4 << 2)) {} 88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memset(b1, 0, 4 + 2)) {} 89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memset(b1, 0, 4 - 2)) {} 90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memset(b1, 0, 4 * 2)) {} 91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines if (memset(b1, 0, (size_t)(sizeof(b1) != 0))) {} 93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 94