Repository navigation
Description
Context
CI warning audit (2026-06-03) across the FastLED build matrix — 28+ workflows spanning the ESP family (esp32dev / wroom / s2 / s3 / c2 / c3 / c6 / h2 / dev_idf4.4 / i2s_ws2812 / esp_extra_libs / rgbw), the AVR/ATtiny family (uno / leonardo / nano_every / attiny85 / 88 / 4313 / 1604 / 1616), the Teensy family (teensy30 / 31 / 40 / 41 / LC / octoWS2811), the STM32 family (bluepill / maplemini / tinystm), RP2040/RP2350, the nRF52 family (feather_nrf52840_sense / xiaoblesense / nrf52840_dk / nrf52_xiaoblesense), uno_r4_wifi, sam3x8e_due, linux_native, and wasm.
Goal: surface warnings that should be errors — real bugs / UB / mis-configured builds / about-to-be-removed APIs — rather than cosmetic noise. The audit was performed by 11 parallel triage agents running over recent successful master CI runs.
Headline finding
The matrix is largely clean (zero CRITICAL findings on AVR, ATtiny, STM32, RISC-V ESP32, esp32dev/idf4.4) — but four categories of warning landmines exist that all share the same shape: -Werror is silenced for a bug-class on a whole crate when it only needed to be silenced for a vendor sub-tree, and two latent UB sites ride along on top.
CRITICAL findings (file as issues)
fbuild-side
- fbuild#403 — ESP32
-Wno-error=workspace-wide downgrade (array-bounds, maybe-uninitialized, uninitialized, deprecated-declarations). FastLED and user sketch code currently silently inherit these. Fix: scope to ESP-IDF / framework includes only (precedent: PR fix(ch32v): scope third-party OpenWCH warnings + remove duplicate CH32V30x_D8C define #399 CH32V scoping). build(esp32): scope -Wno-error= overrides (array-bounds, maybe-uninitialized, uninitialized, deprecated-declarations) to vendor sources only #403 - fbuild#404 — Renesas RA4M1 (uno_r4_wifi)
-Wno-error=workspace-wide downgrade (return-mismatch, implicit-function-declaration, int-conversion, incompatible-pointer-types). All four are critical bug classes (UB / ABI mismatch / pointer corruption). Fix: scope to FSP vendor sources only. build(renesas): scope -Wno-error= overrides on uno_r4_wifi (return-mismatch, implicit-function-declaration, int-conversion, incompatible-pointer-types) to FSP only #404
FastLED-side
- FastLED#2722 —
-Wmaybe-uninitializedonfl::tupleinfl/remote/rpc/json_arg_converter.h:76. 7 boards (Due, RP2040, RP2350, 4× nRF52). Real UB:args_tuple tuple;default-init then copied on conversion failure. One-line fix:args_tuple tuple{};. CRITICAL: -Wmaybe-uninitialized fl::tuple read in json_arg_converter.h:76 (Due, RP2040/RP2350, 4x nRF52) FastLED#2722 - FastLED#2723 —
-Wvolatilecompound assignment insrc/platforms/esp/32/drivers/lcd_spi/channel_driver_lcd_spi.cpp.hpp:256. C++20 deprecation; hard error in C++23. Fix now while it is still a warning. CRITICAL: -Wvolatile compound assignment in channel_driver_lcd_spi.cpp.hpp:256 (hard error in C++23) FastLED#2723
Upstream + cross-cutting
- fbuild#407 —
-Warray-boundsfrom Adafruit nRF52 BSP (nordic/nrfx/hal/nrf_clock.h:800) firing on all 4 nRF52 boards (~340 instances). Upstream NRFX strict-aliasing bug; fbuild owns the BSP pin and the scoped suppression policy. build(nrf52): -Warray-bounds in Adafruit BSP nrf_clock.h — bump pin past patched NRFX or scope suppression #407
HIGH findings (file as issues)
fbuild-side
- fbuild#405 —
USB_VID/USB_PIDredefined 149–156× per build on esp32s2/s3. fbuild unconditionally injects-DUSB_VID/-DUSB_PIDeven when the variant header already defines them. Fix: only inject when user explicitly overrides. build(esp32s2/s3): drop unconditional -DUSB_VID/USB_PID injection (149-156 redefinition warnings per build) #405 - fbuild#406 — Fx examples missing
build_info.json(161 occurrences per ESP32 run). Example-discovery glob does not traverseexamples/Fx/*. build(fx): example-discovery glob misses examples/Fx/* (161 missing build_info.json warnings per ESP32 build) #406
FastLED-side
- FastLED#2724 — C++20
-Wambiguous-reversed-operatoronTColorPalette::operator==. Affects all C++20 builds; will break when stricter modes are enabled. Fix: hidden-friendoperator==or explicitoperator!=. C++20: -Wambiguous-reversed-operator on TColorPalette::operator== (colorutils.h:486) — make hidden friend or add operator!= FastLED#2724 - FastLED#2725 —
-Wdeprecated-copyonTCRGBPalette<16>::operator=(~472 hits across Teensy builds). Rule-of-5 violation; explicit=defaultboth special members. -Wdeprecated-copy on TCRGBPalette<16>::operator= (colorutils.h:701) — Rule of 5 violation FastLED#2725 - FastLED#2726 — OjectFLED dead
>= 0guards on unsigned variables (third_party/object_fled/.../OjectFLED.cpp.hpp:676,690). Latent logic bug indicator. OjectFLED: dead '>= 0' guards on unsigned variables (OjectFLED.cpp.hpp:676,690) — latent logic bug FastLED#2726 - FastLED#2727 — RP common hygiene:
pio_programmissingpio_version/used_gpio_ranges(rp2350 SDK 2.x compat),-Wtype-limitsinspi_hw_4_rp,-Wsign-compareinpin_rp. RP common hygiene: pio_program missing pio_version/used_gpio_ranges (rp2350 SDK 2.x), -Wtype-limits in spi_hw_4_rp, -Wsign-compare in pin_rp FastLED#2727 - FastLED#2728 — Macro hygiene:
FASTLED_OVERCLOCKredefined inOverclock.ino,#warning A3/A4 not definedinui_state.cpp(fires on every board). Macro hygiene: FASTLED_OVERCLOCK redefined in Overclock.ino + #warning A3/A4 in ui_state.cpp (fires on every board) FastLED#2728
Out of scope / informational
- Teensy Audio
synth_waveform.cpp-Wimplicit-fallthrough(3 sites, teensy40 only) — upstream PJRC. Track only. - AVR / megaAVR / ATtiny / STM32 / RISC-V ESP32 (c2/c3/c6/h2) builds — completely clean on critical bug-class warnings. Only NOISE (
-Wcomment,-Wmissing-field-initializersin upstream vendor code,#warningpragmas) and CI infra messages. - Existing fbuild#400 (setup-soldr annotation cleanup, filed earlier) is a separate workflow-action concern.
Acceptance criteria for closing this meta
- All 12 child issues above are closed (either fixed or explicitly deferred / out-of-scope-documented).
- A follow-up CI re-audit demonstrates the four CRITICAL findings (build(esp32): scope -Wno-error= overrides (array-bounds, maybe-uninitialized, uninitialized, deprecated-declarations) to vendor sources only #403, build(renesas): scope -Wno-error= overrides on uno_r4_wifi (return-mismatch, implicit-function-declaration, int-conversion, incompatible-pointer-types) to FSP only #404, FastLED#2722, FastLED#2723) emit zero diagnostics on subsequent runs.
- Meta-tracker closed only after the active checklist is complete or intentionally superseded.
Checklist
- build(esp32): scope -Wno-error= overrides (array-bounds, maybe-uninitialized, uninitialized, deprecated-declarations) to vendor sources only #403 — ESP32 -Wno-error= scope
- build(renesas): scope -Wno-error= overrides on uno_r4_wifi (return-mismatch, implicit-function-declaration, int-conversion, incompatible-pointer-types) to FSP only #404 — Renesas RA4M1 -Wno-error= scope
- build(esp32s2/s3): drop unconditional -DUSB_VID/USB_PID injection (149-156 redefinition warnings per build) #405 — esp32s2/s3 USB_VID/PID redef
- build(fx): example-discovery glob misses examples/Fx/* (161 missing build_info.json warnings per ESP32 build) #406 — Fx examples build_info.json
- build(nrf52): -Warray-bounds in Adafruit BSP nrf_clock.h — bump pin past patched NRFX or scope suppression #407 — nRF52 BSP -Warray-bounds
- FastLED#2722 — fl::tuple uninit (CRITICAL)
- FastLED#2723 — -Wvolatile LCD-SPI (CRITICAL)
- FastLED#2724 — -Wambiguous-reversed-operator
- FastLED#2725 — -Wdeprecated-copy TCRGBPalette
- FastLED#2726 — OjectFLED dead guard
- FastLED#2727 — RP common hygiene (pio_program / type-limits / sign-compare)
- FastLED#2728 — Macro hygiene (FASTLED_OVERCLOCK + A3/A4 #warning)
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsTriage
Activity
zackees commentedon Jun 4, 2026
Meta-tracker resolved — all 12 child issues are either merged or closed with explanation. Final disposition:
All fbuild-owned warning landmines have been either fixed (5 PRs merged: #410, #412, #413, #414, plus #402 for #401, plus #409 for #400) or explicitly documented as out-of-scope. FastLED-side issues remain tracked individually.
Closing.