Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp1567981ybi; Wed, 17 Jul 2019 17:51:21 -0700 (PDT) X-Google-Smtp-Source: APXvYqy/+Tw9HB/yLpoZUiezdv4v90Zz5n3s0UgL/SeABc2gj7UixwO8P1BVb8PkyXyInJ4j2CK8 X-Received: by 2002:a17:90a:cb8e:: with SMTP id a14mr17777253pju.124.1563411081391; Wed, 17 Jul 2019 17:51:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1563411081; cv=none; d=google.com; s=arc-20160816; b=Vd78wNvAOXuc9ZFo0oqXYwOdqKGoPaDs8iHXpU9G5CDrcePssL/GIJFDLhQQ9GOPQl tmgsHUVPMVe6u9MXmCpsNG4QPO2bNenwiKAz2xYECAHVLOuNr4JzqkeWjnWhw94Rs2Cj 5dQsTQ2vjwQV2u3lpRwpjOCMk735OFk2Do9rEmjKkNEEHnL8hdfjTMX2AppSXY9DEcSG 8irt1oUEMrxUaKdd8qHd64P8jAnNX9mVx3QjLQGFhMzD9P/1HjlLKj4yugmVLxDjVw2g aZ9amZtQb+Eerl6BfiPI2VWMl4YYTNpJGw1mlRKWypIe/dy18prFJpcgpft42t8RGH3w KFHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:references:message-id :content-transfer-encoding:cc:date:in-reply-to:from:subject :mime-version:dkim-signature; bh=7K9LFXNQszPVt9oolCuthJEpelngJlWY3awPIGBoIrc=; b=FyIQdUdw27lU4I89FLcKGi7+7e1VFBVMKH9dKxwnPREL93rtK8xeiCiCcZN4kPVNdx Jtk5r78QmPmxNUVI1nR2NgXZBFvTCXnfZyY/dK/sScz4SKwfdk8mHzrDZOHY7jY9+m92 nun5TYYdIsefyoHVeiVW9yuIUKV4e2LSQmjWvgwC5bw5PthM/DsV5bi3RQ+SLZpMfXsW Sfr+GwmR1MLx97xdF2zlx6jZoRNT5VDCrYaV5XJX4Oy4DfybVA68tQfc0Hu2dclr/A6M dlFnI5KE/1AaM8rNPubqgnn05+rcWsNTgy+aT79tjKufy0ZuaFUYKJ4svXvhzV340PAN Ezyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lca.pw header.s=google header.b=GZjJVzEi; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y23si23909462pjp.5.2019.07.17.17.51.04; Wed, 17 Jul 2019 17:51:21 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@lca.pw header.s=google header.b=GZjJVzEi; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732048AbfGRAtr (ORCPT + 99 others); Wed, 17 Jul 2019 20:49:47 -0400 Received: from mail-qk1-f195.google.com ([209.85.222.195]:42694 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727804AbfGRAtr (ORCPT ); Wed, 17 Jul 2019 20:49:47 -0400 Received: by mail-qk1-f195.google.com with SMTP id 201so19041470qkm.9 for ; Wed, 17 Jul 2019 17:49:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lca.pw; s=google; h=mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=7K9LFXNQszPVt9oolCuthJEpelngJlWY3awPIGBoIrc=; b=GZjJVzEiaTVbs3gP0mhVx/ascqRuKFftBg0qG8OjLCs9Uet45jCXXHASsA+I78EcEM hnXVwAzXuOMkmmeiVNSMXOz6qQ6PQrO13L850mZrPiDOmrEl4+tmsaJATgsPDLzvCuHX pKtA0WAL6PfYZ732t/8Hn7t/mcLhGq8mgFBmgAyj3C3f4w6pLEclhG2GZnZyY2pwiyIv PbfEpwmggZ6X+dlw2lyCk8k5yM+HeTs5ukcAG8TCaHwMNf5XhyNs1uxa8lhpwmCm/N4j arlVs+uOoN4ASTWBLtHsXFZOsmspHBc7JksnLpoBGrrHRb1mDJi7fsHLqiyUCUtZWwqy SVTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:subject:from:in-reply-to:date:cc :content-transfer-encoding:message-id:references:to; bh=7K9LFXNQszPVt9oolCuthJEpelngJlWY3awPIGBoIrc=; b=q7zcBaQhbgtLnj2bNAhGU53xbLrgCieRQ0esO2VyrtxPb+LCh1T1FaeHIwldWQYuUK s0qLOJYYDC9EoL0uAJvpO3R+p8H3Y1zo6xLUFAB1cedbTQel3O31MZ2ECaIJ8EinvvIE 1byMlcVzxgVTuY2ZVxN/jNHLUc/a+rFNm/b473UggcnmoDGEH2SU8sZ1IRqhJLl7VF55 OuGIz+YgxlMcs6ixoU287GqnEUBbN0SOf+AvoKT1sCT8qqHcbOiPamX1ctYeiloY+8Jg 4wJNQNuuGo53fblc8Wdeg0ssP8+Z0PzggvYdF7MuOMkLZG+x8i9p8FUgxj3gMqgxU2GM YTzw== X-Gm-Message-State: APjAAAU/sAhoxt/Lx7V9G3A45syIdmT4gQOAP3jkKs4PIZWbUXobPsXU KBHK/RkiQGEHy2FThTxBzA8qtA== X-Received: by 2002:ae9:f101:: with SMTP id k1mr28781291qkg.337.1563410986046; Wed, 17 Jul 2019 17:49:46 -0700 (PDT) Received: from qians-mbp.fios-router.home (pool-71-184-117-43.bstnma.fios.verizon.net. [71.184.117.43]) by smtp.gmail.com with ESMTPSA id v84sm11985703qkb.0.2019.07.17.17.49.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Jul 2019 17:49:45 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.11\)) Subject: Re: [PATCH] acpica: fix -Wnull-pointer-arithmetic warnings From: Qian Cai In-Reply-To: Date: Wed, 17 Jul 2019 20:49:43 -0400 Cc: rafael.j.wysocki@intel.com, robert.moore@intel.com, erik.schmauss@intel.com, jkim@freebsd.org, Len Brown , linux-acpi@vger.kernel.org, devel@acpica.org, clang-built-linux , LKML Content-Transfer-Encoding: quoted-printable Message-Id: <73A4565B-837B-4E13-8B72-63F69BF408E7@lca.pw> References: <20190717033807.1207-1-cai@lca.pw> To: Nick Desaulniers X-Mailer: Apple Mail (2.3445.104.11) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > On Jul 17, 2019, at 6:01 PM, Nick Desaulniers = wrote: >=20 > On Tue, Jul 16, 2019 at 8:38 PM Qian Cai wrote: >>=20 >> Clang generate quite a few of those warnings. >>=20 >> drivers/acpi/scan.c:759:28: warning: arithmetic on a null pointer >> treated as a cast from integer to pointer is a GNU extension >> [-Wnull-pointer-arithmetic] >> status =3D acpi_get_handle(ACPI_ROOT_OBJECT, >> obj->string.pointer, >> ^~~~~~~~~~~~~~~~ >> ./include/acpi/actypes.h:458:56: note: expanded from macro >> 'ACPI_ROOT_OBJECT' >> #define ACPI_ROOT_OBJECT ((acpi_handle) = ACPI_TO_POINTER >> (ACPI_MAX_PTR)) >> = ^~~~~~~~~~~~~~~ >> ./include/acpi/actypes.h:509:41: note: expanded from macro >> 'ACPI_TO_POINTER' >> #define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) = 0, >> (acpi_size) (i)) >> = ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> ./include/acpi/actypes.h:503:84: note: expanded from macro >> 'ACPI_ADD_PTR' >> #define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, >> (ACPI_CAST_PTR (u8, (a)) + (acpi_size)(b))) >> ^~~~~~~~~~~~~~~~~ >> ./include/acpi/actypes.h:501:66: note: expanded from macro >> 'ACPI_CAST_PTR' >> #define ACPI_CAST_PTR(t, p) ((t *) (acpi_uintptr_t) (p)) >> ^ >> This is because pointer arithmetic on a pointer not pointing to an = array >> is an undefined behavior. Fix it by doing an integer arithmetic >> instead. >=20 > Hi Qian, thanks for the patch. How do I reproduce this issue, > precisely? I just tried: > $ make CC=3Dclang -j71 drivers/acpi/scan.o > on linux-next today and don't observe the warning. My clang is ToT > built sometime this week. It looks like drivers/acpi/scan.o when > CONFIG_ACPI=3Dy, which is set in the defconfig. Is there another set = of > configs to enable to observe the warning? # make W=3D1 -j 256 With the config, https://raw.githubusercontent.com/cailca/linux-mm/master/arm64.config=20 >=20 > Also, the fix is curious. Arithmetic on pointers to different > "objects" (with one element passed the end) may lead to provence > issues due to undefined behavior, but I would have expected some cases > to uintptr_t, then arithmetic on that type, as the solution (which is > what I suspect ACPI_CAST_PTR is doing). >=20 > Further, you seem to have modified ACPI_ADD_PTR but not ACPI_SUB_PTR; > I would have expected both to be afflicted together or not at all > based on their existing implementations. Yes, I thought about that, but ACPI_SUB_PTR does not seem used anywhere, = so I thought maybe just start a new discussion to remove it all together = later. >=20 >>=20 >> Signed-off-by: Qian Cai >> --- >> include/acpi/actypes.h | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >>=20 >> diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h >> index ad6892a24015..25b4a32da177 100644 >> --- a/include/acpi/actypes.h >> +++ b/include/acpi/actypes.h >> @@ -500,13 +500,13 @@ typedef u64 acpi_integer; >>=20 >> #define ACPI_CAST_PTR(t, p) ((t *) (acpi_uintptr_t) (p)) >> #define ACPI_CAST_INDIRECT_PTR(t, p) ((t **) (acpi_uintptr_t) (p)) >> -#define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, = (ACPI_CAST_PTR (u8, (a)) + (acpi_size)(b))) >> +#define ACPI_ADD_PTR(t, a, b) ACPI_CAST_PTR (t, (a) + = (acpi_size)(b)) >> #define ACPI_SUB_PTR(t, a, b) ACPI_CAST_PTR (t, = (ACPI_CAST_PTR (u8, (a)) - (acpi_size)(b))) >> #define ACPI_PTR_DIFF(a, b) ((acpi_size) (ACPI_CAST_PTR = (u8, (a)) - ACPI_CAST_PTR (u8, (b)))) >>=20 >> /* Pointer/Integer type conversions */ >>=20 >> -#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, (void *) = 0, (acpi_size) (i)) >> +#define ACPI_TO_POINTER(i) ACPI_ADD_PTR (void, 0, = (acpi_size) (i)) >=20 > IIUC, these are adding `i` to NULL (or (void*)0)? X + 0 =3D=3D X ? > --=20 > Thanks, > ~Nick Desaulniers