RFC: Enabling -Wshadow, by default?
Akseli Lahtinen
akselmo at akselmo.dev
Wed Jan 7 10:59:50 GMT 2026
Hi
On Monday 29 December 2025 18:46:32 Eastern European Standard Time Friedrich W. H. Kossebau wrote:
> Hi,
>
> TL;DR what is people's take on warnings about variable shadowing, useful or
> going against naming habits? Would you prefer this being enabled by default
> for any projects, at least with clang, would you at least for your project?
>
I would not be against it, I've been bitten by it before.
>
> I just stumbled over a (non-effective) bug due to variable shadowing in
> Okteta code, to discover that other than assumed by me by the default KDE
> settings the compilers are not instructed to warn about shadowing of
> variables. Checking with lxr.kde.org I only found some projects enable this
> warning flag, like kmymoney or kdiff3. Now while not recently, I remember
> that shadowing has been a category of issues causing bugs, especially on
> refactoring existing code, where name usages are recombined in new scopes.
>
> Playing around and talking to waqar, who just happened to have resolved some
> shadowing issues in Kate (invent.kde.org/utilities/kate/-/merge_requests/
> 1971), it seems that while both gcc and clang support the -Wshadow flag, gcc
> is complaining a bit too much, like over shadowing of private members of
> base classes or around variables in lambdas vs. non-captured things (see
> snippet below for gcc bug report links).
>
> Clang warnings though seemed mostly reasonable, so for Okteta I now add
> this, perhaps you might want to add this to your project as well:
> --- 8< ---
> if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
> # Not setting for GNU due to too many warnings related to private
> members of base classes or around lambdas
> # see e.g. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56556 or
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79328
> string(APPEND CMAKE_CXX_FLAGS " -Wshadow")
> endif()
> --- 8< ---
>
> Now, fixing those warnings one finds there are some cases where the
> shadowing might not really be a critical issue. E.g. names of local helper
> variables which are later reused in another deeper scope, with little chance
> to get this wrong:
> --- 8< ---
> [...]
> auto it = something();
> if (it)
> [...]
> for (...) {
> [...]
> auto it = somethingelse();
> if (it)
> [...]
> }
> --- 8< ---
> In such cases it feels a bit annoying to have to invent a more complicated/
> non-obvious name just to avoid the warning, or seeing to move the first case
> in a dedicated scope just for this sake.
>
> Then, testing KCoreAddons, KConfig, KWidgetsAddons, & KXmlGui, with the
> warning flag results in quite some related warnings. So one would assume
> that quite some KDE projects would have a lot of places which trigger that
> warning, and thus suddenly the build log would get noisy, while people are
> currently not focused on this and no actual bugs might be uncovered by this.
>
> So adding above snippet for everyone to KDECompilerSettings.cmake currently
> might not be something to consider. Instead people first might want to
> collect some experience with the flag when used on code across KDE projects?
> And only once a critical numbers of projects have code prepared to deal with
> that warning, one might switch this warning on by default.
>
> What are your opinion on this?
> And what are your related experiences and approaches, also outside of KDE,
> especially around code where the warning might conflict with non-risky
> naming habits?
>
> Cheers
> Friedrich
>
>
>
Best regards,
- Akseli
More information about the kde-devel
mailing list