Hi!

This is something that fails bootstrap newly in GCC 7 and only with
(now on the branch default --enable-checking=release (or
--disable-checking)).  The problem is that the *-tests.c and selftest*.c
sources after including some headers have the whole body guarded with
#if CHECKING_P
and with release checking thus there are no global symbols.
symtab_node::debug_symtab is a static inline method with DEBUG_FUNCTION and thus
is emitted (due to __attribute__((used))) - something we should really fix,
by moving its definition out of cgraph.h.
For some unknown reason AIX cc1plus emits:
        .csect _functiontests.ro_[RO],4
        .align 2
        .globl _GLOBAL__F_.._.._gcc_function_tests.c_DFF67DD7_0x28c82f7f
_GLOBAL__F_.._.._gcc_function_tests.c_DFF67DD7_0x28c82f7f:
Lframe..1:
        .vbyte  4,LECIE..1-LSCIE..1
and thus has the random seed in the symbol table.

The following patch fixes it by making sure we build all the
selftest*/*tests* objects with -frandom-seed=$@ and thus it is consistent.
As a bonus for other targets, the objects are now put together and thus
should be improve code locality for actual compiler code, not tests,
when doing checking builds.

Bootstrapped/regtested on x86_64-linux, i686-linux and (together with
the libgomp patch I've already committed) on powerpc-ibm-aix7.2.0.0,
ok for trunk/7.1?

I'd like to do a RC2 tomorrow.

2017-04-27  Jakub Jelinek  <ja...@redhat.com>

        PR bootstrap/80531
        * Makefile.in (SELFTEST_OBJS): New variable.
        For $(SELFTEST_OBJS) and selftest.o append -frandom-seed=$@ to
        ALL_COMPILERFLAGS.
        (OBJS): Remove *-tests.o and selftest-*.o, add $(SELFTEST_OBJS).

--- gcc/Makefile.in.jj  2017-04-25 21:44:02.000000000 +0200
+++ gcc/Makefile.in     2017-04-27 18:32:06.661511629 +0200
@@ -1187,6 +1187,11 @@ C_COMMON_OBJS = c-family/c-common.o c-fa
   c-family/array-notation-common.o c-family/cilk.o c-family/c-ubsan.o \
   c-family/c-attribs.o c-family/c-warn.o
 
+# The self-test objects that are empty in release checking builds.
+SELFTEST_OBJS = selftest-rtl.o selftest-run-tests.o \
+  function-tests.o ggc-tests.o hash-map-tests.o hash-set-tests.o \
+  rtl-tests.o
+
 # Language-independent object files.
 # We put the *-match.o and insn-*.o files first so that a parallel make
 # will build them sooner, because they are large and otherwise tend to be
@@ -1279,13 +1284,11 @@ OBJS = \
        fold-const.o \
        fold-const-call.o \
        function.o \
-       function-tests.o \
        fwprop.o \
        gcc-rich-location.o \
        gcse.o \
        gcse-common.o \
        ggc-common.o \
-       ggc-tests.o \
        gimple.o \
        gimple-builder.o \
        gimple-expr.o \
@@ -1319,8 +1322,6 @@ OBJS = \
        graphite-sese-to-poly.o \
        gtype-desc.o \
        haifa-sched.o \
-       hash-map-tests.o \
-       hash-set-tests.o \
        hsa-common.o \
        hsa-gen.o \
        hsa-regalloc.o \
@@ -1429,7 +1430,6 @@ OBJS = \
        resource.o \
        rtl-chkp.o \
        rtl-error.o \
-       rtl-tests.o \
        rtl.o \
        rtlhash.o \
        rtlanal.o \
@@ -1443,8 +1443,6 @@ OBJS = \
        sel-sched-ir.o \
        sel-sched-dump.o \
        sel-sched.o \
-       selftest-rtl.o \
-       selftest-run-tests.o \
        sese.o \
        shrink-wrap.o \
        simplify-rtx.o \
@@ -1574,7 +1572,8 @@ OBJS = \
        xcoffout.o \
        $(out_object_file) \
        $(EXTRA_OBJS) \
-       $(host_hook_obj)
+       $(host_hook_obj) \
+       $(SELFTEST_OBJS)
 
 # Objects in libcommon.a, potentially used by all host binaries and with
 # no target dependencies.
@@ -1607,6 +1606,10 @@ $(ALL_HOST_BACKEND_OBJS): ALL_COMPILERFL
 $(ALL_HOST_BACKEND_OBJS): cc1plus.fda
 endif
 
+# The self-test objects are empty in release checking builds, make sure
+# AIX/HPUX don't trigger comparison failures on them.
+$(SELFTEST_OBJS) selftest.o: ALL_COMPILERFLAGS += -frandom-seed=$@
+
 # This lists all host object files, whether they are included in this
 # compilation or not.
 ALL_HOST_OBJS = $(ALL_HOST_FRONTEND_OBJS) $(ALL_HOST_BACKEND_OBJS)

        Jakub

Reply via email to