intel / libyami

Yet Another Media Infrastructure. it is core part of media codec with hardware acceleration, it is yummy to your video experience on Linux like platform.
Apache License 2.0
146 stars 106 forks source link

The build fails with GCC 12 due to the newly added `array-compare` warning. #892

Open issuefiler opened 1 year ago

issuefiler commented 1 year ago

The issue

The new warning array-compare, which warns about comparisons between two operands of the array type, was added in GCC 12 (PR97573).

GCC 12 is producing the array-compare warning for

https://github.com/intel/libyami/blob/edd1ad15e383d32c8d67bdc9198c834b6acebca5/codecparsers/h264Parser.h#L99-L101

#define transform_coefficients_for_frame_macroblocks(dest, src, len, mode) \
    {                                                                      \
        if ((dest) != (src)) {                                             \

, resulting in build failure.

My log

$ gcc --version
gcc (Debian 12.2.0-14) 12.2.0
  CXX      libyami_decoder_la-vaapidecoder_h264.lo
In file included from vaapidecoder_h264.h:20,
                 from vaapidecoder_h264.cpp:21:
vaapidecoder_h264.cpp: In function 'void YamiMediaCodec::fillScalingList4x4(VAIQMatrixBufferH264*, std::shared_ptr<YamiParser::H264::PPS>)':
../codecparsers/h264Parser.h:101:20: error: comparison between two arrays [-Werror=array-compare]
  101 |         if ((dest) != (src)) {                                             \
      |             ~~~~~~~^~~~~~~~
vaapidecoder_h264.cpp:1247:13: note: in expansion of macro 'transform_coefficients_for_frame_macroblocks'
 1247 |             transform_coefficients_for_frame_macroblocks(                      \
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vaapidecoder_h264.cpp:1253:1: note: in expansion of macro 'FILL_SCALING_LIST'
 1253 | FILL_SCALING_LIST(4x4, 16)
      | ^~~~~~~~~~~~~~~~~
../codecparsers/h264Parser.h:101:20: note: use unary '+' which decays operands to pointers or '&'component_ref' not supported by dump_decl<declaration error>['view_convert_expr' not supported by dump_decl<declaration error>][0] != &'component_ref' not supported by dump_decl<declaration error>['view_convert_expr' not supported by dump_decl<declaration error>][0]' to compare the addresses
  101 |         if ((dest) != (src)) {                                             \
      |             ~~~~~~~^~~~~~~~
vaapidecoder_h264.cpp:1247:13: note: in expansion of macro 'transform_coefficients_for_frame_macroblocks'
 1247 |             transform_coefficients_for_frame_macroblocks(                      \
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vaapidecoder_h264.cpp:1253:1: note: in expansion of macro 'FILL_SCALING_LIST'
 1253 | FILL_SCALING_LIST(4x4, 16)
      | ^~~~~~~~~~~~~~~~~
vaapidecoder_h264.cpp: In function 'void YamiMediaCodec::fillScalingList8x8(VAIQMatrixBufferH264*, std::shared_ptr<YamiParser::H264::PPS>)':
../codecparsers/h264Parser.h:101:20: error: comparison between two arrays [-Werror=array-compare]
  101 |         if ((dest) != (src)) {                                             \
      |             ~~~~~~~^~~~~~~~
vaapidecoder_h264.cpp:1247:13: note: in expansion of macro 'transform_coefficients_for_frame_macroblocks'
 1247 |             transform_coefficients_for_frame_macroblocks(                      \
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vaapidecoder_h264.cpp:1254:1: note: in expansion of macro 'FILL_SCALING_LIST'
 1254 | FILL_SCALING_LIST(8x8, 64)
      | ^~~~~~~~~~~~~~~~~
../codecparsers/h264Parser.h:101:20: note: use unary '+' which decays operands to pointers or '&'component_ref' not supported by dump_decl<declaration error>['view_convert_expr' not supported by dump_decl<declaration error>][0] != &'component_ref' not supported by dump_decl<declaration error>['view_convert_expr' not supported by dump_decl<declaration error>][0]' to compare the addresses
  101 |         if ((dest) != (src)) {                                             \
      |             ~~~~~~~^~~~~~~~
vaapidecoder_h264.cpp:1247:13: note: in expansion of macro 'transform_coefficients_for_frame_macroblocks'
 1247 |             transform_coefficients_for_frame_macroblocks(                      \
      |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vaapidecoder_h264.cpp:1254:1: note: in expansion of macro 'FILL_SCALING_LIST'
 1254 | FILL_SCALING_LIST(8x8, 64)
      | ^~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors
make[2]: *** [Makefile:753: libyami_decoder_la-vaapidecoder_h264.lo] Error 1
issuefiler commented 1 year ago
CFLAGS=-Wno-array-compare CXXFLAGS=-Wno-array-compare ./configure

was my temporary solution.

But please, modify those parts of code to comply with the standard C++, rather than suppressing the warning.