From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 93EE581EE6 for ; Mon, 23 Jan 2017 23:25:48 -0800 (PST) Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga103.fm.intel.com with ESMTP; 23 Jan 2017 23:25:48 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,277,1477983600"; d="scan'208";a="56515488" Received: from shwdeopenpsi014.ccr.corp.intel.com ([10.239.9.13]) by orsmga005.jf.intel.com with ESMTP; 23 Jan 2017 23:25:46 -0800 From: Hao Wu To: edk2-devel@lists.01.org Cc: Hao Wu , Michael Kinney , Liming Gao , Eric Dong , Laszlo Ersek , Ard Biesheuvel Date: Tue, 24 Jan 2017 15:25:39 +0800 Message-Id: <1485242740-10244-1-git-send-email-hao.a.wu@intel.com> X-Mailer: git-send-email 1.9.5.msysgit.0 Subject: [PATCH v2 0/1] Refine casting expression result to bigger size X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Jan 2017 07:25:54 -0000 Please note that this patch is maily for feedback collection and the patch only covers MdePkg. We are working on patches for other packages. V2: Follow the below rules to refine codes: 1). When the expression will not overflow within the rank of "int", remove the explicit type casts: c = a + b; 2). When the expression is possible to overflow the range of unsigned int/ int: c = (UINT64)a + b; V1: There are cases that the operands of an expression are all with rank less than UINT64/INT64 and the result of the expression is casted to UINT64/INT64 to fit the target size. An example will be: UINT32 a,b; // a and b can be any unsigned int type with rank less than UINT64, like // UINT8, UINT16, etc. UINT64 c; c = (UINT64) (a + b); Some static code checkers may warn that the expression result might overflow within the rank of int (integer promotions) and the result is then cast to a bigger size. For the consideration of generated binaries size, the commit will keep the size of the operands as the size of int, and explitly add a type cast before converting the result to UINT64/INT64. 1). When there is no operand with type UINTN (UINTN) (a + b) -> (UINTN)(UINT32) (a + b) or (UINT64) (a + b) -> (UINT64)(UINT32) (a + b) 2). Otherwise (UINT64) (a + b) -> (UINT64)(UINTN) (a + b) Cc: Michael Kinney Cc: Liming Gao Cc: Eric Dong Cc: Laszlo Ersek Cc: Ard Biesheuvel Hao Wu (1): MdePkg: Refine casting expression result to bigger size MdePkg/Library/BaseLib/String.c | 4 ++-- MdePkg/Library/BasePeCoffLib/BasePeCoff.c | 12 +++++------- MdePkg/Library/BaseS3PciLib/S3PciLib.c | 4 ++-- MdePkg/Library/SmmMemoryAllocationLib/MemoryAllocationLib.c | 4 ++-- MdePkg/Library/UefiMemoryAllocationLib/MemoryAllocationLib.c | 4 ++-- 5 files changed, 13 insertions(+), 15 deletions(-) -- 1.9.5.msysgit.0