Andrew,

we have already suppression for such warning for the IsInit() method

#ifdef HAVE_GCC_DIAGNOSTIC_PUSH
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wfloat-equal"
#endif
    /** Return whether the object has been initialized, that is, is non empty */     int  IsInit() const { return MinX != std::numeric_limits<double>::infinity(); }

#ifdef HAVE_GCC_DIAGNOSTIC_PUSH
#pragma GCC diagnostic pop
#endif

so I guess this should be extended to operator== as well.

And likely replace #ifdef HAVE_GCC_DIAGNOSTIC_PUSH by just #ifdef __GNUC__

since HAVE_GCC_DIAGNOSTIC_PUSH is something that is defined only during GDAL build.

The HAVE_GCC_DIAGNOSTIC_PUSH define should be set for all reasonably GCC and Clang versions that can build modern GDAL.

Please issue a PR with those changes if that fixes thing for you.

Even


Le 23/02/2022 à 15:08, Andrew C Aitchison a écrit :

I am trying to track down numerical errors in my driver code
by turning up all the compiler warnings, but pull request #5122
https://github.com/OSGeo/gdal/pull/5122/commits/3d877aa5da8868ed5c3aacf98845c90bc0d36e54
triggers clang++ -Werror,-Wfloat-equal

Assuming it is possible, would it make sense to tell compilers
(and static analyzers?) to ignore this warning ?

I assume that in this case we *do* want an exact floating point comparison.

------------------------------------------------------

clang++-13 -I /usr/local/gdal.git.llvm/include -fPIC -std=c++11 -Wall
    -Wextra -Weverything -Werror -Wno-padded
    -Wno-error=unknown-warning-option -Wno-format-pedantic
    -Wno-c++98-compat-pedantic   -Wno-deprecated-copy-with-dtor
    -Wno-reserved-identifier -Og -g -DFRMT_qct -DFRMT_qed
    -c -o qed.o qed.cpp
In file included from qed.cpp:42:
In file included from /usr/local/gdal.git.llvm/include/gdal_pam.h:36:
In file included from /usr/local/gdal.git.llvm/include/gdal_priv.h:60:
In file included from /usr/local/gdal.git.llvm/include/gdal.h:50:
In file included from /usr/local/gdal.git.llvm/include/ogr_api.h:45:
/usr/local/gdal.git.llvm/include/ogr_core.h:158:21: error: comparing floating point with == or != is unsafe [-Werror,-Wfloat-equal]
        return MinX == other.MinX &&
               ~~~~ ^  ~~~~~~~~~~
/usr/local/gdal.git.llvm/include/ogr_core.h:159:21: error: comparing floating point with == or != is unsafe [-Werror,-Wfloat-equal]
               MinY == other.MinY &&
               ~~~~ ^  ~~~~~~~~~~
/usr/local/gdal.git.llvm/include/ogr_core.h:160:21: error: comparing floating point with == or != is unsafe [-Werror,-Wfloat-equal]
               MaxX == other.MaxX &&
               ~~~~ ^  ~~~~~~~~~~
/usr/local/gdal.git.llvm/include/ogr_core.h:161:21: error: comparing floating point with == or != is unsafe [-Werror,-Wfloat-equal]
               MaxY == other.MaxY;
               ~~~~ ^  ~~~~~~~~~~
4 errors generated.


--
http://www.spatialys.com
My software is free, but my time generally not.

_______________________________________________
gdal-dev mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to