diff --git a/test.sh.in b/test.sh.in
index 92877885..8779d861 100755
--- a/test.sh.in
+++ b/test.sh.in
@@ -223,10 +223,14 @@ done
# Openscop inputs
echo -e "\nTest with Openscop as input"
echo "============================="
-TESTS_OPENSCOP="./test/gemver.scop"
+TESTS_OPENSCOP="\
+ @top_srcdir@/test/gemver.scop \
+ @top_srcdir@/test/simple-case-verification.scop \
+ @top_srcdir@/test/simple-case-computation.scop \
+ "
for file in $TESTS_OPENSCOP; do
printf '%-50s ' "$file"
- $PLUTO --readscop "$file" --tile --parallel -o "$PLUTO_OUTPUT" 2>&1 | $FILECHECK "$file"
+ $PLUTO --readscop "$file" --tile --parallel -o "$PLUTO_OUTPUT" 2>&1 | $FILECHECK "$file"
check_ret_val_emit_status
done
diff --git a/test/simple-case-computation.scop b/test/simple-case-computation.scop
new file mode 100644
index 00000000..b976b3de
--- /dev/null
+++ b/test/simple-case-computation.scop
@@ -0,0 +1,231 @@
+# [File generated by the OpenScop Library 0.9.5]
+
+
+
+# =============================================== Global
+# Language
+C
+
+# Context
+CONTEXT
+4 4 0 0 0 2
+# e/i|chu. chu.| 1
+ 1 1 0 -16 ## chunk_lower-16 >= 0
+ 1 -1 1 -1 ## -chunk_lower+chunk_upper-1 >= 0
+ 1 1 -1 1024 ## chunk_lower-chunk_upper+1024 >= 0
+ 1 0 -1 49999 ## -chunk_upper+49999 >= 0
+
+# Parameters are provided
+1
+
+chunk_lower chunk_upper
+
+
+# Number of statements
+2
+
+# =============================================== Statement 1
+# Number of relations describing the statement:
+3
+
+# ---------------------------------------------- 1.1 Domain
+DOMAIN
+4 6 2 0 0 2
+# e/i|vi_0 vi_1|chu. chu.| 1
+ 1 1 0 -1 0 0 ## vi_0-chunk_lower >= 0
+ 1 -1 0 0 1 0 ## -vi_0+chunk_upper >= 0
+ 1 0 1 0 0 0 ## vi_1 >= 0
+ 1 0 -1 0 0 49999 ## -vi_1+49999 >= 0
+
+# ---------------------------------------------- 1.2 Scattering
+SCATTERING
+5 11 5 2 0 2
+# e/i| c1 c2 c3 c4 c5 |vi_0 vi_1|chu. chu.| 1
+ 0 -1 0 0 0 0 0 0 0 0 0 ## c1 == 0
+ 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == vi_0
+ 0 0 0 -1 0 0 0 0 0 0 0 ## c3 == 0
+ 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == vi_1
+ 0 0 0 0 0 -1 0 0 0 0 0 ## c5 == 0
+
+# ---------------------------------------------- 1.3 Access
+WRITE
+2 8 2 2 0 2
+# e/i| Arr [1]|vi_0 vi_1|chu. chu.| 1
+ 0 -1 0 0 0 0 0 1 ## Arr == Mem_1
+ 0 0 -1 0 1 0 0 0 ## [1] == vi_1
+
+# ---------------------------------------------- 1.4 Statement Extensions
+# Number of Statement Extensions
+1
+
+# Number of original iterators
+2
+# List of original iterators
+vi_0 vi_1
+# Statement body expression
+apollo_bone.nest_0.stmt_0
+
+
+# =============================================== Statement 2
+# Number of relations describing the statement:
+4
+
+# ---------------------------------------------- 2.1 Domain
+DOMAIN
+2 5 1 0 0 2
+# e/i|vi_0|chu. chu.| 1
+ 1 1 -1 0 0 ## vi_0-chunk_lower >= 0
+ 1 -1 0 1 0 ## -vi_0+chunk_upper >= 0
+
+# ---------------------------------------------- 2.2 Scattering
+SCATTERING
+3 8 3 1 0 2
+# e/i| c1 c2 c3 |vi_0|chu. chu.| 1
+ 0 -1 0 0 0 0 0 0 ## c1 == 0
+ 0 0 -1 0 1 0 0 0 ## c2 == vi_0
+ 0 0 0 -1 0 0 0 1 ## c3 == 1
+
+# ---------------------------------------------- 2.3 Access
+READ
+2 7 2 1 0 2
+# e/i| Arr [1]|vi_0|chu. chu.| 1
+ 0 -1 0 0 0 0 1 ## Arr == Mem_1
+ 0 0 -1 1 0 0 0 ## [1] == vi_0
+
+WRITE
+2 7 2 1 0 2
+# e/i| Arr [1]|vi_0|chu. chu.| 1
+ 0 -1 0 0 0 0 2 ## Arr == Mem_2
+ 0 0 -1 1 0 0 -16 ## [1] == vi_0-16
+
+# ---------------------------------------------- 2.4 Statement Extensions
+# Number of Statement Extensions
+1
+
+# Number of original iterators
+1
+# List of original iterators
+vi_0
+# Statement body expression
+apollo_bone.nest_0.stmt_2
+
+
+# =============================================== Extensions
+
+# Number of arrays
+2
+# Mapping array-identifiers/array-names
+1 Mem_1
+2 Mem_2
+
+
+
+# Number of dependences
+3
+# Description of dependence 1
+# type
+WAW #(output)
+# From source statement id
+0
+# To target statement id
+0
+# Depth
+1
+# From source access ref
+0
+# To target access ref
+0
+# Dimension information
+# 1 src-out-dom, 2 src-out-acc, 3 tgt-out-dom, 4 tgt-out-acc
+# 5 src-loc-dom, 6 src-loc-acc, 7 tgt-loc-dom, 8 tgt-loc-acc
+2 2 2 2 0 0 0 0
+# Dependence domain
+UNDEFINED
+15 12 4 4 0 2
+# e/i| c1 c2 c3 c4 | i1 i2 i3 i4 | P1 P2 | 1
+ 1 1 0 0 0 0 0 0 0 -1 0 0 ## c1-P1 >= 0
+ 1 -1 0 0 0 0 0 0 0 0 1 0 ## -c1+P2 >= 0
+ 1 0 1 0 0 0 0 0 0 0 0 0 ## c2 >= 0
+ 1 0 -1 0 0 0 0 0 0 0 0 49999 ## -c2+49999 >= 0
+ 1 0 0 0 0 1 0 0 0 -1 0 0 ## i1-P1 >= 0
+ 1 0 0 0 0 -1 0 0 0 0 1 0 ## -i1+P2 >= 0
+ 1 0 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0
+ 1 0 0 0 0 0 -1 0 0 0 0 49999 ## -i2+49999 >= 0
+ 0 0 0 -1 0 0 0 0 0 0 0 1 ## c3 == 1
+ 0 0 1 0 -1 0 0 0 0 0 0 0 ## c2-c4 == 0
+ 0 0 0 0 0 0 0 1 0 0 0 -1 ## i3-1 == 0
+ 0 0 0 0 0 0 -1 0 1 0 0 0 ## -i2+i4 == 0
+ 0 0 0 -1 0 0 0 1 0 0 0 0 ## c3 == i3
+ 0 0 0 0 -1 0 0 0 1 0 0 0 ## c4 == i4
+ 1 -1 0 0 0 1 0 0 0 0 0 -1 ## -c1+i1-1 >= 0
+# Description of dependence 2
+# type
+RAW #(flow)
+# From source statement id
+0
+# To target statement id
+1
+# Depth
+1
+# From source access ref
+0
+# To target access ref
+0
+# Dimension information
+# 1 src-out-dom, 2 src-out-acc, 3 tgt-out-dom, 4 tgt-out-acc
+# 5 src-loc-dom, 6 src-loc-acc, 7 tgt-loc-dom, 8 tgt-loc-acc
+2 2 1 2 0 0 0 0
+# Dependence domain
+UNDEFINED
+13 11 4 3 0 2
+# e/i| c1 c2 c3 c4 | i1 i2 i3 | P1 P2 | 1
+ 1 1 0 0 0 0 0 0 -1 0 0 ## c1-P1 >= 0
+ 1 -1 0 0 0 0 0 0 0 1 0 ## -c1+P2 >= 0
+ 1 0 1 0 0 0 0 0 0 0 0 ## c2 >= 0
+ 1 0 -1 0 0 0 0 0 0 0 49999 ## -c2+49999 >= 0
+ 1 0 0 0 0 1 0 0 -1 0 0 ## i1-P1 >= 0
+ 1 0 0 0 0 -1 0 0 0 1 0 ## -i1+P2 >= 0
+ 0 0 0 -1 0 0 0 0 0 0 1 ## c3 == 1
+ 0 0 1 0 -1 0 0 0 0 0 0 ## c2-c4 == 0
+ 0 0 0 0 0 0 1 0 0 0 -1 ## i2-1 == 0
+ 0 0 0 0 0 -1 0 1 0 0 0 ## -i1+i3 == 0
+ 0 0 0 -1 0 0 1 0 0 0 0 ## c3 == i2
+ 0 0 0 0 -1 0 0 1 0 0 0 ## c4 == i3
+ 1 -1 0 0 0 1 0 0 0 0 0 ## -c1+i1 >= 0
+# Description of dependence 3
+# type
+WAR #(anti)
+# From source statement id
+1
+# To target statement id
+0
+# Depth
+1
+# From source access ref
+0
+# To target access ref
+0
+# Dimension information
+# 1 src-out-dom, 2 src-out-acc, 3 tgt-out-dom, 4 tgt-out-acc
+# 5 src-loc-dom, 6 src-loc-acc, 7 tgt-loc-dom, 8 tgt-loc-acc
+1 2 2 2 0 0 0 0
+# Dependence domain
+UNDEFINED
+13 11 3 4 0 2
+# e/i| c1 c2 c3 | i1 i2 i3 i4 | P1 P2 | 1
+ 1 1 0 0 0 0 0 0 -1 0 0 ## c1-P1 >= 0
+ 1 -1 0 0 0 0 0 0 0 1 0 ## -c1+P2 >= 0
+ 1 0 0 0 1 0 0 0 -1 0 0 ## i1-P1 >= 0
+ 1 0 0 0 -1 0 0 0 0 1 0 ## -i1+P2 >= 0
+ 1 0 0 0 0 1 0 0 0 0 0 ## i2 >= 0
+ 1 0 0 0 0 -1 0 0 0 0 49999 ## -i2+49999 >= 0
+ 0 0 -1 0 0 0 0 0 0 0 1 ## c2 == 1
+ 0 1 0 -1 0 0 0 0 0 0 0 ## c1-c3 == 0
+ 0 0 0 0 0 0 1 0 0 0 -1 ## i3-1 == 0
+ 0 0 0 0 0 -1 0 1 0 0 0 ## -i2+i4 == 0
+ 0 0 -1 0 0 0 1 0 0 0 0 ## c2 == i3
+ 0 0 0 -1 0 0 0 1 0 0 0 ## c3 == i4
+ 1 -1 0 0 1 0 0 0 0 0 -1 ## -c1+i1-1 >= 0
+
+
+
diff --git a/test/simple-case-verification.scop b/test/simple-case-verification.scop
new file mode 100644
index 00000000..27a8748e
--- /dev/null
+++ b/test/simple-case-verification.scop
@@ -0,0 +1,36 @@
+# [File generated by the OpenScop Library 0.9.5]
+
+
+
+# =============================================== Global
+# Language
+C
+
+# Context
+CONTEXT
+4 4 0 0 0 2
+# e/i|chu. chu.| 1
+ 1 1 0 -16 ## chunk_lower-16 >= 0
+ 1 -1 1 -1 ## -chunk_lower+chunk_upper-1 >= 0
+ 1 1 -1 1024 ## chunk_lower-chunk_upper+1024 >= 0
+ 1 0 -1 49999 ## -chunk_upper+49999 >= 0
+
+# Parameters are provided
+1
+
+chunk_lower chunk_upper
+
+
+# Number of statements
+0
+
+# =============================================== Extensions
+
+# Number of arrays
+2
+# Mapping array-identifiers/array-names
+1 Mem_1
+2 Mem_2
+
+
+
diff --git a/tool/osl_pluto.c b/tool/osl_pluto.c
index f0deff62..f7fffa75 100644
--- a/tool/osl_pluto.c
+++ b/tool/osl_pluto.c
@@ -1501,15 +1501,20 @@ static Dep **deps_read(osl_dependence_p candlDeps, PlutoProg *prog) {
switch (candl_dep->type) {
case OSL_DEPENDENCE_RAW:
dep->type = PLUTO_DEP_RAW;
+ break;
case OSL_DEPENDENCE_WAW:
dep->type = PLUTO_DEP_WAW;
+ break;
case OSL_DEPENDENCE_WAR:
dep->type = PLUTO_DEP_WAR;
+ break;
case OSL_DEPENDENCE_RAR:
dep->type = PLUTO_DEP_RAR;
+ break;
case OSL_UNDEFINED:
default:
dep->type = PLUTO_DEP_UNDEFINED;
+ break;
}
dep->src = candl_dep->label_source;
dep->dest = candl_dep->label_target;
@@ -1666,7 +1671,10 @@ PlutoProg *osl_scop_to_pluto_prog(osl_scop_p scop, PlutoContext *context) {
osl_statement_p scop_stmt = scop->statement;
- prog->nvar = osl_statement_get_nb_iterators(scop_stmt);
+ // osl_scop_to_pluto_prog crashes if scop->statement is null
+ // which can happen on empty scop. To fix that, we prevent
+ // the call to osl_statement_get_nb_iterators
+ prog->nvar = !scop_stmt ? 0 : osl_statement_get_nb_iterators(scop_stmt);
max_sched_rows = 0;
for (i = 0; i < prog->nstmts; i++) {
int stmt_num_iter = osl_statement_get_nb_iterators(scop_stmt);