Skip to content

Commit 012e483

Browse files
committed
BUGFIX: Fixing bugs with variables going out of scope
And that is why you have to be careful with pointers
1 parent 9f88ab3 commit 012e483

1 file changed

Lines changed: 13 additions & 10 deletions

File tree

src/backend/cuda/jit.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,19 @@ void evalNodes(std::vector<Param<T> >&outputs, std::vector<Node *> nodes)
534534
args.push_back(&outputs[i].ptr);
535535
}
536536

537+
// DO NOT PUT THESE IN A SCOPE.
538+
// The pointers are used later.
539+
// Scoping them results in undefined behavior.
540+
541+
int strides[] = {(int)outputs[0].strides[0],
542+
(int)outputs[0].strides[1],
543+
(int)outputs[0].strides[2],
544+
(int)outputs[0].strides[3]};
545+
546+
int dims[] = {(int)outputs[0].dims[0],
547+
(int)outputs[0].dims[1],
548+
(int)outputs[0].dims[2],
549+
(int)outputs[0].dims[3]};
537550

538551
if (is_linear) {
539552
int nelem = 1;
@@ -542,16 +555,6 @@ void evalNodes(std::vector<Param<T> >&outputs, std::vector<Node *> nodes)
542555
}
543556
args.push_back((void *)&nelem);
544557
} else {
545-
int strides[] = {(int)outputs[0].strides[0],
546-
(int)outputs[0].strides[1],
547-
(int)outputs[0].strides[2],
548-
(int)outputs[0].strides[3]};
549-
550-
int dims[] = {(int)outputs[0].dims[0],
551-
(int)outputs[0].dims[1],
552-
(int)outputs[0].dims[2],
553-
(int)outputs[0].dims[3]};
554-
555558
for (int i = 0; i < 4; i++) args.push_back((void *)(strides + i));
556559
for (int i = 0; i < 4; i++) args.push_back((void *)(dims + i));
557560
}

0 commit comments

Comments
 (0)