18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/// Use ARRAY_SIZE instead of dividing sizeof array with sizeof an element 38c2ecf20Sopenharmony_ci/// 48c2ecf20Sopenharmony_ci//# This makes an effort to find cases where ARRAY_SIZE can be used such as 58c2ecf20Sopenharmony_ci//# where there is a division of sizeof the array by the sizeof its first 68c2ecf20Sopenharmony_ci//# element or by any indexed element or the element type. It replaces the 78c2ecf20Sopenharmony_ci//# division of the two sizeofs by ARRAY_SIZE. 88c2ecf20Sopenharmony_ci// 98c2ecf20Sopenharmony_ci// Confidence: High 108c2ecf20Sopenharmony_ci// Copyright: (C) 2014 Himangi Saraogi. 118c2ecf20Sopenharmony_ci// Comments: 128c2ecf20Sopenharmony_ci// Options: --no-includes --include-headers 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_civirtual patch 158c2ecf20Sopenharmony_civirtual context 168c2ecf20Sopenharmony_civirtual org 178c2ecf20Sopenharmony_civirtual report 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci@i@ 208c2ecf20Sopenharmony_ci@@ 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci#include <linux/kernel.h> 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci//---------------------------------------------------------- 258c2ecf20Sopenharmony_ci// For context mode 268c2ecf20Sopenharmony_ci//---------------------------------------------------------- 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci@depends on i&&context@ 298c2ecf20Sopenharmony_citype T; 308c2ecf20Sopenharmony_ciT[] E; 318c2ecf20Sopenharmony_ci@@ 328c2ecf20Sopenharmony_ci( 338c2ecf20Sopenharmony_ci* (sizeof(E)/sizeof(*E)) 348c2ecf20Sopenharmony_ci| 358c2ecf20Sopenharmony_ci* (sizeof(E)/sizeof(E[...])) 368c2ecf20Sopenharmony_ci| 378c2ecf20Sopenharmony_ci* (sizeof(E)/sizeof(T)) 388c2ecf20Sopenharmony_ci) 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci//---------------------------------------------------------- 418c2ecf20Sopenharmony_ci// For patch mode 428c2ecf20Sopenharmony_ci//---------------------------------------------------------- 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci@depends on i&&patch@ 458c2ecf20Sopenharmony_citype T; 468c2ecf20Sopenharmony_ciT[] E; 478c2ecf20Sopenharmony_ci@@ 488c2ecf20Sopenharmony_ci( 498c2ecf20Sopenharmony_ci- (sizeof(E)/sizeof(*E)) 508c2ecf20Sopenharmony_ci+ ARRAY_SIZE(E) 518c2ecf20Sopenharmony_ci| 528c2ecf20Sopenharmony_ci- (sizeof(E)/sizeof(E[...])) 538c2ecf20Sopenharmony_ci+ ARRAY_SIZE(E) 548c2ecf20Sopenharmony_ci| 558c2ecf20Sopenharmony_ci- (sizeof(E)/sizeof(T)) 568c2ecf20Sopenharmony_ci+ ARRAY_SIZE(E) 578c2ecf20Sopenharmony_ci) 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ci//---------------------------------------------------------- 608c2ecf20Sopenharmony_ci// For org and report mode 618c2ecf20Sopenharmony_ci//---------------------------------------------------------- 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci@r depends on (org || report)@ 648c2ecf20Sopenharmony_citype T; 658c2ecf20Sopenharmony_ciT[] E; 668c2ecf20Sopenharmony_ciposition p; 678c2ecf20Sopenharmony_ci@@ 688c2ecf20Sopenharmony_ci( 698c2ecf20Sopenharmony_ci (sizeof(E)@p /sizeof(*E)) 708c2ecf20Sopenharmony_ci| 718c2ecf20Sopenharmony_ci (sizeof(E)@p /sizeof(E[...])) 728c2ecf20Sopenharmony_ci| 738c2ecf20Sopenharmony_ci (sizeof(E)@p /sizeof(T)) 748c2ecf20Sopenharmony_ci) 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ci@script:python depends on org@ 778c2ecf20Sopenharmony_cip << r.p; 788c2ecf20Sopenharmony_ci@@ 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_cicoccilib.org.print_todo(p[0], "WARNING should use ARRAY_SIZE") 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_ci@script:python depends on report@ 838c2ecf20Sopenharmony_cip << r.p; 848c2ecf20Sopenharmony_ci@@ 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_cimsg="WARNING: Use ARRAY_SIZE" 878c2ecf20Sopenharmony_cicoccilib.report.print_report(p[0], msg) 888c2ecf20Sopenharmony_ci 89