mirror of
https://github.com/gcc-mirror/gcc.git
synced 2024-11-21 13:40:47 +00:00
dwarf2asm: Use constexpr for eh_data_format_name initialization for C++14
Similarly to the previous patch, dwarf2asm.cc had HAVE_DESIGNATED_INITIALIZERS support, and as fallback a huge switch. The switch from what I can see is expanded as a jump table with 256 label pointers and code at those labels then loads addresses of string literals. The following patch instead uses a table with 256 const char * pointers, NULL for ICE, non-NULL for returning something, similarly to the HAVE_DESIGNATED_INITIALIZERS case. 2024-09-19 Jakub Jelinek <jakub@redhat.com> * dwarf2asm.cc (eh_data_format_name): Use constexpr initialization of format_names table for C++14 instead of a large switch.
This commit is contained in:
parent
cee868ae0d
commit
16dda95e39
@ -488,14 +488,22 @@ eh_data_format_name (int format)
|
||||
{
|
||||
#if HAVE_DESIGNATED_INITIALIZERS
|
||||
#define S(p, v) [p] = v,
|
||||
#elif __cpp_constexpr >= 201304L
|
||||
#define S(p, v) names[p] = v;
|
||||
#else
|
||||
#define S(p, v) case p: return v;
|
||||
#endif
|
||||
|
||||
#if HAVE_DESIGNATED_INITIALIZERS
|
||||
__extension__ static const char * const format_names[256] = {
|
||||
#elif __cpp_constexpr >= 201304L
|
||||
static constexpr struct format_names_s {
|
||||
const char *names[256];
|
||||
constexpr format_names_s () : names {}
|
||||
{
|
||||
#else
|
||||
switch (format) {
|
||||
switch (format)
|
||||
{
|
||||
#endif
|
||||
|
||||
S(DW_EH_PE_absptr, "absolute")
|
||||
@ -635,8 +643,15 @@ eh_data_format_name (int format)
|
||||
gcc_assert (format >= 0 && format < 0x100 && format_names[format]);
|
||||
|
||||
return format_names[format];
|
||||
#elif __cpp_constexpr >= 201304L
|
||||
}
|
||||
} format_names;
|
||||
|
||||
gcc_assert (format >= 0 && format < 0x100 && format_names.names[format]);
|
||||
|
||||
return format_names.names[format];
|
||||
#else
|
||||
}
|
||||
}
|
||||
gcc_unreachable ();
|
||||
#endif
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user