G'day,

I've been steering clear of IM, partially as much of its code is from
third-party libraries, and partially because activity on the project SVN
tree was so low.

However, I notice that there were three SVN commits in the past few
day, so, I've started looking at non-third-party code as a candidate for
change.

I'm trying to reduce GCC's warnings, without altering the code
semantics in any way.

I've found that there are a number of cases of the warning
"-Wmisleading-indent", relating to the code:

        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);

Looking at the documentation for free(3), it states that NULL (0) is
explicitly allowed as a parameter, and the call will be a no-op.  The
GNU documentation states that this has been formalised at least in C89,
as well as all C and C++ standards since:  30 years ago.

I know that during the '80s, there were some C compilers that generated
code which crashed if free(NULL) was called, but I believe that in the
modern era, this concern is no longer valid.  Similarly, I believe that
the compiler toolchains handle the NULL case without heavily penalising
the caller (perhaps by defining "free" as a macro internally, and doing
the NULL check in the macro expansion before attempting a call).

Therefore, the above code could be rewritten as:

        free(cm20); free(cm02); free(cm11);

This has three major benefits:

1. The text change to the code is very localised and easy to review,
   and there is no change to the semantics of the program;

2. The code is much easier to read, and to statically analyse.  If
   the code was in a testing regime where every code path had to be
   exercised, each translation such as the one above would cut down the
   number of combinations to be tried by a factor of 8; and

3. The change eliminates the "-Wmisleading-indent" warning, which is a
   particularly verbose item.  For IM r757, the number of warning lines
   (excluding the common header) drops from 275 lines to 215 lines,
   just by patching one file.

Attached are the patch, and the "parse-build.lua" output for IM before
and after applying the patch.

cheers,

sur-behoffski (Brenton Hoff)
programmer, Grouse Software
* No diagnostics for:
   #include expects "FILENAME" or <FILENAME>
   missing binary operator before token "("
   converting to non-pointer type <TYPE> from NULL [-Wconversion-null]
   <FUNC> is deprecated [-Wdeprecated-declarations]
   <FUNC1> is deprecated: Use <FUNC2> instead [-Wdeprecated-declarations]
   assignment discards <TYPE> qualifier from pointer target type 
[-Wdiscarded-qualifiers]
   too many arguments for format [-Wformat-extra-args]
   <FUNC> may write a terminating nul past the end of the destination 
[-Wformat-overflow=]
   <DIRECTIVE> directive writing 1 byte into a region of size between 0 and 
<BYTECOUNT> [-Wformat-overflow=]
   <DIRECTIVE> directive writing <BYTECOUNT1> bytes into a region of size 
between <BYTECOUNT2> and <BYTECOUNT3> [-Wformat-overflow=]
   <DIRECTIVE> directive writing between <BYTECOUNT1> and <BYTECOUNT2> bytes 
into a region of size between <BYTECOUNT3> and <BYTECOUNT4> [-Wformat-overflow=]
   <DIRECTIVE> directive writing up to <BYTECOUNT1> bytes into a region of size 
<BYTECOUNT2> [-Wformat-overflow=]
   format not a string literal and no format arguments [-Wformat-security]
   assignment from incompatible pointer type [-Wincompatible-pointer-types]
   initialization from incompatible pointer type [-Wincompatible-pointer-types]
   passing argument <NUM> of <FUNC> from incompatible pointer type 
[-Wincompatible-pointer-types]
   <VAR> may be used uninitialized in this function [-Wmaybe-uninitialized]
   missing braces around initializer [-Wmissing-braces]
   suggest parentheses around arithmetic in operand of '|' [-Wparentheses]
   suggest explicit braces to avoid ambiguous 'else' [-Wparentheses]
   suggest parentheses around '&&' within '||' [-Wparentheses]
   no return statement in function returning non-void [-Wreturn-type]
   control reaches end of non-void function [-Wreturn-type]
   this 'else' clause does not guard... [-Wmisleading-indentation]
   this 'for' clause does not guard... [-Wmisleading-indentation]
   this 'while' clause does not guard... [-Wmisleading-indentation]
   ignoring #pragma omp critical [-Wunknown-pragmas]
   ignoring #pragma omp for [-Wunknown-pragmas]
   ignoring #pragma omp parallel [-Wunknown-pragmas]
   ignoring #pragma omp section [-Wunknown-pragmas]
   ignoring #pragma warning  [-Wunknown-pragmas]
   dereferencing type-punned pointer will break strict-aliasing rules 
[-Wstrict-aliasing]
   enumeration value <ENUM> not handled in switch [-Wswitch]
   <EXPRESSION> is used uninitialized in this function [-Wuninitialized]
   <VAR> defined but not used [-Wunused-const-variable=]
   <FUNC> declared <TYPE> but never defined [-Wunused-function]
   label <LABEL> defined but not used [-Wunused-label]
   value computed is not used [-Wunused-value]
   unused variable <VAR> [-Wunused-variable]
   deprecated conversion from string constant to <TYPE> [-Wwrite-strings]
(End of list.)


suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]:
    lua5/imlua_process.c:55:[Function:imluaProcessSplitComplex]: 
    lua5/imlua_process.c:61:[Function:imluaProcessMergeComplex]: 
    lua5/imlua_process.c:55:[Function:imluaProcessAutoCovariance]: 
    lua5/imlua_process.c:55:[Function:imluaProcessNormalizeComponents]: 
    lua5/imlua_process.c:55:[Function:imluaProcessNormDiffRatio]: 
    lua5/imlua_process.c:55:[Function:imluaProcessSplitComplex]: 
    lua5/imlua_process.c:61:[Function:imluaProcessMergeComplex]: 
    lua5/imlua_process.c:55:[Function:imluaProcessAutoCovariance]: 
    lua5/imlua_process.c:55:[Function:imluaProcessNormalizeComponents]: 
    lua5/imlua_process.c:55:[Function:imluaProcessNormDiffRatio]: 


comparison between <ENUM1> and <ENUM2> [-Wenum-compare]:
    libexif/fuji/mnote-fuji-entry.c:233:[Function:mnote_fuji_entry_get_value]:  
 ExifTag {aka const enum <anonymous>}  MnoteFujiTag {aka enum _MnoteFujiTag}
    
libexif/olympus/mnote-olympus-entry.c:430:[Function:mnote_olympus_entry_get_value]:
   ExifTag {aka const enum <anonymous>}  MnoteOlympusTag {aka enum 
_MnoteOlympusTag}
    
libexif/olympus/mnote-olympus-entry.c:500:[Function:mnote_olympus_entry_get_value]:
   ExifTag {aka const enum <anonymous>}  MnoteOlympusTag {aka enum 
_MnoteOlympusTag}
    
libexif/pentax/mnote-pentax-entry.c:347:[Function:mnote_pentax_entry_get_value]:
   ExifTag {aka const enum <anonymous>}  MnotePentaxTag {aka enum 
_MnotePentaxTag}
    
libexif/pentax/mnote-pentax-entry.c:371:[Function:mnote_pentax_entry_get_value]:
   ExifTag {aka const enum <anonymous>}  MnotePentaxTag {aka enum 
_MnotePentaxTag}


format <FMT> expects argument of type <TYPE1>, but argument <NUM> has type 
<TYPE2> [-Wformat=]:
    libtiff/tif_predict.c:645:[Function:PredictorEncodeTile]:   %u  unsigned 
int  4  tmsize_t {aka long unsigned int}
    
libexif/fuji/exif-mnote-data-fuji.c:227:[Function:exif_mnote_data_fuji_load]:   
%u  unsigned int  5  size_t {aka long unsigned int}
    
libexif/canon/exif-mnote-data-canon.c:270:[Function:exif_mnote_data_canon_load]:
   %u  unsigned int  5  size_t {aka long unsigned int}
    
libexif/olympus/exif-mnote-data-olympus.c:485:[Function:exif_mnote_data_olympus_load]:
   %u  unsigned int  5  size_t {aka long unsigned int}
    
libexif/pentax/exif-mnote-data-pentax.c:310:[Function:exif_mnote_data_pentax_load]:
   %u  unsigned int  5  size_t {aka long unsigned int}
    libjasper/base/jas_debug.c:128:[Function:jas_memdump]:   %x  unsigned int  
3  size_t {aka long unsigned int}
    libjasper/jpc/jpc_mqenc.c:388:[Function:jpc_mqenc_dump]:   %d  int  3  long 
int
    libjasper/jpc/jpc_mqdec.c:303:[Function:jpc_mqdec_dump]:   %d  int  3  long 
int
    libjasper/jpc/jpc_mqdec.c:304:[Function:jpc_mqdec_dump]:   %d  int  3  long 
int


implicit declaration of function <FUNC> [-Wimplicit-function-declaration]:
    libjasper/jpc/jpc_qmfb.c:1618:[Function:jpc_ft_synthesize]:   
jas_do_progress


implicit declaration of function <FUNC1>; did you mean <FUNC2>? 
[-Wimplicit-function-declaration]:
    libjasper/base/jas_getopt.c:129:[Function:jas_getopt]:   jas_eprintf  
vsnprintf
    libjasper/jpc/jpc_qmfb.c:1619:[Function:jpc_ft_synthesize]:   
jas_test_abort  jas_seq_start
    libjasper/jpc/jpc_tsfb.c:124:[Function:jpc_tsfb_analyze]:   
jpc_tsfb_analyze2  jpc_tsfb_analyze
    libjasper/jpc/jpc_tsfb.c:151:[Function:jpc_tsfb_synthesize]:   
jpc_tsfb_synthesize2  jpc_tsfb_synthesize
    libjasper/jpc/jpc_t1dec.c:248:[Function:jpc_dec_decodecblk]:   jas_eprintf  
vsnprintf


cast to pointer from integer of different size [-Wint-to-pointer-cast]:
    tiff_binfile.c:74:[Function:TIFFFdOpen]: 
      tif = TIFFClientOpen(name, mode, (thandle_t) fd,  iTIFFReadProc, 
iTIFFWriteProc,
    im_format_tiff.cpp:693:[MemeberFunction:virtual void* 
imFileFormatTIFF::Handle(int)]: 
        return (void*)this->tiff->tif_fd;


<VAR> is usually a function [-Wmain]:
    libjpeg/jdmainct.c:162:[Function:alloc_funny_pointers]:   main
    libjpeg/jdmainct.c:203:[Function:make_funny_pointers]:   main
    libjpeg/jdmainct.c:243:[Function:set_wraparound_pointers]:   main
    libjpeg/jdmainct.c:272:[Function:set_bottom_pointers]:   main
    libjpeg/jdmainct.c:309:[Function:start_pass_main]:   main
    libjpeg/jdmainct.c:349:[Function:process_data_simple_main]:   main
    libjpeg/jdmainct.c:389:[Function:process_data_context_main]:   main
    libjpeg/jdmainct.c:478:[Function:jinit_d_main_controller]:   main
    libjpeg/jcmainct.c:71:[Function:start_pass_main]:   main
    libjpeg/jcmainct.c:117:[Function:process_data_simple_main]:   main
    libjpeg/jcmainct.c:247:[Function:jinit_c_main_controller]:   main


the use of `tmpnam' is dangerous, better use `mkstemp':
    jas_stream.c:[At:(.text+0x6c1)]: 


suggest parentheses around assignment used as truth value [-Wparentheses]:
    libjasper/base/jas_image.c:230:[Function:jas_box_alloc]: 
      if ( box->buf = (uint_fast8_t *) jas_malloc( size ) )


comparison between pointer and zero character constant [-Wpointer-compare]:
    libjasper/jpc/jpc_util.c:105:[Function:jpc_atoaf]: 
    libjasper/jpc/jpc_util.c:123:[Function:jpc_atoaf]: 


cast from pointer to integer of different size [-Wpointer-to-int-cast]:
    libjasper/base/jas_image.c:232:[Function:jas_box_alloc]: 
      return (bool) box->buf;
    libjasper/jpc/jpc_t1enc.c:135:[Function:jpc_enc_enccblks]: 
          jas_do_progress( (int) lvl, (int) (endlvls-1), "jpc: encode" );
    libjasper/jpc/jpc_t1enc.c:135:[Function:jpc_enc_enccblks]: 
          jas_do_progress( (int) lvl, (int) (endlvls-1), "jpc: encode" );


<VAR> will be initialized after [-Wreorder]:
    im_format_jp2.cpp:109:[Constructor:imFileFormatJP2::imFileFormatJP2(const 
imFormat*)]:   imFileFormatJP2::image
      jas_image_t *image;
                   ^~~~~
   im_format_jp2.cpp:108:17: warning:   'jas_stream_t* imFileFormatJP2::stream' 
[-Wreorder]
      jas_stream_t *stream;
                    ^~~~~~
   im_format_jp2.cpp:112:3: warning:   when initialized here [-Wreorder]
      imFileFormatJP2(const imFormat* _iformat) : imFileFormatBase(_iformat), 
image(0), stream(0), fmtid(-1) {}
      ^~~~~~~~~~~~~~~
    im_format_jp2.cpp:108:[Constructor:imFileFormatJP2::imFileFormatJP2(const 
imFormat*)]:   imFileFormatJP2::stream
      jas_stream_t *stream;
                    ^~~~~~
   im_format_jp2.cpp:107:7: warning:   'int imFileFormatJP2::fmtid' [-Wreorder]
      int fmtid;
          ^~~~~
   im_format_jp2.cpp:112:3: warning:   when initialized here [-Wreorder]
      imFileFormatJP2(const imFormat* _iformat) : imFileFormatBase(_iformat), 
image(0), stream(0), fmtid(-1) {}
      ^~~~~~~~~~~~~~~


case value <LABEL> not in enumerated type <ENUM> [-Wswitch]:
    libexif/exif-entry.c:1199:[Function:exif_entry_get_value]:   0  ExifTag 
{aka enum <anonymous>}
    libexif/exif-entry.c:1226:[Function:exif_entry_get_value]:   5  ExifTag 
{aka enum <anonymous>}
    libexif/exif-entry.c:1239:[Function:exif_entry_get_value]:   7  ExifTag 
{aka enum <anonymous>}


this 'if' clause does not guard... [-Wmisleading-indentation]:
    libtiff/tif_read.c:495:[Function:TIFFFillStrip]: 
        if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount)
        ^~
   libtiff/tif_read.c:498:2: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
     if ((tif->tif_flags&TIFF_NOREADRAW)==0)
     ^~
    libtiff/tif_read.c:798:[Function:TIFFFillTile]: 
        if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount)
        ^~
   libtiff/tif_read.c:801:2: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
     if ((tif->tif_flags&TIFF_NOREADRAW)==0)
     ^~
    libtiff/tif_read.c:960:[Function:TIFFStartStrip]: 
        if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount)
        ^~
   libtiff/tif_read.c:963:2: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
     if ((tif->tif_flags & TIFF_CODERSETUP) == 0) {
     ^~
    libtiff/tif_dirread.c:4272:[Function:EstimateStripByteCounts]: 
        if( !_TIFFFillStriles( tif ) )
        ^~
   libtiff/tif_dirread.c:4275:2: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
     if (td->td_stripbytecount)
     ^~
    process/im_analyze.cpp:727:[Function:int 
imAnalyzeMeasurePrincipalAxis(const imImage*, const int*, const double*, const 
double*, int, double*, double*, double*, double*)]: 
        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
        ^~
   process/im_analyze.cpp:727:27: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
                              ^~
    process/im_analyze.cpp:737:[Function:int 
imAnalyzeMeasurePrincipalAxis(const imImage*, const int*, const double*, const 
double*, int, double*, double*, double*, double*)]: 
        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
        ^~
   process/im_analyze.cpp:737:27: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
                              ^~
    process/im_analyze.cpp:747:[Function:int 
imAnalyzeMeasurePrincipalAxis(const imImage*, const int*, const double*, const 
double*, int, double*, double*, double*, double*)]: 
        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
        ^~
   process/im_analyze.cpp:747:27: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
                              ^~
    process/im_analyze.cpp:840:[Function:int 
imAnalyzeMeasurePrincipalAxis(const imImage*, const int*, const double*, const 
double*, int, double*, double*, double*, double*)]: 
          if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
          ^~
   process/im_analyze.cpp:840:29: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
          if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
                                ^~
    process/im_analyze.cpp:969:[Function:int 
imAnalyzeMeasurePrincipalAxis(const imImage*, const int*, const double*, const 
double*, int, double*, double*, double*, double*)]: 
      if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
      ^~
   process/im_analyze.cpp:969:25: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
      if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
                            ^~
    process/im_analyze.cpp:727:[Function:int 
imAnalyzeMeasurePrincipalAxis(const imImage*, const int*, const double*, const 
double*, int, double*, double*, double*, double*)]: 
        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
        ^~
   process/im_analyze.cpp:727:27: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
                              ^~
    process/im_analyze.cpp:737:[Function:int 
imAnalyzeMeasurePrincipalAxis(const imImage*, const int*, const double*, const 
double*, int, double*, double*, double*, double*)]: 
        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
        ^~
   process/im_analyze.cpp:737:27: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
                              ^~
    process/im_analyze.cpp:747:[Function:int 
imAnalyzeMeasurePrincipalAxis(const imImage*, const int*, const double*, const 
double*, int, double*, double*, double*, double*)]: 
        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
        ^~
   process/im_analyze.cpp:747:27: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
        if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
                              ^~
    process/im_analyze.cpp:840:[Function:int 
imAnalyzeMeasurePrincipalAxis(const imImage*, const int*, const double*, const 
double*, int, double*, double*, double*, double*)]: 
          if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
          ^~
   process/im_analyze.cpp:840:29: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
          if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
                                ^~
    process/im_analyze.cpp:969:[Function:int 
imAnalyzeMeasurePrincipalAxis(const imImage*, const int*, const double*, const 
double*, int, double*, double*, double*, double*)]: 
      if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
      ^~
   process/im_analyze.cpp:969:25: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
      if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
                            ^~


<FUNC> defined but not used [-Wunused-function]:
    libjasper/jpc/jpc_enc.c:886:[Function:jpc_enc_encodemainbody]:   
jpc_calcssexp
    libjasper/jpc/jpc_enc.c:870:[Function:jpc_enc_encodemainbody]:   
jpc_calcssmant


ignoring return value of <FUNC>, declared with attribute warn_unused_result 
[-Wunused-result]:
    libjasper/base/jas_stream.c:369:[Function:jas_stream_tmpfile]:   tmpnam


statement with no effect [-Wunused-value]:
    libexif/fuji/mnote-fuji-tag.c:46:[Function:mnote_fuji_tag_get_title]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/fuji/mnote-fuji-tag.c:46:[Function:mnote_fuji_tag_get_description]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/canon/mnote-canon-tag.c:46:[Function:mnote_canon_tag_get_title]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    
libexif/canon/mnote-canon-tag.c:46:[Function:mnote_canon_tag_get_description]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    
libexif/olympus/mnote-olympus-tag.c:46:[Function:mnote_olympus_tag_get_title]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    
libexif/olympus/mnote-olympus-tag.c:46:[Function:mnote_olympus_tag_get_description]:
 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/pentax/mnote-pentax-tag.c:46:[Function:mnote_pentax_tag_get_title]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    
libexif/pentax/mnote-pentax-tag.c:46:[Function:mnote_pentax_tag_get_description]:
 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/exif-entry.c:46:[Function:exif_entry_get_value]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/exif-format.c:46:[Function:exif_format_get_name]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/exif-tag.c:46:[Function:exif_tag_get_title_in_ifd]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/exif-tag.c:46:[Function:exif_tag_get_description_in_ifd]: 
    #    define bindtextdomain(Domain,Directory) (Domain)


<VAR> defined but not used [-Wunused-variable]:
    libjasper/jp2/jp2_cod.h:132:[#included-from:libjasper/jp2/jp2_cod.h:132]:   
xmp_uuid
    libjasper/jp2/jp2_cod.h:125:[#included-from:libjasper/jp2/jp2_cod.h:125]:   
msi_uuid
    libjasper/jp2/jp2_cod.h:132:[#included-from:libjasper/jp2/jp2_cod.h:132]:   
xmp_uuid


variable <VAR> set but not used [-Wunused-but-set-variable]:
    libtiff/tif_open.c:106:[Function:TIFFClientOpen]:   n
    
libexif/olympus/mnote-olympus-entry.c:343:[Function:mnote_olympus_entry_get_value]:
   d
    libjasper/base/jas_icc.c:1072:[Function:jas_icctxtdesc_copy]:   txtdesc
    libjasper/base/jas_icc.c:1259:[Function:jas_icclut8_copy]:   lut8
    libjasper/base/jas_image.c:1360:[Function:jas_image_chclrspc]:   numoutchans
    libjasper/base/jas_image.c:1353:[Function:jas_image_chclrspc]:   
numinauxchans
    libjasper/jp2/jp2_dec.c:115:[Function:jp2_decode]:   cdefd
    libjasper/jpc/jpc_t1enc.c:210:[Function:jpc_enc_enccblk]:   rlvl
    libjasper/jpc/jpc_t1enc.c:205:[Function:jpc_enc_enccblk]:   ret
    libjasper/jpc/jpc_dec.c:438:[Function:jpc_dec_process_crg]:   crg
    libjasper/jpc/jpc_dec.c:702:[Function:jpc_dec_tileinit]:   brcbgyend
    libjasper/jpc/jpc_enc.c:873:[Function:jpc_calcssmant]:   e
    libjasper/jpc/jpc_enc.c:904:[Function:jpc_enc_encodemainhdr]:   mctsynweight
    libjasper/jpc/jpc_enc.c:1121:[Function:jpc_enc_encodemainbody]:   numbytes
    libjasper/jpc/jpc_enc.c:1107:[Function:jpc_enc_encodemainbody]:   tiley
    libjasper/jpc/jpc_enc.c:1106:[Function:jpc_enc_encodemainbody]:   tilex


warning: ISO C++ forbids converting a string constant to <TYPE> 
[-Wwrite-strings]:
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
* No diagnostics for:
   #include expects "FILENAME" or <FILENAME>
   missing binary operator before token "("
   converting to non-pointer type <TYPE> from NULL [-Wconversion-null]
   <FUNC> is deprecated [-Wdeprecated-declarations]
   <FUNC1> is deprecated: Use <FUNC2> instead [-Wdeprecated-declarations]
   assignment discards <TYPE> qualifier from pointer target type 
[-Wdiscarded-qualifiers]
   too many arguments for format [-Wformat-extra-args]
   <FUNC> may write a terminating nul past the end of the destination 
[-Wformat-overflow=]
   <DIRECTIVE> directive writing 1 byte into a region of size between 0 and 
<BYTECOUNT> [-Wformat-overflow=]
   <DIRECTIVE> directive writing <BYTECOUNT1> bytes into a region of size 
between <BYTECOUNT2> and <BYTECOUNT3> [-Wformat-overflow=]
   <DIRECTIVE> directive writing between <BYTECOUNT1> and <BYTECOUNT2> bytes 
into a region of size between <BYTECOUNT3> and <BYTECOUNT4> [-Wformat-overflow=]
   <DIRECTIVE> directive writing up to <BYTECOUNT1> bytes into a region of size 
<BYTECOUNT2> [-Wformat-overflow=]
   format not a string literal and no format arguments [-Wformat-security]
   assignment from incompatible pointer type [-Wincompatible-pointer-types]
   initialization from incompatible pointer type [-Wincompatible-pointer-types]
   passing argument <NUM> of <FUNC> from incompatible pointer type 
[-Wincompatible-pointer-types]
   <VAR> may be used uninitialized in this function [-Wmaybe-uninitialized]
   missing braces around initializer [-Wmissing-braces]
   suggest parentheses around arithmetic in operand of '|' [-Wparentheses]
   suggest explicit braces to avoid ambiguous 'else' [-Wparentheses]
   suggest parentheses around '&&' within '||' [-Wparentheses]
   no return statement in function returning non-void [-Wreturn-type]
   control reaches end of non-void function [-Wreturn-type]
   this 'else' clause does not guard... [-Wmisleading-indentation]
   this 'for' clause does not guard... [-Wmisleading-indentation]
   this 'while' clause does not guard... [-Wmisleading-indentation]
   ignoring #pragma omp critical [-Wunknown-pragmas]
   ignoring #pragma omp for [-Wunknown-pragmas]
   ignoring #pragma omp parallel [-Wunknown-pragmas]
   ignoring #pragma omp section [-Wunknown-pragmas]
   ignoring #pragma warning  [-Wunknown-pragmas]
   dereferencing type-punned pointer will break strict-aliasing rules 
[-Wstrict-aliasing]
   enumeration value <ENUM> not handled in switch [-Wswitch]
   <EXPRESSION> is used uninitialized in this function [-Wuninitialized]
   <VAR> defined but not used [-Wunused-const-variable=]
   <FUNC> declared <TYPE> but never defined [-Wunused-function]
   label <LABEL> defined but not used [-Wunused-label]
   value computed is not used [-Wunused-value]
   unused variable <VAR> [-Wunused-variable]
   deprecated conversion from string constant to <TYPE> [-Wwrite-strings]
(End of list.)


suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]:
    lua5/imlua_process.c:55:[Function:imluaProcessSplitComplex]: 
    lua5/imlua_process.c:61:[Function:imluaProcessMergeComplex]: 
    lua5/imlua_process.c:55:[Function:imluaProcessAutoCovariance]: 
    lua5/imlua_process.c:55:[Function:imluaProcessNormalizeComponents]: 
    lua5/imlua_process.c:55:[Function:imluaProcessNormDiffRatio]: 
    lua5/imlua_process.c:55:[Function:imluaProcessSplitComplex]: 
    lua5/imlua_process.c:61:[Function:imluaProcessMergeComplex]: 
    lua5/imlua_process.c:55:[Function:imluaProcessAutoCovariance]: 
    lua5/imlua_process.c:55:[Function:imluaProcessNormalizeComponents]: 
    lua5/imlua_process.c:55:[Function:imluaProcessNormDiffRatio]: 


comparison between <ENUM1> and <ENUM2> [-Wenum-compare]:
    libexif/fuji/mnote-fuji-entry.c:233:[Function:mnote_fuji_entry_get_value]:  
 ExifTag {aka const enum <anonymous>}  MnoteFujiTag {aka enum _MnoteFujiTag}
    
libexif/olympus/mnote-olympus-entry.c:430:[Function:mnote_olympus_entry_get_value]:
   ExifTag {aka const enum <anonymous>}  MnoteOlympusTag {aka enum 
_MnoteOlympusTag}
    
libexif/olympus/mnote-olympus-entry.c:500:[Function:mnote_olympus_entry_get_value]:
   ExifTag {aka const enum <anonymous>}  MnoteOlympusTag {aka enum 
_MnoteOlympusTag}
    
libexif/pentax/mnote-pentax-entry.c:347:[Function:mnote_pentax_entry_get_value]:
   ExifTag {aka const enum <anonymous>}  MnotePentaxTag {aka enum 
_MnotePentaxTag}
    
libexif/pentax/mnote-pentax-entry.c:371:[Function:mnote_pentax_entry_get_value]:
   ExifTag {aka const enum <anonymous>}  MnotePentaxTag {aka enum 
_MnotePentaxTag}


format <FMT> expects argument of type <TYPE1>, but argument <NUM> has type 
<TYPE2> [-Wformat=]:
    libtiff/tif_predict.c:645:[Function:PredictorEncodeTile]:   %u  unsigned 
int  4  tmsize_t {aka long unsigned int}
    
libexif/fuji/exif-mnote-data-fuji.c:227:[Function:exif_mnote_data_fuji_load]:   
%u  unsigned int  5  size_t {aka long unsigned int}
    
libexif/canon/exif-mnote-data-canon.c:270:[Function:exif_mnote_data_canon_load]:
   %u  unsigned int  5  size_t {aka long unsigned int}
    
libexif/olympus/exif-mnote-data-olympus.c:485:[Function:exif_mnote_data_olympus_load]:
   %u  unsigned int  5  size_t {aka long unsigned int}
    
libexif/pentax/exif-mnote-data-pentax.c:310:[Function:exif_mnote_data_pentax_load]:
   %u  unsigned int  5  size_t {aka long unsigned int}
    libjasper/base/jas_debug.c:128:[Function:jas_memdump]:   %x  unsigned int  
3  size_t {aka long unsigned int}
    libjasper/jpc/jpc_mqenc.c:388:[Function:jpc_mqenc_dump]:   %d  int  3  long 
int
    libjasper/jpc/jpc_mqdec.c:303:[Function:jpc_mqdec_dump]:   %d  int  3  long 
int
    libjasper/jpc/jpc_mqdec.c:304:[Function:jpc_mqdec_dump]:   %d  int  3  long 
int


implicit declaration of function <FUNC> [-Wimplicit-function-declaration]:
    libjasper/jpc/jpc_qmfb.c:1618:[Function:jpc_ft_synthesize]:   
jas_do_progress


implicit declaration of function <FUNC1>; did you mean <FUNC2>? 
[-Wimplicit-function-declaration]:
    libjasper/base/jas_getopt.c:129:[Function:jas_getopt]:   jas_eprintf  
vsnprintf
    libjasper/jpc/jpc_qmfb.c:1619:[Function:jpc_ft_synthesize]:   
jas_test_abort  jas_seq_start
    libjasper/jpc/jpc_tsfb.c:124:[Function:jpc_tsfb_analyze]:   
jpc_tsfb_analyze2  jpc_tsfb_analyze
    libjasper/jpc/jpc_tsfb.c:151:[Function:jpc_tsfb_synthesize]:   
jpc_tsfb_synthesize2  jpc_tsfb_synthesize
    libjasper/jpc/jpc_t1dec.c:248:[Function:jpc_dec_decodecblk]:   jas_eprintf  
vsnprintf


cast to pointer from integer of different size [-Wint-to-pointer-cast]:
    tiff_binfile.c:74:[Function:TIFFFdOpen]: 
      tif = TIFFClientOpen(name, mode, (thandle_t) fd,  iTIFFReadProc, 
iTIFFWriteProc,
    im_format_tiff.cpp:693:[MemeberFunction:virtual void* 
imFileFormatTIFF::Handle(int)]: 
        return (void*)this->tiff->tif_fd;


<VAR> is usually a function [-Wmain]:
    libjpeg/jdmainct.c:162:[Function:alloc_funny_pointers]:   main
    libjpeg/jdmainct.c:203:[Function:make_funny_pointers]:   main
    libjpeg/jdmainct.c:243:[Function:set_wraparound_pointers]:   main
    libjpeg/jdmainct.c:272:[Function:set_bottom_pointers]:   main
    libjpeg/jdmainct.c:309:[Function:start_pass_main]:   main
    libjpeg/jdmainct.c:349:[Function:process_data_simple_main]:   main
    libjpeg/jdmainct.c:389:[Function:process_data_context_main]:   main
    libjpeg/jdmainct.c:478:[Function:jinit_d_main_controller]:   main
    libjpeg/jcmainct.c:71:[Function:start_pass_main]:   main
    libjpeg/jcmainct.c:117:[Function:process_data_simple_main]:   main
    libjpeg/jcmainct.c:247:[Function:jinit_c_main_controller]:   main


the use of `tmpnam' is dangerous, better use `mkstemp':
    jas_stream.c:[At:(.text+0x6c1)]: 


suggest parentheses around assignment used as truth value [-Wparentheses]:
    libjasper/base/jas_image.c:230:[Function:jas_box_alloc]: 
      if ( box->buf = (uint_fast8_t *) jas_malloc( size ) )


comparison between pointer and zero character constant [-Wpointer-compare]:
    libjasper/jpc/jpc_util.c:105:[Function:jpc_atoaf]: 
    libjasper/jpc/jpc_util.c:123:[Function:jpc_atoaf]: 


cast from pointer to integer of different size [-Wpointer-to-int-cast]:
    libjasper/base/jas_image.c:232:[Function:jas_box_alloc]: 
      return (bool) box->buf;
    libjasper/jpc/jpc_t1enc.c:135:[Function:jpc_enc_enccblks]: 
          jas_do_progress( (int) lvl, (int) (endlvls-1), "jpc: encode" );
    libjasper/jpc/jpc_t1enc.c:135:[Function:jpc_enc_enccblks]: 
          jas_do_progress( (int) lvl, (int) (endlvls-1), "jpc: encode" );


<VAR> will be initialized after [-Wreorder]:
    im_format_jp2.cpp:109:[Constructor:imFileFormatJP2::imFileFormatJP2(const 
imFormat*)]:   imFileFormatJP2::image
      jas_image_t *image;
                   ^~~~~
   im_format_jp2.cpp:108:17: warning:   'jas_stream_t* imFileFormatJP2::stream' 
[-Wreorder]
      jas_stream_t *stream;
                    ^~~~~~
   im_format_jp2.cpp:112:3: warning:   when initialized here [-Wreorder]
      imFileFormatJP2(const imFormat* _iformat) : imFileFormatBase(_iformat), 
image(0), stream(0), fmtid(-1) {}
      ^~~~~~~~~~~~~~~
    im_format_jp2.cpp:108:[Constructor:imFileFormatJP2::imFileFormatJP2(const 
imFormat*)]:   imFileFormatJP2::stream
      jas_stream_t *stream;
                    ^~~~~~
   im_format_jp2.cpp:107:7: warning:   'int imFileFormatJP2::fmtid' [-Wreorder]
      int fmtid;
          ^~~~~
   im_format_jp2.cpp:112:3: warning:   when initialized here [-Wreorder]
      imFileFormatJP2(const imFormat* _iformat) : imFileFormatBase(_iformat), 
image(0), stream(0), fmtid(-1) {}
      ^~~~~~~~~~~~~~~


case value <LABEL> not in enumerated type <ENUM> [-Wswitch]:
    libexif/exif-entry.c:1199:[Function:exif_entry_get_value]:   0  ExifTag 
{aka enum <anonymous>}
    libexif/exif-entry.c:1226:[Function:exif_entry_get_value]:   5  ExifTag 
{aka enum <anonymous>}
    libexif/exif-entry.c:1239:[Function:exif_entry_get_value]:   7  ExifTag 
{aka enum <anonymous>}


this 'if' clause does not guard... [-Wmisleading-indentation]:
    libtiff/tif_read.c:495:[Function:TIFFFillStrip]: 
        if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount)
        ^~
   libtiff/tif_read.c:498:2: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
     if ((tif->tif_flags&TIFF_NOREADRAW)==0)
     ^~
    libtiff/tif_read.c:798:[Function:TIFFFillTile]: 
        if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount)
        ^~
   libtiff/tif_read.c:801:2: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
     if ((tif->tif_flags&TIFF_NOREADRAW)==0)
     ^~
    libtiff/tif_read.c:960:[Function:TIFFStartStrip]: 
        if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount)
        ^~
   libtiff/tif_read.c:963:2: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
     if ((tif->tif_flags & TIFF_CODERSETUP) == 0) {
     ^~
    libtiff/tif_dirread.c:4272:[Function:EstimateStripByteCounts]: 
        if( !_TIFFFillStriles( tif ) )
        ^~
   libtiff/tif_dirread.c:4275:2: note: ...this statement, but the latter is 
misleadingly indented as if it were guarded by the 'if'
     if (td->td_stripbytecount)
     ^~


<FUNC> defined but not used [-Wunused-function]:
    libjasper/jpc/jpc_enc.c:886:[Function:jpc_enc_encodemainbody]:   
jpc_calcssexp
    libjasper/jpc/jpc_enc.c:870:[Function:jpc_enc_encodemainbody]:   
jpc_calcssmant


ignoring return value of <FUNC>, declared with attribute warn_unused_result 
[-Wunused-result]:
    libjasper/base/jas_stream.c:369:[Function:jas_stream_tmpfile]:   tmpnam


statement with no effect [-Wunused-value]:
    libexif/fuji/mnote-fuji-tag.c:46:[Function:mnote_fuji_tag_get_title]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/fuji/mnote-fuji-tag.c:46:[Function:mnote_fuji_tag_get_description]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/canon/mnote-canon-tag.c:46:[Function:mnote_canon_tag_get_title]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    
libexif/canon/mnote-canon-tag.c:46:[Function:mnote_canon_tag_get_description]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    
libexif/olympus/mnote-olympus-tag.c:46:[Function:mnote_olympus_tag_get_title]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    
libexif/olympus/mnote-olympus-tag.c:46:[Function:mnote_olympus_tag_get_description]:
 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/pentax/mnote-pentax-tag.c:46:[Function:mnote_pentax_tag_get_title]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    
libexif/pentax/mnote-pentax-tag.c:46:[Function:mnote_pentax_tag_get_description]:
 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/exif-entry.c:46:[Function:exif_entry_get_value]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/exif-format.c:46:[Function:exif_format_get_name]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/exif-tag.c:46:[Function:exif_tag_get_title_in_ifd]: 
    #    define bindtextdomain(Domain,Directory) (Domain)
    libexif/exif-tag.c:46:[Function:exif_tag_get_description_in_ifd]: 
    #    define bindtextdomain(Domain,Directory) (Domain)


<VAR> defined but not used [-Wunused-variable]:
    libjasper/jp2/jp2_cod.h:132:[#included-from:libjasper/jp2/jp2_cod.h:132]:   
xmp_uuid
    libjasper/jp2/jp2_cod.h:125:[#included-from:libjasper/jp2/jp2_cod.h:125]:   
msi_uuid
    libjasper/jp2/jp2_cod.h:132:[#included-from:libjasper/jp2/jp2_cod.h:132]:   
xmp_uuid


variable <VAR> set but not used [-Wunused-but-set-variable]:
    libtiff/tif_open.c:106:[Function:TIFFClientOpen]:   n
    
libexif/olympus/mnote-olympus-entry.c:343:[Function:mnote_olympus_entry_get_value]:
   d
    libjasper/base/jas_icc.c:1072:[Function:jas_icctxtdesc_copy]:   txtdesc
    libjasper/base/jas_icc.c:1259:[Function:jas_icclut8_copy]:   lut8
    libjasper/base/jas_image.c:1360:[Function:jas_image_chclrspc]:   numoutchans
    libjasper/base/jas_image.c:1353:[Function:jas_image_chclrspc]:   
numinauxchans
    libjasper/jp2/jp2_dec.c:115:[Function:jp2_decode]:   cdefd
    libjasper/jpc/jpc_t1enc.c:210:[Function:jpc_enc_enccblk]:   rlvl
    libjasper/jpc/jpc_t1enc.c:205:[Function:jpc_enc_enccblk]:   ret
    libjasper/jpc/jpc_dec.c:438:[Function:jpc_dec_process_crg]:   crg
    libjasper/jpc/jpc_dec.c:702:[Function:jpc_dec_tileinit]:   brcbgyend
    libjasper/jpc/jpc_enc.c:873:[Function:jpc_calcssmant]:   e
    libjasper/jpc/jpc_enc.c:904:[Function:jpc_enc_encodemainhdr]:   mctsynweight
    libjasper/jpc/jpc_enc.c:1121:[Function:jpc_enc_encodemainbody]:   numbytes
    libjasper/jpc/jpc_enc.c:1107:[Function:jpc_enc_encodemainbody]:   tiley
    libjasper/jpc/jpc_enc.c:1106:[Function:jpc_enc_encodemainbody]:   tilex


warning: ISO C++ forbids converting a string constant to <TYPE> 
[-Wwrite-strings]:
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
    im_format_tiff.cpp:[At:52]:   char*
Index: src/process/im_analyze.cpp
===================================================================
--- src/process/im_analyze.cpp	(revision 757)
+++ src/process/im_analyze.cpp	(working copy)
@@ -548,8 +548,7 @@
     if (data_cy) data_cy[i] /= (double)data_area[i];
   }
 
-  if (local_data_area)
-    free(local_data_area);
+  free(local_data_area);
 
   imProcessCounterEnd(counter);
   return processing;
@@ -704,8 +703,8 @@
 
     if (!ret)
     {
-      if (local_data_cx) free(local_data_cx);
-      if (local_data_cy) free(local_data_cy);
+      free(local_data_cx);
+      free(local_data_cy);
       imProcessCounterEnd(counter);
       return 0;
     }
@@ -721,10 +720,10 @@
   ret = iCalcMoment(cm20, 2, 0, image, data_cx, data_cy, region_count, counter);
   if (!ret)
   {
-    if (local_data_area) free(local_data_area);
-    if (local_data_cx) free(local_data_cx);
-    if (local_data_cy) free(local_data_cy);
-    if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
+    free(local_data_area);
+    free(local_data_cx);
+    free(local_data_cy);
+    free(cm20); free(cm02); free(cm11);
     imProcessCounterEnd(counter);
     return 0;
   }
@@ -731,10 +730,10 @@
   ret = iCalcMoment(cm02, 0, 2, image, data_cx, data_cy, region_count, counter);
   if (!ret)
   {
-    if (local_data_area) free(local_data_area);
-    if (local_data_cx) free(local_data_cx);
-    if (local_data_cy) free(local_data_cy);
-    if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
+    free(local_data_area);
+    free(local_data_cx);
+    free(local_data_cy);
+    free(cm20); free(cm02); free(cm11);
     imProcessCounterEnd(counter);
     return 0;
   }
@@ -741,10 +740,10 @@
   ret = iCalcMoment(cm11, 1, 1, image, data_cx, data_cy, region_count, counter);
   if (!ret)
   {
-    if (local_data_area) free(local_data_area);
-    if (local_data_cx) free(local_data_cx);
-    if (local_data_cy) free(local_data_cy);
-    if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
+    free(local_data_area);
+    free(local_data_cx);
+    free(local_data_cy);
+    free(cm20); free(cm02); free(cm11);
     imProcessCounterEnd(counter);
     return 0;
   }
@@ -827,17 +826,17 @@
 
     if (!imCounterInc(counter))
     {
-      if (local_major_slope) free(local_major_slope);
-      if (local_minor_slope) free(local_minor_slope);
+      free(local_major_slope);
+      free(local_minor_slope);
       free(A1);
       free(A2);
       free(C1);
       free(C2);
 
-      if (local_data_area) free(local_data_area);
-      if (local_data_cx) free(local_data_cx);
-      if (local_data_cy) free(local_data_cy);
-      if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
+      free(local_data_area);
+      free(local_data_cx);
+      free(local_data_cy);
+      free(cm20); free(cm02); free(cm11);
 
       imProcessCounterEnd(counter);
       return 0;
@@ -956,17 +955,17 @@
   free(D1a);
   free(D2a);
 
-  if (local_major_slope) free(local_major_slope);
-  if (local_minor_slope) free(local_minor_slope);
+  free(local_major_slope);
+  free(local_minor_slope);
   free(A1);  
   free(A2);  
   free(C1);  
   free(C2);
 
-  if (local_data_area) free(local_data_area);
-  if (local_data_cx) free(local_data_cx);
-  if (local_data_cy) free(local_data_cy);
-  if (cm20) free(cm20); if (cm02) free(cm02); if (cm11) free(cm11);
+  free(local_data_area);
+  free(local_data_cx);
+  free(local_data_cy);
+  free(cm20); free(cm02); free(cm11);
 
   imProcessCounterEnd(counter);
   return ret;
@@ -1106,7 +1105,7 @@
     }
   }
 
-  if (holes_perim) free(holes_perim);
+  free(holes_perim);
   free(holes_area);
   imImageDestroy(holes_image);
 
_______________________________________________
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to