65 lines
1.4 KiB
Plaintext
65 lines
1.4 KiB
Plaintext
|
# 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)
|
||
|
])
|
||
|
])
|