This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/81497] [7/8/9 Regression] error compiling arm_acle.h


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

--- Comment #4 from ktkachov at gcc dot gnu.org ---
Author: ktkachov
Date: Tue Jun  5 09:50:16 2018
New Revision: 261191

URL: https://gcc.gnu.org/viewcvs?rev=261191&root=gcc&view=rev
Log:
[arm] PR target/81497: Fix arm_acle.h for C++

When trying to compile something with arm_acle.h using G++ we get a number of
nasty errors:
arm_acle.h:48:49: error: invalid conversion from ‘const void*’ to ‘const int*’
[-fpermissive]
    return __builtin_arm_ldc (__coproc, __CRd, __p);

This is because the intrinsics that are supposed to be void return the "result"
of their builtin,
which is void. C lets that slide but C++ complains.

After fixing that we run into further errors:
arm_acle.h:48:46: error: invalid conversion from 'const void*' to 'const int*'
[-fpermissive]
    return __builtin_arm_ldc (__coproc, __CRd, __p);
                                               ^~~
Because the pointer arguments in these intrinsics are void pointers but the
builtin
expects int pointers. So this patch introduces new qualifiers for void pointers
and their
const-qualified versions and uses that in the specification of these
intrinsics.

This gives us the opportunity of creating an arm subdirectory in g++.dg and
inaugurates it
with the first arm-specific C++ tests (in that directory).


        PR target/81497
        * config/arm/arm-builtins.c (arm_type_qualifiers): Add
        qualifier_void_pointer and qualifier_const_void_pointer.
        (arm_ldc_qualifiers, arm_stc_qualifiers): Use the above.
        (arm_init_builtins): Handle the above.
        * config/arm/arm_acle.h (__arm_cdp, __arm_ldc, __arm_ldcl, __arm_stc,
        __arm_stcl, __arm_mcr, __arm_cdp2, __arm_ldc2, __arm_ldcl2, __arm_stc2,
        __arm_stcl2,__arm_mcr2, __arm_mcrr, __arm_mcrr2): Remove return for
        void intrinsics.

        * g++.target/arm/arm.exp: New file.
        * g++.target/arm/pr81497.C: Likewise.

Added:
    trunk/gcc/testsuite/g++.target/arm/
    trunk/gcc/testsuite/g++.target/arm/arm.exp
    trunk/gcc/testsuite/g++.target/arm/pr81497.C
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/arm/arm-builtins.c
    trunk/gcc/config/arm/arm_acle.h
    trunk/gcc/testsuite/ChangeLog

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]