diff options
author | fche <fche> | 2006-04-24 13:17:19 +0000 |
---|---|---|
committer | fche <fche> | 2006-04-24 13:17:19 +0000 |
commit | 72948d62d142a8eff5c698dbe399935fed7be495 (patch) | |
tree | 0010a8ad1fd489ab3229dc9afa908fd260c19f38 | |
parent | 2288c6bb3f8ad1972315d98d8271ae9fbf391cde (diff) | |
download | systemtap-steved-72948d62d142a8eff5c698dbe399935fed7be495.tar.gz systemtap-steved-72948d62d142a8eff5c698dbe399935fed7be495.tar.xz systemtap-steved-72948d62d142a8eff5c698dbe399935fed7be495.zip |
2006-04-24 Frank Ch. Eigler <fche@elastic.org>
PR 2599.
* elaborate.cxx (visit_assignment): Tolerate null current_expr.
* testsuite/semok/optimize.stp: Add relevant tests.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | elaborate.cxx | 9 | ||||
-rwxr-xr-x | testsuite/semok/optimize.stp | 5 |
3 files changed, 18 insertions, 2 deletions
@@ -1,3 +1,9 @@ +2006-04-24 Frank Ch. Eigler <fche@elastic.org> + + PR 2599. + * elaborate.cxx (visit_assignment): Tolerate null current_expr. + * testsuite/semok/optimize.stp: Add relevant tests. + 2006-04-23 Eugene Teo <eteo@redhat.com> PR 2149 diff --git a/elaborate.cxx b/elaborate.cxx index 3db165d4..61e63cb1 100644 --- a/elaborate.cxx +++ b/elaborate.cxx @@ -1306,7 +1306,10 @@ struct dead_assignment_remover: public traversing_visitor session(s), relaxed_p(r), vut(v), current_expr(0) {} void visit_expr_statement (expr_statement* s); - // XXX: and other places where an assignment may be nested + // XXX: other places where an assignment may be nested should be + // handled too (e.g., loop/if conditionals, array indexes, function + // parameters). Until then, they result in visit_assignment() being + // called with null current_expr. void visit_assignment (assignment* e); }; @@ -1328,7 +1331,9 @@ dead_assignment_remover::visit_assignment (assignment* e) { symbol* left = get_symbol_within_expression (e->left); vardecl* leftvar = left->referent; - if (*current_expr == e) // we're not nested any deeper than expected + if (current_expr && // see XXX above: this case represents a missed + // optimization opportunity + *current_expr == e) // we're not nested any deeper than expected { // clog << "Checking assignment to " << leftvar->name << " at " << *e->tok << endl; if (vut.read.find(leftvar) == vut.read.end()) // var never read? diff --git a/testsuite/semok/optimize.stp b/testsuite/semok/optimize.stp index 28ccb46c..bcf8ac04 100755 --- a/testsuite/semok/optimize.stp +++ b/testsuite/semok/optimize.stp @@ -16,3 +16,8 @@ probe begin { b = "goodbye" no . $such . $target + $variable } + +# bug #2599 +probe begin{for(i=1;i-=2;i++);} +probe begin{while(i+=2);} +probe begin{if(i=j);} |