`build_personality_function` generates a declaration for a personality function. The type it declares for these functions doesn't match the type of the actual personality functions that are defined by the C++ unwinding ABI.
This doesn't cause any crashes since the compiler never generates a call to these decl's, and hence the type of the function is never used. Nonetheless, for the sake of consistency and readability we update the type of this declaration. (See libstdc++-v3/libsupc++/unwind-cxx.h for declaration of _gxx_personality_v0 to compare types). gcc/ChangeLog: 2019-11-05 Matthew Malcomson <matthew.malcom...@arm.com> * expr.c (build_personality_function): Fix generated type to match actual personality functions. ############### Attachment also inlined for ease of reply ############### diff --git a/gcc/expr.c b/gcc/expr.c index 2f2b53f8b6905013b4214eea137d67c666b0c795..7dc37a288ebffb99c990442cf339b848c5fa9d2e 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -12525,7 +12525,8 @@ build_personality_function (const char *lang) name = ACONCAT (("__", lang, "_personality", unwind_and_version, NULL)); - type = build_function_type_list (integer_type_node, integer_type_node, + type = build_function_type_list (unsigned_type_node, + integer_type_node, integer_type_node, long_long_unsigned_type_node, ptr_type_node, ptr_type_node, NULL_TREE); decl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,
diff --git a/gcc/expr.c b/gcc/expr.c index 2f2b53f8b6905013b4214eea137d67c666b0c795..7dc37a288ebffb99c990442cf339b848c5fa9d2e 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -12525,7 +12525,8 @@ build_personality_function (const char *lang) name = ACONCAT (("__", lang, "_personality", unwind_and_version, NULL)); - type = build_function_type_list (integer_type_node, integer_type_node, + type = build_function_type_list (unsigned_type_node, + integer_type_node, integer_type_node, long_long_unsigned_type_node, ptr_type_node, ptr_type_node, NULL_TREE); decl = build_decl (UNKNOWN_LOCATION, FUNCTION_DECL,