diff --git a/src/operators.c b/src/operators.c
index 131a29021fd04dfe0334a360ef3b43e190d8df91..b59f198f22036a9c0c2cc736a80c26c26c517e76 100644
--- a/src/operators.c
+++ b/src/operators.c
@@ -2,12 +2,12 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: operators.c,v 1.193 2004/08/24 14:34:06 grubba Exp $
+|| $Id: operators.c,v 1.194 2004/08/25 12:15:29 grubba Exp $
 */
 
 #include "global.h"
 #include <math.h>
-RCSID("$Id: operators.c,v 1.193 2004/08/24 14:34:06 grubba Exp $");
+RCSID("$Id: operators.c,v 1.194 2004/08/25 12:15:29 grubba Exp $");
 #include "interpret.h"
 #include "svalue.h"
 #include "multiset.h"
@@ -1553,7 +1553,8 @@ static int generate_sum(node *n)
     {
       emit0(F_ADD_FLOATS);
     }
-    else if(pike_types_le(first_arg[0]->type, int_type_string) &&
+    else if(first_arg[0]->type && second_arg[0]->type &&
+	    pike_types_le(first_arg[0]->type, int_type_string) &&
 	    pike_types_le(second_arg[0]->type, int_type_string))
     {
       emit0(F_ADD_INTS);
@@ -1581,13 +1582,15 @@ static int generate_sum(node *n)
 	return 1;
       }
     }
-    else if(pike_types_le(first_arg[0]->type, int_type_string) &&
+    else if(first_arg[0]->type && second_arg[0]->type &&
+	    pike_types_le(first_arg[0]->type, int_type_string) &&
 	    pike_types_le(second_arg[0]->type, int_type_string))
     {
       do_docode(*first_arg, 0);
       do_docode(*second_arg, 0);
       emit0(F_ADD_INTS);
-      if (pike_types_le(third_arg[0]->type, int_type_string)) {
+      if (third_arg[0]->type &&
+	  pike_types_le(third_arg[0]->type, int_type_string)) {
 	do_docode(*third_arg, 0);
 	emit0(F_ADD_INTS);
 	return 1;