aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2022-08-15 16:56:01 +0100
committerGitHub <noreply@github.com>2022-08-15 16:56:01 +0100
commit4f7bbe0e4a14015dffb6c89faf1fc8d4cfb5d809 (patch)
tree9a0b29397a5022b0d85d2e1a052666257c6ebbc8 /src
parent208f168564c18b49deba1027ed5e2d96059e720d (diff)
parentf5431a046decd81ddb6eed7165368a44913eaca1 (diff)
Merge pull request #1927 from IanLilleyT/debug_symbols_for_range_interval
Debug symbols for range-based for loop over number range
Diffstat (limited to 'src')
-rw-r--r--src/llvm_backend_stmt.cpp25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp
index f131bb3db..e55fae3a7 100644
--- a/src/llvm_backend_stmt.cpp
+++ b/src/llvm_backend_stmt.cpp
@@ -458,15 +458,6 @@ void lb_build_range_interval(lbProcedure *p, AstBinaryExpr *node,
val1_type = type_of_expr(rs->vals[1]);
}
- if (val0_type != nullptr) {
- Entity *e = entity_of_node(rs->vals[0]);
- lb_add_local(p, e->type, e, true);
- }
- if (val1_type != nullptr) {
- Entity *e = entity_of_node(rs->vals[1]);
- lb_add_local(p, e->type, e, true);
- }
-
TokenKind op = Token_Lt;
switch (node->op.kind) {
case Token_Ellipsis: op = Token_LtEq; break;
@@ -478,10 +469,22 @@ void lb_build_range_interval(lbProcedure *p, AstBinaryExpr *node,
lbValue lower = lb_build_expr(p, node->left);
lbValue upper = {}; // initialized each time in the loop
- lbAddr value = lb_add_local_generated(p, val0_type ? val0_type : lower.type, false);
+ lbAddr value;
+ if (val0_type != nullptr) {
+ Entity *e = entity_of_node(rs->vals[0]);
+ value = lb_add_local(p, val0_type, e, false);
+ } else {
+ value = lb_add_local_generated(p, lower.type, false);
+ }
lb_addr_store(p, value, lower);
- lbAddr index = lb_add_local_generated(p, t_int, false);
+ lbAddr index;
+ if (val1_type != nullptr) {
+ Entity *e = entity_of_node(rs->vals[1]);
+ index = lb_add_local(p, val1_type, e, false);
+ } else {
+ index = lb_add_local_generated(p, t_int, false);
+ }
lb_addr_store(p, index, lb_const_int(m, t_int, 0));
lbBlock *loop = lb_create_block(p, "for.interval.loop");