builtins: erase `struct` modifier for EH personality

On ARM, the `_Unwind_Exception` is an alias for
`struct _Unwind_Control_Block`.  The extra `struct` modifier causes a
warning due to the locally scoped type.  Special case this to avoid the
warning.  NFC.

llvm-svn: 311425
This commit is contained in:
Saleem Abdulrasool 2017-08-22 04:05:50 +00:00
parent 87c6acf38a
commit 94fd3c41fb
1 changed files with 25 additions and 17 deletions

View File

@ -145,23 +145,29 @@ static uintptr_t readEncodedPointer(const uint8_t** data, uint8_t encoding)
#if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \
!defined(__ARM_DWARF_EH__)
#define USING_ARM_EHABI 1
_Unwind_Reason_Code __gnu_unwind_frame(struct _Unwind_Exception *,
_Unwind_Reason_Code __gnu_unwind_frame(_Unwind_Exception *,
struct _Unwind_Context *);
#endif
#if USING_ARM_EHABI
static inline _Unwind_Reason_Code
continueUnwind(_Unwind_Exception *exceptionObject,
struct _Unwind_Context *context) {
/*
* On ARM EHABI the personality routine is responsible for actually
* unwinding a single stack frame before returning (ARM EHABI Sec. 6.1).
*/
if (__gnu_unwind_frame(exceptionObject, context) != _URC_OK)
return _URC_FAILURE;
return _URC_CONTINUE_UNWIND;
}
#else
static inline _Unwind_Reason_Code
continueUnwind(struct _Unwind_Exception *exceptionObject,
struct _Unwind_Context *context) {
#if USING_ARM_EHABI
/*
* On ARM EHABI the personality routine is responsible for actually
* unwinding a single stack frame before returning (ARM EHABI Sec. 6.1).
*/
if (__gnu_unwind_frame(exceptionObject, context) != _URC_OK)
return _URC_FAILURE;
#endif
return _URC_CONTINUE_UNWIND;
return _URC_CONTINUE_UNWIND;
}
#endif
/*
* The C compiler makes references to __gcc_personality_v0 in
@ -176,18 +182,20 @@ continueUnwind(struct _Unwind_Exception *exceptionObject,
* different name */
COMPILER_RT_ABI _Unwind_Reason_Code
__gcc_personality_sj0(int version, _Unwind_Action actions,
uint64_t exceptionClass, struct _Unwind_Exception* exceptionObject,
struct _Unwind_Context *context)
uint64_t exceptionClass,
struct _Unwind_Exception *exceptionObject,
struct _Unwind_Context *context)
#elif USING_ARM_EHABI
/* The ARM EHABI personality routine has a different signature. */
COMPILER_RT_ABI _Unwind_Reason_Code __gcc_personality_v0(
_Unwind_State state, struct _Unwind_Exception *exceptionObject,
struct _Unwind_Context *context)
COMPILER_RT_ABI _Unwind_Reason_Code
__gcc_personality_v0(_Unwind_State state, _Unwind_Exception *exceptionObject,
struct _Unwind_Context *context)
#else
COMPILER_RT_ABI _Unwind_Reason_Code
__gcc_personality_v0(int version, _Unwind_Action actions,
uint64_t exceptionClass, struct _Unwind_Exception* exceptionObject,
struct _Unwind_Context *context)
uint64_t exceptionClass,
struct _Unwind_Exception *exceptionObject,
struct _Unwind_Context *context)
#endif
{
/* Since C does not have catch clauses, there is nothing to do during */