On 21/9/23 00:35, kernel test robot wrote:
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git for-next head: 72f6a13022f3bf16df305b75c32f95ece263a5ce commit: 2144833e7b41459fa2d52bb0676f0ab4920cf32c [36/38] ALSA: hda: cirrus_scodec: Add KUnit test config: hexagon-randconfig-r041-20211219 (https://download.01.org/0day-ci/archive/20230921/202309210751.TXlnuEMF-lkp@i...) compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230921/202309210751.TXlnuEMF-lkp@i...)
If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot lkp@intel.com | Closes: https://lore.kernel.org/oe-kbuild-all/202309210751.TXlnuEMF-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from sound/pci/hda/cirrus_scodec_test.c:9: In file included from include/linux/gpio/driver.h:6: In file included from include/linux/irqchip/chained_irq.h:10: In file included from include/linux/irq.h:20: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:337: include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __raw_readb(PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu' #define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) ^
This looks like it has nothing to do with cirrus_scodec_test, it's just unfortunate that including gpio/driver.h results in also including io.h.
I think the problem here is that the way io.h tries to implement some functions that might depend on PCI_IOBASE is not portable. If PCI_IOBASE is not defined it defines it as NULL so that the functions will use (0 + addr). But clang doesn't like this.
Probably the address calculation should be factored out from all these functions so that it can be alternately defined as (PCI_IOBASE + addr) or just (addr) depending whether PCI_IOBASE is set.
I've added the author and maintainer of the io.h code and the author of the PCI_IOBASE hack for comment.