diff --git a/src/las.c b/src/las.c index 3cd8b1d8671eaffee8d5c997fa297a9f17fc6157..c17889f13ff10a00d5d1b9ed8587bf3944ae164b 100644 --- a/src/las.c +++ b/src/las.c @@ -2962,7 +2962,7 @@ static int depend_p2(node *a, node *b) static int depend_p3(node *a,node *b) { - if(!b) return 0; + if(!b || !a) return 0; #if 0 if(!(b->tree_info & OPT_SIDE_EFFECT) && (b->tree_info & OPT_EXTERNAL_DEPEND)) diff --git a/src/treeopt.in b/src/treeopt.in index 4115308a46c769dc2f77dceb470e643cb637b86f..26c6c5fe69298a6ee2a0f6549b3c0a478fbf9449 100644 --- a/src/treeopt.in +++ b/src/treeopt.in @@ -1634,7 +1634,7 @@ F_LOOP(0 = +[ !depend_p($$, $$)] // also change the code for F_ASSIGN_SELF in docode.c. // // It _knows_ what the nodes look like. -F_ADD_EQ(0,1) : +F_ADD_EQ(0 = +, 1) : { struct pike_type *type = $0->type; int oper = (($0->tree_info&(OPT_SIDE_EFFECT|OPT_ASSIGNMENT)) || @@ -1642,7 +1642,7 @@ F_ADD_EQ(0,1) : $$ = mknode( oper, mksoftcastnode(type,mkopernode( "`+", $0, $1 )), $0 ); }; -F_SUB_EQ(0,1) : +F_SUB_EQ(0 = +, 1) : { struct pike_type *type = $0->type; int oper = (($0->tree_info&(OPT_SIDE_EFFECT|OPT_ASSIGNMENT)) || @@ -1650,7 +1650,7 @@ F_SUB_EQ(0,1) : $$ = mknode( oper, mksoftcastnode(type,mkopernode( "`-", $0, $1 )), $0 ); }; -F_AND_EQ(0,1) : +F_AND_EQ(0 = +, 1) : { struct pike_type *type = $0->type; int oper = (($0->tree_info&(OPT_SIDE_EFFECT|OPT_ASSIGNMENT)) || @@ -1658,7 +1658,7 @@ F_AND_EQ(0,1) : $$ = mknode( oper, mksoftcastnode(type,mkopernode( "`&", $0, $1 )), $0 ); }; -F_OR_EQ(0,1) : +F_OR_EQ(0 = +, 1) : { struct pike_type *type = $0->type; int oper = (($0->tree_info&(OPT_SIDE_EFFECT|OPT_ASSIGNMENT)) || @@ -1666,7 +1666,7 @@ F_OR_EQ(0,1) : $$ = mknode( oper, mksoftcastnode(type,mkopernode( "`|", $0, $1 )), $0 ); }; -F_XOR_EQ(0,1) : +F_XOR_EQ(0 = +, 1) : { struct pike_type *type = $0->type; int oper = (($0->tree_info&(OPT_SIDE_EFFECT|OPT_ASSIGNMENT)) || @@ -1674,14 +1674,14 @@ F_XOR_EQ(0,1) : $$ = mknode( oper, mksoftcastnode(type,mkopernode( "`^", $0, $1 )), $0 ); }; -F_LSH_EQ(0,1) : +F_LSH_EQ(0 = +, 1) : { struct pike_type *type = $0->type; int oper = (($0->tree_info&(OPT_SIDE_EFFECT|OPT_ASSIGNMENT)) || depend_p($0, $1)) ? F_ASSIGN_SELF : F_ASSIGN; $$ = mknode( oper, mksoftcastnode(type,mkopernode( "`<<", $0, $1)), $0 ); }; -F_RSH_EQ(0,1) : +F_RSH_EQ(0 = +, 1) : { struct pike_type *type = $0->type; int oper = (($0->tree_info&(OPT_SIDE_EFFECT|OPT_ASSIGNMENT)) || @@ -1689,7 +1689,7 @@ F_RSH_EQ(0,1) : $$ = mknode( oper, mksoftcastnode(type,mkopernode( "`>>", $0, $1)), $0 ); }; -F_MULT_EQ(0,1): +F_MULT_EQ(0 = +, 1): { struct pike_type *type = $0->type; int oper = (($0->tree_info&(OPT_SIDE_EFFECT|OPT_ASSIGNMENT)) || @@ -1697,7 +1697,7 @@ F_MULT_EQ(0,1): $$ = mknode( oper, mksoftcastnode(type,mkopernode( "`*", $0, $1 )), $0 ); }; -F_MOD_EQ(0,1) : +F_MOD_EQ(0 = +, 1) : { struct pike_type *type = $0->type; int oper = (($0->tree_info&(OPT_SIDE_EFFECT|OPT_ASSIGNMENT)) || @@ -1705,7 +1705,7 @@ F_MOD_EQ(0,1) : $$ = mknode( oper, mksoftcastnode(type,mkopernode( "`%", $0, $1 )), $0 ); }; -F_DIV_EQ(0,1) : +F_DIV_EQ(0 = +, 1) : { struct pike_type *type = $0->type; int oper = (($0->tree_info&(OPT_SIDE_EFFECT|OPT_ASSIGNMENT)) ||