@@ -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