diff --git a/src/language.yacc b/src/language.yacc
index 168d7588237b7d1d274da9ddb37a97b145b66779..c33df314e5a1dbb8c247c0c54e5c15a51ec8e2e4 100644
--- a/src/language.yacc
+++ b/src/language.yacc
@@ -3589,14 +3589,14 @@ expr4: string
   | expr4 TOK_SAFE_START_INDEX line_number_info expr0 ']'
   {
     /* A[?X] to ((tmp=A) && tmp[X]) */
-    if( $1->token == F_LOCAL )
+    if( $1 && ($1->token == F_LOCAL) )
     {
       $$=mknode(F_LAND, copy_node($1), mknode(F_INDEX,  $1, $4));
     }
     else
     {
       fix_type_field( $1 );
-      if( $1->type )
+      if( $1 && $1->type )
       {
         int temporary;
         $1->type->refs++;
@@ -3621,14 +3621,14 @@ expr4: string
   {
     /* A[?X..Y] to ((tmp=A) && tmp[X..Y]) */
     node *range = mknode(':',$4,$6);
-    if( $1->token == F_LOCAL )
+    if( $1 && ($1->token == F_LOCAL ) )
     {
       $$ = mknode( F_LAND, copy_node($1), mknode(F_RANGE, $1, range) );
     }
     else
     {
       fix_type_field( $1 );
-      if( $1->type )
+      if( $1 && $1->type )
       {
         int temporary;
         $1->type->refs++;
@@ -3735,7 +3735,7 @@ expr4: string
   {
     /* A?->B to ((tmp=A) && tmp->B) */
     int temporary;
-    if( $1->token == F_LOCAL )
+    if( $1 && ($1->token == F_LOCAL) )
     {
       $$=mknode(F_LAND, copy_node($1), mknode(F_ARROW, $1, $4));
     }
diff --git a/src/las.c b/src/las.c
index c17889f13ff10a00d5d1b9ed8587bf3944ae164b..ea284d53d564a01d64d8954cdf7e7d345069cc16 100644
--- a/src/las.c
+++ b/src/las.c
@@ -3167,7 +3167,7 @@ void fix_type_field(node *n)
   struct pike_type *type_a, *type_b;
   struct pike_type *old_type;
 
-  if (n->type && !(n->node_info & OPT_TYPE_NOT_FIXED))
+  if (!n || (n->type && !(n->node_info & OPT_TYPE_NOT_FIXED)))
     return; /* assume it is correct */
 
   old_type = n->type;