| 1 | // RUN: %check_clang_tidy -std=c11-or-later %s bugprone-sizeof-expression %t |
| 2 | |
| 3 | #define alignof(type_name) _Alignof(type_name) |
| 4 | extern void sink(const void *P); |
| 5 | |
| 6 | enum { BufferSize = 1024 }; |
| 7 | |
| 8 | struct S { |
| 9 | long A, B, C; |
| 10 | }; |
| 11 | |
| 12 | void bad4d(void) { |
| 13 | struct S Buffer[BufferSize]; |
| 14 | |
| 15 | struct S *P = &Buffer[0]; |
| 16 | struct S *Q = P; |
| 17 | while (Q < P + alignof(Buffer)) { |
| 18 | // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: suspicious usage of 'alignof(...)' in pointer arithmetic; this scaled value will be scaled again by the '+' operator [bugprone-sizeof-expression] |
| 19 | // CHECK-MESSAGES: :[[@LINE-2]]:16: note: '+' in pointer arithmetic internally scales with 'sizeof(struct S)' == {{[0-9]+}} |
| 20 | sink(P: Q++); |
| 21 | } |
| 22 | } |
| 23 | |