raspberrypi / pico-sdk

BSD 3-Clause "New" or "Revised" License
3.25k stars 838 forks source link

Build fails on gcc 13 with -Wall -Werror #1686

Open shuffle2 opened 2 months ago

shuffle2 commented 2 months ago

Currently "binary info" feature must be disabled to build with -Wall -Werror because of:

[build] /home/shawn/pico-sdk/src/common/pico_binary_info/include/pico/binary_info/code.h:42:151: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
[build]    42 | #define bi_decl_if_func_used(_decl) ({__bi_mark_enclosure _decl; __bi_decl(__bi_ptr_lineno_var_name, &__bi_lineno_var_name.core, ".binary_info.", ); *(const volatile uint8_t *)&__bi_ptr_lineno_var_name;});

The reasoning behind this derefence (*(const volatile uint8_t *)&__bi_ptr_lineno_var_name) isn't clear to me in the first place. Is it an attempt to prevent compiler optimizing the variable out? Seems like different approach should be taken anyways, if that's the case.

cmdline is (quote is to make it word wrap)

/usr/bin/arm-none-eabi-gcc -DCFG_BOARD_UART_BAUDRATE=975000 -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DCFG_TUSB_OS=OPT_OS_PICO -DLIB_PICO_BIT_OPS=1 -DLIB_PICO_BIT_OPS_PICO=1 -DLIB_PICO_DIVIDER=1 -DLIB_PICO_DIVIDER_HARDWARE=1 -DLIB_PICO_DOUBLE=1 -DLIB_PICO_DOUBLE_PICO=1 -DLIB_PICO_FIX_RP2040_USB_DEVICE_ENUMERATION=1 -DLIB_PICO_FLOAT=1 -DLIB_PICO_FLOAT_PICO=1 -DLIB_PICO_INT64_OPS=1 -DLIB_PICO_INT64_OPS_PICO=1 -DLIB_PICO_MALLOC=1 -DLIB_PICO_MEM_OPS=1 -DLIB_PICO_MEM_OPS_PICO=1 -DLIB_PICO_PLATFORM=1 -DLIB_PICO_PRINTF=1 -DLIB_PICO_PRINTF_PICO=1 -DLIB_PICO_RUNTIME=1 -DLIB_PICO_STANDARD_LINK=1 -DLIB_PICO_STDIO=1 -DLIB_PICO_STDIO_UART=1 -DLIB_PICO_STDLIB=1 -DLIB_PICO_SYNC=1 -DLIB_PICO_SYNC_CRITICAL_SECTION=1 -DLIB_PICO_SYNC_MUTEX=1 -DLIB_PICO_SYNC_SEM=1 -DLIB_PICO_TIME=1 -DLIB_PICO_UTIL=1 -DLIB_TINYUSB_BOARD=1 -DLIB_TINYUSB_DEVICE=1 -DPICO_BOARD=\"pico_w\" -DPICO_BUILD=1 -DPICO_CMAKE_BUILD_TYPE=\"MinSizeRel\" -DPICO_COPY_TO_RAM=0 -DPICO_CXX_ENABLE_EXCEPTIONS=0 -DPICO_NO_FLASH=0 -DPICO_NO_HARDWARE=0 -DPICO_ON_DEVICE=1 -DPICO_RP2040_USB_DEVICE_UFRAME_FIX=1 -DPICO_TARGET_NAME=\"my_project\" -DPICO_USE_BLOCKED_RAM=0 -I/home/shawn/my_project -I/home/shawn/my_project/config -I/home/shawn/pico-sdk/src/common/pico_stdlib/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_gpio/include -I/home/shawn/pico-sdk/src/common/pico_base/include -I/home/shawn/my_project/build/generated/pico_base -I/home/shawn/pico-sdk/src/boards/include -I/home/shawn/pico-sdk/src/rp2_common/pico_platform/include -I/home/shawn/pico-sdk/src/rp2040/hardware_regs/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_base/include -I/home/shawn/pico-sdk/src/rp2040/hardware_structs/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_claim/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_sync/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_irq/include -I/home/shawn/pico-sdk/src/common/pico_sync/include -I/home/shawn/pico-sdk/src/common/pico_time/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_timer/include -I/home/shawn/pico-sdk/src/common/pico_util/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_uart/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_resets/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_clocks/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_pll/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_vreg/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_watchdog/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_xosc/include -I/home/shawn/pico-sdk/src/rp2_common/hardware_divider/include -I/home/shawn/pico-sdk/src/rp2_common/pico_runtime/include -I/home/shawn/pico-sdk/src/rp2_common/pico_printf/include -I/home/shawn/pico-sdk/src/common/pico_bit_ops/include -I/home/shawn/pico-sdk/src/common/pico_divider/include -I/home/shawn/pico-sdk/src/rp2_common/pico_double/include -I/home/shawn/pico-sdk/src/rp2_common/pico_float/include -I/home/shawn/pico-sdk/src/rp2_common/pico_malloc/include -I/home/shawn/pico-sdk/src/rp2_common/pico_bootrom/include -I/home/shawn/pico-sdk/src/common/pico_binary_info/include -I/home/shawn/pico-sdk/src/rp2_common/pico_stdio/include -I/home/shawn/pico-sdk/src/rp2_common/pico_stdio_uart/include -I/home/shawn/pico-sdk/src/rp2_common/pico_int64_ops/include -I/home/shawn/pico-sdk/src/rp2_common/pico_mem_ops/include -I/home/shawn/pico-sdk/src/rp2_common/boot_stage2/include -I/home/shawn/pico-sdk/lib/tinyusb/src -I/home/shawn/pico-sdk/lib/tinyusb/src/common -I/home/shawn/pico-sdk/lib/tinyusb/hw -I/home/shawn/pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/include -mcpu=cortex-m0plus -mthumb -Os -DNDEBUG -std=gnu2x -Wall -Werror -ffunction-sections -fdata-sections -MD -MT CMakeFiles/my_project.dir/home/shawn/pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.obj -MF CMakeFiles/my_project.dir/home/shawn/pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.obj.d -o CMakeFiles/my_project.dir/home/shawn/pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.obj -c /home/shawn/pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c

arm-none-eabi-gcc (15:13.2.rel1-2) 13.2.1 20231009
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

on ubuntu 24.04