From: itojun Date: Sun, 19 Nov 2000 13:37:20 +0000 (+0000) Subject: netbsd 1.5 -> 1.6 X-Git-Tag: libpcap-0.6.1~36 X-Git-Url: https://git.tcpdump.org/libpcap/commitdiff_plain/20784fd22c1b36980376eebb172307c68758d1ea netbsd 1.5 -> 1.6 Fix a hairy optimizer bug that causes the expression: 'ip and ((icmp and dst host 1.1.1.1 and not host 2.2.2.2) or (host 1.1.1.1 and src host 3.3.3.3))' to compile incorrectly. Details about to be mailed to LBL. --- diff --git a/optimize.c b/optimize.c index 453d49d9..90a81fdf 100644 --- a/optimize.c +++ b/optimize.c @@ -22,7 +22,7 @@ */ #ifndef lint static const char rcsid[] = - "@(#) $Header: /tcpdump/master/libpcap/optimize.c,v 1.66 2000-10-28 01:22:53 guy Exp $ (LBL)"; + "@(#) $Header: /tcpdump/master/libpcap/optimize.c,v 1.67 2000-11-19 13:37:20 itojun Exp $ (LBL)"; #endif #ifdef HAVE_CONFIG_H @@ -1486,6 +1486,8 @@ opt_blks(root, do_stmts) init_val(); maxlevel = root->level; + + find_inedges(root); for (i = maxlevel; i >= 0; --i) for (p = levels[i]; p; p = p->link) opt_blk(p, do_stmts); @@ -1503,6 +1505,8 @@ opt_blks(root, do_stmts) opt_j(&p->ef); } } + + find_inedges(root); for (i = 1; i <= maxlevel; ++i) { for (p = levels[i]; p; p = p->link) { or_pullup(p); @@ -1582,7 +1586,6 @@ opt_loop(root, do_stmts) find_levels(root); find_dom(root); find_closure(root); - find_inedges(root); find_ud(root); find_edom(root); opt_blks(root, do_stmts);