https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94707

--- Comment #12 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:a39ed81b8a0b46320a7c6ece3f7ad4c3f8519609

commit r10-7907-ga39ed81b8a0b46320a7c6ece3f7ad4c3f8519609
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Thu Apr 23 09:59:57 2020 +0200

    rs6000: Fix C++14 vs. C++17 ABI bug on powerpc64le [PR94707]

    As mentioned in the PR and on IRC, the recently added struct-layout-1.exp
    new tests FAIL on powerpc64le-linux (among other targets).
    FAIL: tmpdir-g++.dg-struct-layout-1/t032
cp_compat_x_tst.o-cp_compat_y_tst.o execute
    FAIL: tmpdir-g++.dg-struct-layout-1/t058
cp_compat_x_tst.o-cp_compat_y_tst.o execute
    FAIL: tmpdir-g++.dg-struct-layout-1/t059
cp_compat_x_tst.o-cp_compat_y_tst.o execute
    in particular.  The problem is that the presence or absence of the C++17
    artificial empty base fields, which have non-zero TYPE_SIZE, but zero
    DECL_SIZE, change the ABI decisions, if it is present (-std=c++17), the
type
    might not be considered homogeneous, while if it is absent (-std=c++14), it
    can be.

    The following patch fixes that and emits a -Wpsabi inform; perhaps more
    often than it could, because the fact that
rs6000_discover_homogeneous_aggregate
    returns true when it didn't in in GCC 7/8/9 with -std=c++17 doesn't still
    mean it will make a different ABI decision, but the warning triggered only
    on the test I've changed (the struct-layout-1.exp tests use -w -Wno-psabi
    already).

    2020-04-23  Jakub Jelinek  <ja...@redhat.com>

            PR target/94707
            * config/rs6000/rs6000-call.c (rs6000_aggregate_candidate): Add
            cxx17_empty_base_seen argument.  Pass it to recursive calls.
            Ignore cxx17_empty_base_field_p fields after setting
            *cxx17_empty_base_seen to true.
            (rs6000_discover_homogeneous_aggregate): Adjust
            rs6000_aggregate_candidate caller.  With -Wpsabi, diagnose
homogeneous
            aggregates with C++17 empty base fields.

            * g++.dg/tree-ssa/pr27830.C: Use -Wpsabi -w for -std=c++17 and
higher.

Reply via email to