From 000ee4226e2ab2a8dde53f831e97d929dfaaa4a3 Mon Sep 17 00:00:00 2001
From: Ben Cumming <louncharf@gmail.com>
Date: Mon, 20 Feb 2017 10:38:03 +0100
Subject: [PATCH] Fix pointer to view conversion for optimized intel kernels
 (#153)

Bug: `modcc` was generating invalid code when generating optimized kernels.

The optimized kernels use raw pointers instead of views, and the generated code was using view semantics.

* Use appropriate `memory::copy` invocation for the optimized kernel case.
---
 modcc/cprinter.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/modcc/cprinter.cpp b/modcc/cprinter.cpp
index c588c5ec..f4c9de89 100644
--- a/modcc/cprinter.cpp
+++ b/modcc/cprinter.cpp
@@ -136,7 +136,12 @@ CPrinter::CPrinter(Module &m, bool o)
     if (m.kind() == moduleKind::density) {
         text_.add_line("// add the user-supplied weights for converting from current density");
         text_.add_line("// to per-compartment current in nA");
-        text_.add_line("memory::copy(weights, weights_(0, size()));");
+        if(optimize_) {
+            text_.add_line("memory::copy(weights, view(weights_, size()));");
+        }
+        else {
+            text_.add_line("memory::copy(weights, weights_(0, size()));");
+        }
         text_.add_line();
     }
 
-- 
GitLab