Issue #17752 has been updated by xtkoba (Tee KOBAYASHI).


I noticed that `-Wundef` is explicitly disabled for GCC at [include/ruby/internal/token_paste.h:40](https://github.com/ruby/ruby/blob/587e6800086764a1b7c959976acef33e230dccc2/include/ruby/internal/token_paste.h#L40):

```c
#if RBIMPL_COMPILER_SINCE(GCC, 4, 2, 0)
# /* GCC is one of such compiler who  cannot write `_Pragma` inside of a `#if`.
#  * Cannot but globally kill everything.  This  is of course a very bad thing.
#  * If you know how to reroute this please tell us. */
# /* https://gcc.godbolt.org/z/K2xr7X */
# define RBIMPL_TOKEN_PASTE(x, y) TOKEN_PASTE(x, y)
# pragma GCC diagnostic ignored "-Wundef"
# /* > warning: "symbol" is not defined, evaluates to 0 [-Wundef] */
```

The problem is that GCC is a major compiler that is widely used in CI, and so we will still be missing a lot of potential problems even if `-Wundef` is enabled by default.


----------------------------------------
Feature #17752: Enable -Wundef for C extensions in repository
https://bugs.ruby-lang.org/issues/17752#change-91353

* Author: Eregon (Benoit Daloze)
* Status: Open
* Priority: Normal
----------------------------------------
I would like to enable `-Wundef` for C extensions built/bundled with CRuby.

From https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
> -Wundef
>    Warn if an undefined identifier is evaluated in an #if directive. Such identifiers are replaced with zero.

I found this warning to be quite useful, notably when investigating why a given C extension did not include some code I expected, and then building those extensions on TruffleRuby.

There are a couple places not respecting this currently but they seem trivial to fix, I can do that.

For instance a confusing case is:
https://github.com/ruby/ruby/blob/9143d21b1bf2f16b1e847d569a588510726d8860/ext/nkf/nkf-utf8/nkf.h#L19
```
#if DEFAULT_NEWLINE == 0x0D0A
```
which without -Wundef would just exclude the code without any warning if DEFAULT_NEWLINE is not defined.

I'm not sure if we should/can enable it for C extensions in general (installed as gems), as if a C extensions uses -Werror and would have such a warning it would no longer build.

I can make a PR for this.
I'm not sure where to add -Wundef though, should it be in https://github.com/ruby/ruby/blob/9143d21b1bf2f16b1e847d569a588510726d8860/configure.ac#L620, or maybe in mkmf.rb?

---Files--------------------------------
ruby-USE_BACKTRACE.patch (1.21 KB)
ruby-BIGNUM_EMBED_LEN_MAX.patch (950 Bytes)
ruby-COROUTINE_LIMITED_ADDRESS_SPACE.patch (711 Bytes)
ruby-trivial-undefined-macros.patch (4.35 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>