Project

General

Profile

Actions

Bug #21024

closed

Ruby including <cstdbool> generates compilation warning with GCC 15, header is deprecated in C++17,

Added by jprokop (Jarek Prokop) 20 days ago. Updated 6 days ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +PRISM [x86_64-linux]
[ruby-core:120601]

Description

C++ compiler in GCC 15 now generates a warning when trying to include <cstdbool>.
This file is being included when compiling with C++ compiler from include/ruby/internal/stdbool.h.

In C++, true, false and bool are keywords so including headers for boolean definitions should not be necessary.
Alternatively, just including <stdbool.h> should be sufficient as that is what the #include <cstdbool> results in with GCC.

Simplest fix is just deleting the lines that are including the file (see attached patch and comments 2 and 3 from downstream issue linked in the bottom section "Additional info").

Considering the wide array of compilers Ruby aims to support to be compiled with I wanted to make an issue here first to make sure
there isn't a supported compiler that wouldn't agree with this approach.

Reproduction:
Obtain GCC 15, for Fedora Rawhide there is currently a repo of maintainer, I use it in Fedora Rawhide container (podman is replaceable for docker here):

host$ podman run -it --rm registry.fedoraproject.org/fedora:rawhide bash
container# echo "[gcc_15]
name=pre-release GCC 15 Repo
baseurl=https://fedorapeople.org/~dmalcolm/gcc/gcc-15-mass-prebuild/$basearch
type=rpm-md
skip_if_unavailable=True
gpgcheck=0
repo_gpgcheck=0
enabled=1
enabled_metadata=1" > /etc/yum.repos.d/gcc_15.repo
container# dnf install --assumeyes g++ ruby-devel

^ should install g++-15.0.0 and ruby.h needed for the reproducer.
Note: that baseurl is a custom space of a Fedora maintainer.

Have a file named for example main.cpp:

#include <ruby.h>

int main(void) {
	return 0;
}

Compile with GCC 15

$ g++ main.cpp

Current behavior:
Compiling throws warning:

$ g++ main.cpp
In file included from /usr/include/ruby/internal/stdbool.h:30,
                 from /usr/include/ruby/backward/2/bool.h:22,
                 from /usr/include/ruby/defines.h:74,
                 from /usr/include/ruby/ruby.h:25,
                 from /usr/include/ruby.h:38,
                 from reproducer.cpp:1:
/usr/include/c++/15/cstdbool:48:6: warning: #warning "<cstdbool> is deprecated in C++17, remove the #include" [-Wcpp]
   48 | #    warning "<cstdbool> is deprecated in C++17, remove the #include"
      |      ^~~~~~~

Expected:
Compilation throws no warnings and compiles the executable:

$ g++ reproducer.cpp
$ echo $?
0

Additional info:

$ g++ --version
g++ (GCC) 15.0.0 20241203 (Red Hat 15.0.0-0)
Copyright (C) 2024 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.

This was met during recompilation of libdnf5 that includes -Werror in their compilation flags,
See downstream discussion: https://bugzilla.redhat.com/show_bug.cgi?id=2336567

Considering the inclusion of the throws me up to 5 years ago back ( https://github.com/ruby/ruby/blob/9e6e39c3512f7a962c44dc3729c98a0f8be90341/include/ruby/3/stdbool.h ), I assume this warning will be the case with older rubies as well as newest master when using GCC 15.


Files

Updated by nobu (Nobuyoshi Nakada) 19 days ago

That patch will break C++-11 and C++-14.

https://github.com/ruby/ruby/pull/12551

Actions #2

Updated by nobu (Nobuyoshi Nakada) 19 days ago

  • Status changed from Open to Closed

Applied in changeset git|1b3037081ef9fc121b83e213d997a069acd5904b.


[Bug #21024] header is deprecated in C++17

Updated by jaruga (Jun Aruga) 16 days ago

For the record, nobu sent the following PR, and merged.

https://github.com/ruby/ruby/pull/12573

Updated by jprokop (Jarek Prokop) 6 days ago

Sent a backport for Ruby 3.4 as well https://github.com/ruby/ruby/pull/12628
as that the Ruby we ship in Fedora in combination with GCC 15 where the warning was encountered.

Actions #5

Updated by nobu (Nobuyoshi Nakada) 6 days ago

  • Backport changed from 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN to 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: REQUIRED

Updated by nobu (Nobuyoshi Nakada) 6 days ago

Marked backport to 3.4: required.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0