arm: Fix up arm installed unwind.h for use in pedantic modes [PR93615]
authorJakub Jelinek <jakub@redhat.com>
Fri, 7 Feb 2020 10:01:14 +0000 (11:01 +0100)
committerJakub Jelinek <jakub@redhat.com>
Fri, 7 Feb 2020 10:01:14 +0000 (11:01 +0100)
commit811a475ea3fcc55ee4aea7c81171891ef19dfc25
tree3e232cdebea5d9ce79d1b327f03c75d14c75dcc0
parentf82617f229b336d856c18313339b14657e05c129
arm: Fix up arm installed unwind.h for use in pedantic modes [PR93615]

As the following testcase shows, unwind.h on ARM can't be (starting with GCC
10) compiled with -std=c* modes, only -std=gnu* modes.
The problem is it uses asm keyword, which isn't a keyword in those modes
(system headers vs. non-system ones don't make a difference here).
glibc and other installed headers use __asm or __asm__ keywords instead that
work fine in both standard and gnu modes.

While there, as it is an installed header, I think it is also wrong to
completely ignore any identifier namespace rules.
The generic unwind.h defines just _Unwind* namespace identifiers plus
_sleb128_t/_uleb128_t (but e.g. unlike libstdc++/glibc headers doesn't
uglify operand names), the ARM unwind.h is much worse here.  I've just
changed the gnu_Unwind_Find_got function at least not be in user identifier
namespace, but perhaps it would be good to go further and rename e.g.
or e.g.
  typedef _Unwind_Reason_Code (*personality_routine) (_Unwind_State,
      _Unwind_Control_Block *, _Unwind_Context *);
in unwind-arm-common.h.

2020-02-07  Jakub Jelinek  <jakub@redhat.com>

PR target/93615
* config/arm/unwind-arm.h (gnu_Unwind_Find_got): Rename to ...
(_Unwind_gnu_Find_got): ... this.  Use __asm instead of asm.  Remove
trailing :s in asm.  Formatting fixes.
(_Unwind_decode_typeinfo_ptr): Adjust caller.

* gcc.dg/pr93615.c: New test.
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr93615.c [new file with mode: 0644]
libgcc/ChangeLog
libgcc/config/arm/unwind-arm.h