mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-14 02:06:16 +02:00
Add configure test to ensure GCC bug is fixed
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431 (test is adapted from issue, test does not test for GCC-specific behavior but rather absence of bug, so test is good with other compilers too.)
This commit is contained in:
parent
12a0ae73db
commit
1f4525531e
2 changed files with 67 additions and 0 deletions
|
@ -68,6 +68,9 @@ case "$host_os" in
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
ENSURE_NO_GCC_BUG_80431
|
||||||
|
|
||||||
|
|
||||||
# Check for pubsetbuf.
|
# Check for pubsetbuf.
|
||||||
AC_MSG_CHECKING([for pubsetbuf])
|
AC_MSG_CHECKING([for pubsetbuf])
|
||||||
AC_LANG_PUSH(C++)
|
AC_LANG_PUSH(C++)
|
||||||
|
|
64
m4/gcc_bug_80431.m4
Normal file
64
m4/gcc_bug_80431.m4
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
# Ensure that this bug is not present in the C++ toolchain we are using.
|
||||||
|
#
|
||||||
|
# URL for bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80431
|
||||||
|
#
|
||||||
|
# The test program is from that issue, with only a slight modification
|
||||||
|
# to set an exit status instead of printing strings.
|
||||||
|
AC_DEFUN([ENSURE_NO_GCC_BUG_80431],
|
||||||
|
[
|
||||||
|
AC_MSG_CHECKING([that GCC bug 80431 is fixed])
|
||||||
|
AC_LANG_PUSH(C++)
|
||||||
|
AC_RUN_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM(
|
||||||
|
[[
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
static bool a = true;
|
||||||
|
static bool b = true;
|
||||||
|
|
||||||
|
struct Options { };
|
||||||
|
|
||||||
|
struct Option
|
||||||
|
{
|
||||||
|
Option(Options * options)
|
||||||
|
{
|
||||||
|
a = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
~Option()
|
||||||
|
{
|
||||||
|
b = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MyOptions : Options { };
|
||||||
|
|
||||||
|
struct MyOptions2 : virtual MyOptions
|
||||||
|
{
|
||||||
|
Option foo{this};
|
||||||
|
};
|
||||||
|
]],
|
||||||
|
[[
|
||||||
|
{
|
||||||
|
MyOptions2 opts;
|
||||||
|
}
|
||||||
|
return (a << 1) | b;
|
||||||
|
]])],
|
||||||
|
[status_80431=0],
|
||||||
|
[status_80431=$?],
|
||||||
|
[
|
||||||
|
# Assume we're bug-free when cross-compiling
|
||||||
|
])
|
||||||
|
AC_LANG_POP(C++)
|
||||||
|
AS_CASE([$status_80431],
|
||||||
|
[0],[
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
],
|
||||||
|
[2],[
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
AC_MSG_ERROR(Cannot build Nix with C++ compiler with this bug)
|
||||||
|
],
|
||||||
|
[
|
||||||
|
AC_MSG_RESULT(unexpected result $status_80431: not expected failure with bug, ignoring)
|
||||||
|
])
|
||||||
|
])
|
Loading…
Reference in a new issue