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) 5 days ago. Updated 1 day 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) 5 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) 4 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) 1 day ago

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

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0