ccv icon indicating copy to clipboard operation
ccv copied to clipboard

Warnings when building with gcc for OpenMP

Open koudelka opened this issue 13 years ago • 1 comments

I'm trying to build the library with OpenMP support, to train my own classifier. As far as I can tell, clang doesn't support OpenMP, so I'm using gcc. Upon building, I get some interesting warnings on 10.7 that might be of interest.


$ make

 USE: gcc
 COMPILE FLAGS: -msse2 -D USE_OPENMP -fopenmp
 LINK FLAGS: -lm -lgomp

gcc ccv_cache.c -o ccv_cache.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
ccv_cache.c: In function ‘ccv_cache_delete’:
ccv_cache.c:428: warning: comparison is always true due to limited range of data type
gcc ccv_memory.c -o ccv_memory.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc 3rdparty/sha1/sha1.c -o 3rdparty/sha1/sha1.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc 3rdparty/kissfft/kiss_fft.c -o 3rdparty/kissfft/kiss_fft.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc 3rdparty/kissfft/kiss_fftnd.c -o 3rdparty/kissfft/kiss_fftnd.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc 3rdparty/kissfft/kiss_fftr.c -o 3rdparty/kissfft/kiss_fftr.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc 3rdparty/kissfft/kiss_fftndr.c -o 3rdparty/kissfft/kiss_fftndr.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc 3rdparty/kissfft/kissf_fft.c -o 3rdparty/kissfft/kissf_fft.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc 3rdparty/kissfft/kissf_fftnd.c -o 3rdparty/kissfft/kissf_fftnd.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc 3rdparty/kissfft/kissf_fftr.c -o 3rdparty/kissfft/kissf_fftr.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc 3rdparty/kissfft/kissf_fftndr.c -o 3rdparty/kissfft/kissf_fftndr.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc ccv_io.c -o ccv_io.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc ccv_numeric.c -o ccv_numeric.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
ccv_numeric.c: In function ‘ccv_distance_transform’:
ccv_numeric.c:1126: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1126: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1126: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1126: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1126: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1126: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1126: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1126: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1126: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1126: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1128: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1128: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1128: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1128: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1128: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1128: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1128: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1128: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1128: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1128: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1135: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1135: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1135: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1135: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1135: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1135: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1135: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1135: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1135: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1135: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1135: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1135: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1137: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1137: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1137: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1137: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1137: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1137: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1137: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1137: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1137: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1137: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1137: warning: comparison is always false due to limited range of data type
ccv_numeric.c:1137: warning: comparison is always false due to limited range of data type
gcc ccv_algebra.c -o ccv_algebra.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
ccv_algebra.c: In function ‘ccv_sat’:
ccv_algebra.c:108: warning: comparison is always false due to limited range of data type
ccv_algebra.c:108: warning: comparison is always false due to limited range of data type
gcc ccv_util.c -o ccv_util.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
ccv_util.c: In function ‘ccv_flatten’:
ccv_util.c:115: warning: comparison is always false due to limited range of data type
ccv_util.c:115: warning: comparison is always false due to limited range of data type
ccv_util.c:115: warning: comparison is always false due to limited range of data type
ccv_util.c:115: warning: comparison is always false due to limited range of data type
ccv_util.c:115: warning: comparison is always false due to limited range of data type
ccv_util.c:115: warning: comparison is always false due to limited range of data type
ccv_util.c:115: warning: comparison is always false due to limited range of data type
ccv_util.c:115: warning: comparison is always false due to limited range of data type
ccv_util.c:115: warning: comparison is always false due to limited range of data type
ccv_util.c:115: warning: comparison is always false due to limited range of data type
ccv_util.c: In function ‘ccv_compress_sparse_matrix’:
ccv_util.c:407: warning: comparison is always false due to limited range of data type
ccv_util.c:407: warning: comparison is always false due to limited range of data type
ccv_util.c:422: warning: comparison is always false due to limited range of data type
ccv_util.c:422: warning: comparison is always false due to limited range of data type
ccv_util.c: In function ‘ccv_slice’:
ccv_util.c:527: warning: comparison is always false due to limited range of data type
ccv_util.c:527: warning: comparison is always false due to limited range of data type
ccv_util.c: In function ‘ccv_move’:
ccv_util.c:556: warning: comparison is always false due to limited range of data type
ccv_util.c:556: warning: comparison is always false due to limited range of data type
gcc ccv_basic.c -o ccv_basic.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
ccv_basic.c: In function ‘ccv_sobel’:
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c:143: warning: comparison is always false due to limited range of data type
ccv_basic.c: In function ‘ccv_blur’:
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:822: warning: comparison is always false due to limited range of data type
ccv_basic.c:845: warning: comparison is always false due to limited range of data type
ccv_basic.c:845: warning: comparison is always false due to limited range of data type
ccv_basic.c:845: warning: comparison is always false due to limited range of data type
ccv_basic.c:845: warning: comparison is always false due to limited range of data type
ccv_basic.c:845: warning: comparison is always false due to limited range of data type
ccv_basic.c:845: warning: comparison is always false due to limited range of data type
ccv_basic.c:845: warning: comparison is always false due to limited range of data type
ccv_basic.c:845: warning: comparison is always false due to limited range of data type
gcc ccv_classic.c -o ccv_classic.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
ccv_classic.c: In function ‘ccv_hog’:
ccv_classic.c:186: warning: comparison is always false due to limited range of data type
ccv_classic.c: In function ‘ccv_otsu’:
ccv_classic.c:359: warning: comparison is always false due to limited range of data type
gcc ccv_daisy.c -o ccv_daisy.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc ccv_sift.c -o ccv_sift.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc ccv_bbf.c -o ccv_bbf.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc ccv_mser.c -o ccv_mser.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc ccv_swt.c -o ccv_swt.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
gcc ccv_dpm.c -o ccv_dpm.o -c -O3 -ffast-math -Wall -msse2 -D USE_OPENMP -fopenmp
ar rcs libccv.a ccv_cache.o ccv_memory.o 3rdparty/sha1/sha1.o 3rdparty/kissfft/kiss_fft.o 3rdparty/kissfft/kiss_fftnd.o 3rdparty/kissfft/kiss_fftr.o 3rdparty/kissfft/kiss_fftndr.o 3rdparty/kissfft/kissf_fft.o 3rdparty/kissfft/kissf_fftnd.o 3rdparty/kissfft/kissf_fftr.o 3rdparty/kissfft/kissf_fftndr.o ccv_io.o ccv_numeric.o ccv_algebra.o ccv_util.o ccv_basic.o ccv_classic.o ccv_daisy.o ccv_sift.o ccv_bbf.o ccv_mser.o ccv_swt.o ccv_dpm.o

koudelka avatar Jul 07 '12 17:07 koudelka

Yes, most of them (or all of them) are false positives, most notable one is the pinf, pf uninitialized warning. The other warnings are due to the fact ccv uses a "macro expansion" technique to deal with different data types. and unfortunately, this technique is not type-safe. To ensure it won't trigger overflow/underflow, there are a lot assert to check data types. Seems that gcc's analyzer hasn't pick up these assert properly. and for sure, I will suppress these warnings, it is a bad practice to leave a lot warnings in compilation output.

liuliu avatar Jul 07 '12 23:07 liuliu