]> The Tcpdump Group git mirrors - libpcap/commitdiff
netbsd 1.5 -> 1.6
authoritojun <itojun>
Sun, 19 Nov 2000 13:37:20 +0000 (13:37 +0000)
committeritojun <itojun>
Sun, 19 Nov 2000 13:37:20 +0000 (13:37 +0000)
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.

optimize.c

index 453d49d9a49919d5ac6096c73a96bf96d4297b4f..90a81fdfad623b0dd078ba7070319afc4c5c735c 100644 (file)
@@ -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);