This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch] diagnostics branch
> Note that init_eh is called during early initialization, where
> current_function_decl is not yet set up. This causes a crash
> due to NULL pointer access here ...
Ah, I see.
In that case, this should fix it.
This is an obviously correct patch, which I will commit when I'm done
with a bootstrap.
Thanks for pin-pointing this for me.
Aldy
* except.c (init_eh): Use BUILTINS_LOCATION when calling build_decl.
Index: except.c
===================================================================
--- except.c (revision 148490)
+++ except.c (working copy)
@@ -221,12 +221,12 @@ init_eh (void)
sjlj_fc_type_node = lang_hooks.types.make_type (RECORD_TYPE);
- f_prev = build_decl (DECL_SOURCE_LOCATION (current_function_decl),
+ f_prev = build_decl (BUILTINS_LOCATION,
FIELD_DECL, get_identifier ("__prev"),
build_pointer_type (sjlj_fc_type_node));
DECL_FIELD_CONTEXT (f_prev) = sjlj_fc_type_node;
- f_cs = build_decl (DECL_SOURCE_LOCATION (current_function_decl),
+ f_cs = build_decl (BUILTINS_LOCATION,
FIELD_DECL, get_identifier ("__call_site"),
integer_type_node);
DECL_FIELD_CONTEXT (f_cs) = sjlj_fc_type_node;
@@ -235,16 +235,16 @@ init_eh (void)
tmp = build_array_type (lang_hooks.types.type_for_mode
(targetm.unwind_word_mode (), 1),
tmp);
- f_data = build_decl (DECL_SOURCE_LOCATION (current_function_decl),
+ f_data = build_decl (BUILTINS_LOCATION,
FIELD_DECL, get_identifier ("__data"), tmp);
DECL_FIELD_CONTEXT (f_data) = sjlj_fc_type_node;
- f_per = build_decl (DECL_SOURCE_LOCATION (current_function_decl),
+ f_per = build_decl (BUILTINS_LOCATION,
FIELD_DECL, get_identifier ("__personality"),
ptr_type_node);
DECL_FIELD_CONTEXT (f_per) = sjlj_fc_type_node;
- f_lsda = build_decl (DECL_SOURCE_LOCATION (current_function_decl),
+ f_lsda = build_decl (BUILTINS_LOCATION,
FIELD_DECL, get_identifier ("__lsda"),
ptr_type_node);
DECL_FIELD_CONTEXT (f_lsda) = sjlj_fc_type_node;
@@ -265,7 +265,7 @@ init_eh (void)
#endif
tmp = build_index_type (tmp);
tmp = build_array_type (ptr_type_node, tmp);
- f_jbuf = build_decl (DECL_SOURCE_LOCATION (current_function_decl),
+ f_jbuf = build_decl (BUILTINS_LOCATION,
FIELD_DECL, get_identifier ("__jbuf"), tmp);
#ifdef DONT_USE_BUILTIN_SETJMP
/* We don't know what the alignment requirements of the