View Issue Details

IDProjectCategoryView StatusLast Update
0004413Slicer4Module EMSegmentpublic2017-08-17 09:06
Reporterpieper Assigned Topohl  
PrioritynormalSeveritymajorReproducibilityhave not tried
Status closedResolutionfixed 
Product Version 
Target VersionFixed in VersionSlicer 4.7.0 
Summary0004413: build error with gcc 6.3
Description

Use of abs() on a short type gives a build error when using it as an array index on gcc 6.3. Apparently the result of abs() is being treated as a double even though the input variables are of type short.

A fix is to cast the result of abs() resolves the issue:

<pre>
$ (cd EMSegment; svn diff)
Index: AMF/vtkImagePropagateDist.cxx

--- AMF/vtkImagePropagateDist.cxx (revision 17135)
+++ AMF/vtkImagePropagateDist.cxx (working copy)
@@ -61,7 +61,7 @@

#define dist2(a,b,c) (sq[abs(a)]+sq[abs(b)]+sq[abs(c)])
-#define dist(a,b,c) (distance[abs(a)][abs(b)][abs(c)])
+#define dist(a,b,c) (distance[(int)abs(a)][(int)abs(b)][(int)abs(c)])

</pre>

Additional Information

Here is the build error:

<pre>
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx: In member function \u2018void vtkImagePropagateDist::PropagateDanielsson2D()\u2019:
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:64:38: error: invalid types \u2018double[gnu_cxx::__enable_if<true, double>::type {aka double}]\u2019 for array subscript
#define dist(a,b,c) (distance[abs(a)][abs(b)][abs(c)])
^
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:408:24: note: in expansion of macro \u2018dist\u2019
val = val0 + dist(dx,dy,0);
^~~~
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:64:38: error: invalid types \u2018double
[gnu_cxx::__enable_if<true, double>::type {aka double}]\u2019 for array subscript
#define dist(a,b,c) (distance[abs(a)][abs(b)][abs(c)])
^
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:421:24: note: in expansion of macro \u2018dist\u2019
val = val0 - dist(dx,dy,0);
^~~~
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:64:38: error: invalid types \u2018double[gnu_cxx::__enable_if<true, double>::type {aka double}]\u2019 for array subscript
#define dist(a,b,c) (distance[abs(a)][abs(b)][abs(c)])
^
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:515:24: note: in expansion of macro \u2018dist\u2019
val = val0 + dist(dx,dy,0);
^~~~
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:64:38: error: invalid types \u2018double
[gnu_cxx::__enable_if<true, double>::type {aka double}]\u2019 for array subscript
#define dist(a,b,c) (distance[abs(a)][abs(b)][abs(c)])
^
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:530:24: note: in expansion of macro \u2018dist\u2019
val = val0 - dist(dx,dy,0);
^~~~
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx: In member function \u2018void vtkImagePropagateDist::PropagateDanielsson3D()\u2019:
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:64:38: error: invalid types \u2018double[gnu_cxx::__enable_if<true, double>::type {aka double}]\u2019 for array subscript
#define dist(a,b,c) (distance[abs(a)][abs(b)][abs(c)])
^
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:858:24: note: in expansion of macro \u2018dist\u2019
val = val0 + dist(dx,dy,dz);
^~~~
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:64:38: error: invalid types \u2018double
[gnu_cxx::__enable_if<true, double>::type {aka double}]\u2019 for array subscript
#define dist(a,b,c) (distance[abs(a)][abs(b)][abs(c)])
^
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:871:24: note: in expansion of macro \u2018dist\u2019
val = val0 - dist(dx,dy,dz);
^~~~
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:64:38: error: invalid types \u2018double[gnu_cxx::__enable_if<true, double>::type {aka double}]\u2019 for array subscript
#define dist(a,b,c) (distance[abs(a)][abs(b)][abs(c)])
^
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:971:22: note: in expansion of macro \u2018dist\u2019
val = val0 + dist(dx,dy,dz);
^~~~
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:64:38: error: invalid types \u2018double
[gnu_cxx::__enable_if<true, double>::type {aka double}]\u2019 for array subscript
#define dist(a,b,c) (distance[abs(a)][abs(b)][abs(c)])
^
/home/researcher/Slicer-superbuild/EMSegment/AMF/vtkImagePropagateDist.cxx:987:22: note: in expansion of macro \u2018dist\u2019
val = val0 - dist(dx,dy,dz);
^~~~
Modules/Remote/EMSegment/Qt/Logic/CMakeFiles/vtkSlicerEMSegmentModuleLogic.dir/build.make:1082: recipe for target 'Modules/Remote/EMSegment/Qt/Logic/CMakeFiles/vtkSlicerEMSegmentModuleLogic.dir///AMF/vtkImagePropagateDist.cxx.o' failed
make[2]: [Modules/Remote/EMSegment/Qt/Logic/CMakeFiles/vtkSlicerEMSegmentModuleLogic.dir///AMF/vtkImagePropagateDist.cxx.o] Error 1
CMakeFiles/Makefile2:31535: recipe for target 'Modules/Remote/EMSegment/Qt/Logic/CMakeFiles/vtkSlicerEMSegmentModuleLogic.dir/all' failed
make[1]:
[Modules/Remote/EMSegment/Qt/Logic/CMakeFiles/vtkSlicerEMSegmentModuleLogic.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2
</pre>

TagsNo tags attached.

Activities

Issue History

Date Modified Username Field Change
2017-08-14 16:33 pieper New Issue
2017-08-14 16:33 pieper Status new => assigned
2017-08-14 16:33 pieper Assigned To => pohl
2017-08-14 16:35 pieper Description Updated View Revisions
2017-08-14 16:35 pieper Additional Information Updated View Revisions
2017-08-15 16:28 pieper Status assigned => resolved
2017-08-15 16:28 pieper Resolution open => fixed
2017-08-15 16:28 pieper Fixed in Version => Slicer 4.7.0
2017-08-15 16:28 pieper Note Added: 0015051
2017-08-17 09:06 pieper Status resolved => closed