diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6f67e8586caa73dfb35f9b780134b47747aa6cbe..ed31c56f95fe0c7efe40c8930dba4305b4a3cdd6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2009-10-09  Richard Guenther  <rguenther@suse.de>
+
+	* cgraph.c (cgraph_create_edge): Check for NULL call_stmt
+	before calling stmt_can_throw_external.
+
 2009-10-09  Eric Botcazou  <ebotcazou@adacore.com>
 
 	PR tree-optimization/40071
diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 01fbb9a85d79610e7761127cdcb80f7c332238f3..167e8a8e7b408217bd1aeccba404f4ef6bdbe93f 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -822,9 +822,9 @@ cgraph_create_edge (struct cgraph_node *caller, struct cgraph_node *callee,
   if (call_stmt)
     {
 #ifdef ENABLE_CHECKING
-  /* This is rather pricely check possibly trigerring construction of call stmt
-     hashtable.  */
-  gcc_assert (!cgraph_edge (caller, call_stmt));
+      /* This is rather pricely check possibly trigerring construction of
+	 call stmt hashtable.  */
+      gcc_assert (!cgraph_edge (caller, call_stmt));
 #endif
 
       gcc_assert (is_gimple_call (call_stmt));
@@ -847,7 +847,8 @@ cgraph_create_edge (struct cgraph_node *caller, struct cgraph_node *callee,
   edge->callee = callee;
   edge->call_stmt = call_stmt;
   push_cfun (DECL_STRUCT_FUNCTION (caller->decl));
-  edge->can_throw_external = stmt_can_throw_external (call_stmt);
+  edge->can_throw_external
+    = call_stmt ? stmt_can_throw_external (call_stmt) : false;
   pop_cfun ();
   edge->prev_caller = NULL;
   edge->next_caller = callee->callers;