aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/show-parse.c
diff options
authorLinus Torvalds <torvalds@home.osdl.org>2004-02-12 13:41:42 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-04-07 21:01:23 -0700
commitdcc3d37fdc742914668f4e37f17024a95466ed80 (patch)
tree9b2a9c2cb59f439ac82b426cb7042bb41b39586d /show-parse.c
parent80458cde49e9fe8ea090279f94713f6410d35032 (diff)
downloadsparse-dev-dcc3d37fdc742914668f4e37f17024a95466ed80.tar.gz
Add proper linearization of switch statements.
Diffstat (limited to 'show-parse.c')
-rw-r--r--show-parse.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/show-parse.c b/show-parse.c
index 4e5989b7..f58b046a 100644
--- a/show-parse.c
+++ b/show-parse.c
@@ -542,6 +542,23 @@ int show_statement(struct statement *stmt)
break;
}
+ case STMT_MULTIVALUE: {
+ int val = show_expression(stmt->expression);
+ printf("\tSWITCH\t\tv%d\n", val);
+ break;
+ }
+
+ case STMT_MULTIJMP: {
+ long long from = 0, to = 0;
+ if (stmt->multi_from && stmt->multi_from->type == EXPR_VALUE)
+ from = stmt->multi_from->value;
+ to = from;
+ if (stmt->multi_to && stmt->multi_to->type == EXPR_VALUE)
+ to = stmt->multi_to->value;
+ printf("\tIF %lld..%lld goto .L%p\n", from, to, stmt->multi_target->bb_target);
+ break;
+ }
+
}
return 0;
}