[Bug c++/95726] ICE with aarch64 __Float32x4_t as template argument

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Jul 15 10:58:30 GMT 2020


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

--- Comment #12 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-10 branch has been updated by Richard Sandiford
<rsandifo@gcc.gnu.org>:

https://gcc.gnu.org/g:932e9140d3268cf2033c1c3e93219541c53fcd29

commit r10-8501-g932e9140d3268cf2033c1c3e93219541c53fcd29
Author: Richard Sandiford <richard.sandiford@arm.com>
Date:   Wed Jul 15 11:58:04 2020 +0100

    c++: Treat GNU and Advanced SIMD vectors as distinct [PR95726]

    This is a release branch version of
    r11-1741-g:31427b974ed7b7dd54e28fec595e731bf6eea8ba and
    r11-2022-g:efe99cca78215e339ba79f0a900a896b4c0a3d36.

    The trunk versions of the patch made GNU and Advanced SIMD vectors
    distinct (but inter-convertible) in all cases.  However, the
    traditional behaviour is that the types are distinct in template
    arguments but not otherwise.

    Following a suggestion from Jason, this patch puts the check
    for different vector types under comparing_specializations.
    In order to keep the backport as simple as possible, the patch
    hard-codes the name of the attribute in the frontend rather than
    adding a new branch-only target hook.

    I didn't find a test that tripped the assert on the branch,
    even with the --param in the PR, so instead I tested this by
    forcing the hash function to only hash the tree code.  That made
    the static assertion in the test fail without the patch but pass
    with it.

    This means that the tests pass for unmodified sources even
    without the patch (unless you're very unlucky).

    gcc/
            PR target/95726
            * config/aarch64/aarch64.c (aarch64_attribute_table): Add
            "Advanced SIMD type".
            * config/aarch64/aarch64-builtins.c: Include stringpool.h and
            attribs.h.
            (aarch64_init_simd_builtin_types): Add an "Advanced SIMD type"
            attribute to each Advanced SIMD type.
            * config/arm/arm.c (arm_attribute_table): Add "Advanced SIMD type".
            * config/arm/arm-builtins.c: Include stringpool.h and attribs.h.
            (arm_init_simd_builtin_types): Add an "Advanced SIMD type"
            attribute to each Advanced SIMD type.

    gcc/cp/
            PR target/95726
            * typeck.c (structural_comptypes): When comparing template
            specializations, differentiate between vectors that have and
            do not have an "Advanced SIMD type" attribute.

    gcc/testsuite/
            PR target/95726
            * g++.target/aarch64/pr95726.C: New test.
            * g++.target/arm/pr95726.C: Likewise.


More information about the Gcc-bugs mailing list