Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Catch2 fails to compile on Fedora Rawhide #2178

Closed
lzaoral opened this issue Feb 17, 2021 · 6 comments · Fixed by NVIDIA/cuCollections#186
Closed

Catch2 fails to compile on Fedora Rawhide #2178

lzaoral opened this issue Feb 17, 2021 · 6 comments · Fixed by NVIDIA/cuCollections#186
Labels

Comments

@lzaoral
Copy link

lzaoral commented Feb 17, 2021

Describe the bug
Tests that use Catch2 fail to compile on Fedora Rawhide.

Expected behavior
Tests that use Catch2 compile and execute without any problems on Fedora Rawhide.

Reproduction steps
Try to compile the factorial example from the Catch2 tutorial:

$ c++ test.cpp
In file included from /usr/include/signal.h:315,
                 from catch.hpp:8034,
                 from test.cpp:2:
catch.hpp:10822:58: error: call to non-'constexpr' function 'long int sysconf(int)'
10822 |     static constexpr std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ;
      |                                                          ^~~~~~~~~~~
In file included from /usr/include/bits/sigstksz.h:24,
                 from /usr/include/signal.h:315,
                 from catch.hpp:8034,
                 from test.cpp:2:
/usr/include/unistd.h:630:17: note: 'long int sysconf(int)' declared here
  630 | extern long int sysconf (int __name) __THROW;
      |                 ^~~~~~~
In file included from test.cpp:2:
catch.hpp:10881:45: error: size of array 'altStackMem' is not an integral constant-expression
10881 |     char FatalConditionHandler::altStackMem[sigStackSize] = {};
      |                                             ^~~~~~~~~~~~

Platform information:

  • OS: latest Fedora Rawhide
  • Compiler+version: gcc (GCC) 11.0.0 20210210 (Red Hat 11.0.0-0)
  • Catch version: v2.13.4

Additional context
This behaviour seems to be related to this change in glibc: https://sourceware.org/git/?p=glibc.git;a=commit;h=6c57d320484988e87e446e2e60ce42816bf51d53

@horenmar
Copy link
Member

Humm, can't say I am happy that MINSIGSTKSZ became non-constant, but it should be easy enough to fix...

@tomhughes
Copy link
Contributor

It's also broken catch 1 which uses SIGSTKSZE which is also now non-constant.

@tomhughes
Copy link
Contributor

I've pushed new builds of catch1 and catch for Fedora Rawhide now which hardwire the stack size as 32Kb until we have a better fix.

woodard pushed a commit to woodard/libabigail that referenced this issue Feb 24, 2021
This patch is about fixing a compilation error that we are seeing on
Fedora Rawhide with glibc 2.33.9000, which makes MINSIGSTKSZ not be a
constant value anymore.  Thus, the sigStackSize variable that is
declared constexpr cannot use that MINSIGSTKSZ as initializer anymore.

So as suggested in the issue
catchorg/Catch2#2178 filed against
'catchorg' for this purpose, I am hardwiring the initialization value
of sigStackSize for now.

	* tests/lib/catch.hpp: Update to v2.13.4 and initialize
	sigStackSize to 32768 for now, as suggested by
	catchorg/Catch2#2178.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
sixg0000d added a commit to sixg0000d-copr/shadowsocksr-uvw that referenced this issue Mar 17, 2021
Skip tests to workaround a compilation error same as catchorg/Catch2#2178
horenmar added a commit that referenced this issue Apr 4, 2021
Because new glibc has changed `MINSIGSTKSZ` to be a syscall instead
of being constant, the signal posix handling needed changes, as it
used the value in constexpr context, for deciding size of an array.
It would be simple to fix it by having the handler determine the
signal handling stack size and allocate the memory every time the
handler is being installed, but that would add another allocation
and a syscall every time a test case is entered.

Instead, I split apart the idea of preparing fatal error handlers,
and engaging them, so that the memory can be allocated only once
and still be guarded by RAII.

Also turns out that Catch2's use of `MINSIGSTKSZ` was wrong, and
we should've been using `SIGSTKSZ` the whole time, which we use now.

Closes #2178
horenmar added a commit that referenced this issue Apr 4, 2021
Because new glibc has changed `MINSIGSTKSZ` to be a syscall instead
of being constant, the signal posix handling needed changes, as it
used the value in constexpr context, for deciding size of an array.
It would be simple to fix it by having the handler determine the
signal handling stack size and allocate the memory every time the
handler is being installed, but that would add another allocation
and a syscall every time a test case is entered.

Instead, I split apart the idea of preparing fatal error handlers,
and engaging them, so that the memory can be allocated only once
and still be guarded by RAII.

Also turns out that Catch2's use of `MINSIGSTKSZ` was wrong, and
we should've been using `SIGSTKSZ` the whole time, which we use now.

Closes #2178
horenmar added a commit that referenced this issue Apr 4, 2021
Because new glibc has changed `MINSIGSTKSZ` to be a syscall instead
of being constant, the signal posix handling needed changes, as it
used the value in constexpr context, for deciding size of an array.
It would be simple to fix it by having the handler determine the
signal handling stack size and allocate the memory every time the
handler is being installed, but that would add another allocation
and a syscall every time a test case is entered.

Instead, I split apart the idea of preparing fatal error handlers,
and engaging them, so that the memory can be allocated only once
and still be guarded by RAII.

Also turns out that Catch2's use of `MINSIGSTKSZ` was wrong, and
we should've been using `SIGSTKSZ` the whole time, which we use now.

Closes #2178
@horenmar
Copy link
Member

horenmar commented Apr 4, 2021

Should be resolved in current commit on the v2.x branch. You will need to regenerate the single header to test it (use scripts/generateSingleHeader.py)

@horenmar horenmar added the Resolved - pending review Issue waiting for feedback from the original author label Apr 4, 2021
@lzaoral
Copy link
Author

lzaoral commented Apr 6, 2021

The fix works for me as well. Thanks!

@horenmar
Copy link
Member

Closing as the fixed version has been released, and this won't autoclose since v2 is no longer main branch.

@horenmar horenmar removed the Resolved - pending review Issue waiting for feedback from the original author label Apr 11, 2021
lzaoral added a commit to lzaoral/dg that referenced this issue Apr 12, 2021
Fixes compilation with new glibc on Fedora Rawhide.
See: catchorg/Catch2#2178
mchalupa pushed a commit to mchalupa/dg that referenced this issue Apr 13, 2021
Fixes compilation with new glibc on Fedora Rawhide.
See: catchorg/Catch2#2178
horenmar added a commit that referenced this issue May 9, 2021
Because new glibc has changed `MINSIGSTKSZ` to be a syscall instead
of being constant, the signal posix handling needed changes, as it
used the value in constexpr context, for deciding size of an array.
It would be simple to fix it by having the handler determine the
signal handling stack size and allocate the memory every time the
handler is being installed, but that would add another allocation
and a syscall every time a test case is entered.

Instead, I split apart the idea of preparing fatal error handlers,
and engaging them, so that the memory can be allocated only once
and still be guarded by RAII.

Also turns out that Catch2's use of `MINSIGSTKSZ` was wrong, and
we should've been using `SIGSTKSZ` the whole time, which we use now.

Closes #2178
horenmar added a commit that referenced this issue May 9, 2021
Because new glibc has changed `MINSIGSTKSZ` to be a syscall instead
of being constant, the signal posix handling needed changes, as it
used the value in constexpr context, for deciding size of an array.
It would be simple to fix it by having the handler determine the
signal handling stack size and allocate the memory every time the
handler is being installed, but that would add another allocation
and a syscall every time a test case is entered.

Instead, I split apart the idea of preparing fatal error handlers,
and engaging them, so that the memory can be allocated only once
and still be guarded by RAII.

Also turns out that Catch2's use of `MINSIGSTKSZ` was wrong, and
we should've been using `SIGSTKSZ` the whole time, which we use now.

Closes #2178
ausil added a commit to ausil/PrusaSlicer that referenced this issue May 16, 2021
see catchorg/Catch2#2178

Signed-off-by: Dennis Gilmore <dennis@ausil.us>
Guillaume227 added a commit to Guillaume227/app_utils that referenced this issue Jun 24, 2022
Updated Git Tag for Catch2 (GCC 11 compat, see catchorg/Catch2#2178)
alt-graph pushed a commit to gul-cpp/gul14 that referenced this issue Jul 12, 2022
[Why]
There are some incompatibilities with recent versions of glibc,
where MINSIGSTKSZ has become a non-constant, which breaks the
build of Catch2.

Signed-off-by: Soeren Grunewald <soeren.grunewald@desy.de>
Fixes: catchorg/Catch2#2178
graugans pushed a commit to graugans/lan743x-config that referenced this issue Oct 21, 2022
Based on this patch:
woodard/libabigail@8ae8dcb

Please refer to the catch issue #2178 for details
catchorg/Catch2#2178

This might not work on all platforms

Signed-off-by: Christian Ege <christian.ege@ifm.com>
mmore500 added a commit to devosoft/Empirical that referenced this issue Nov 21, 2022
Fixes catchorg/Catch2#2178 on Ubunto 22.04
choll added a commit to choll/xtr that referenced this issue Dec 10, 2022
choll added a commit to choll/xtr that referenced this issue Dec 10, 2022
Krzmbrzl added a commit to Krzmbrzl/standardese that referenced this issue Mar 27, 2023
The currently used version still suffers from the issue that apparently
MINSIGSTKSZ is no longer a constant expression in newer glibc versions.

Upstream bug report: catchorg/Catch2#2178
dimitry-unified-streaming added a commit to unifiedstreaming/event-message-track that referenced this issue Jan 10, 2024
catch.hpp:10822:58: error: call to non-'constexpr' function 'long int sysconf(int)'

followed by:

catch.hpp:10881:45: error: size of array 'altStackMem' is not an integral constant-expression
dimitry-unified-streaming added a commit to unifiedstreaming/fmp4-ingest that referenced this issue Jan 10, 2024
catch.hpp:10822:58: error: call to non-'constexpr' function 'long int sysconf(int)'

followed by:

catch.hpp:10881:45: error: size of array 'altStackMem' is not an integral constant-expression
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
3 participants