gcc-patches@gcc.gnu.org
[Top] [All Lists]

Re: [patch] diagnostics branch

Subject: Re: [patch] diagnostics branch
From: Aldy Hernandez
Date: Mon, 15 Jun 2009 10:20:39 -0400
> 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

<Prev in Thread] Current Thread [Next in Thread>