[Bug tree-optimization/106157] New: ICE verify_ssa failed since r13-1268-g8c99e307b20c502e

marxin at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Jul 1 09:20:00 GMT 2022


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106157

            Bug ID: 106157
           Summary: ICE verify_ssa failed since r13-1268-g8c99e307b20c502e
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
                CC: aldyh at redhat dot com, amacleod at redhat dot com
  Target Milestone: ---

The following crashes:

$ cat 1.ii
namespace ffmpegthumbnailer {

struct VideoFrame {
  unsigned lineSize;
  void *xxx;
};


} // namespace ffmpegthumbnailer
class QString;
class QImage;
namespace ffmpegthumbnailer {
struct VideoThumbnailer {
  void generateThumbnail(const QString &, QImage &);
  int m_ThumbnailSize;
  bool m_MaintainAspectRatio;
};
struct MovieDecoder {
  void getScaledVideoFrame(int, bool, VideoFrame &);
};
void VideoThumbnailer::generateThumbnail(const QString &, QImage &) {
  MovieDecoder movieDecoder;
  VideoFrame videoFrame;
  movieDecoder.getScaledVideoFrame(m_ThumbnailSize, m_MaintainAspectRatio,
                                   videoFrame);
}
} // namespace ffmpegthumbnailer


class QString;
class QImage;
namespace ffmpegthumbnailer {
} // namespace ffmpegthumbnailer
struct FFMpegThumbnailer {
  bool create(const QString &, QImage &);
  ffmpegthumbnailer::VideoThumbnailer m_Thumbnailer;
};
__attribute__((visibility("default"))) bool
FFMpegThumbnailer::create(const QString &path, QImage &img) {
  m_Thumbnailer.generateThumbnail(path, img);
}

$ cat 2.ii
void __throw_length_error(char);
struct __is_integer {
  enum { __value = 1 };
};
struct __is_integer_nonstrict : __is_integer {
  enum { __width = __value ? sizeof(long) * 8 : 0 };
};
struct __numeric_traits_integer {
  static const int __digits = __is_integer_nonstrict::__width - 1;
  static const long __max = 1 ? (((long)1 << __digits - 1) - 1 << 1) + 1 : 0;
};
template <typename _FIte, typename _Tp>
void __fill_a(_FIte __first, _FIte __last, _Tp &__value) {
  if (long __len = __last - __first)
    __builtin_memset(__first, __value, __len);
}
template <typename _OI, typename _Size, typename _Tp>
void fill_n(_OI __first, _Size __n, _Tp __value) {
  __fill_a(__first, __first + __n, __value);
}
template <typename> struct allocator;
template <typename> struct allocator_traits;
template <typename _Tp> struct allocator_traits<allocator<_Tp>> {
  using pointer = _Tp *;
};
struct __alloc_traits : allocator_traits<allocator<char>> {};
template <typename _ForwardIterator, typename _Size, typename _Tp>
void __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, _Tp) {
  typename __val = *++__first;
  fill_n(__first, __n - 1, __val);
}
struct _Vector_base {
  struct {
    __alloc_traits::pointer _M_start;
    __alloc_traits::pointer _M_finish;
  } _M_impl;
  __alloc_traits::pointer _M_allocate(long);
};
template <typename> struct vector : _Vector_base {
  void resize(unsigned long __new_size) {
    long __trans_tmp_5, __trans_tmp_4(_M_impl._M_finish - _M_impl._M_start);
    if (__new_size > __trans_tmp_4) {
      __trans_tmp_5 = _M_impl._M_finish - _M_impl._M_start;
      _M_default_append(__new_size - __trans_tmp_5);
    }
  }
  void clear() {
    __alloc_traits::pointer __pos = _M_impl._M_start;
    if (_M_impl._M_finish - _M_impl._M_start)
      _M_impl._M_finish = __pos;
  }
  void _M_default_append(unsigned long);
};
template <typename _Tp> void vector<_Tp>::_M_default_append(unsigned long __n)
{
  long __trans_tmp_12, __trans_tmp_9(_M_impl._M_finish - _M_impl._M_start),
      __navail;
  unsigned long __diffmax = __numeric_traits_integer::__max;
  if (__trans_tmp_9 > __diffmax - __trans_tmp_9)
    ;
  if (__navail) {
    long __trans_tmp_8(_M_impl._M_finish - _M_impl._M_start);
    if (__diffmax - __trans_tmp_8 < __n)
      __throw_length_error(0);
    __alloc_traits::pointer __new_start(_M_allocate(__trans_tmp_12));
    char __trans_tmp_2;
    __uninitialized_default_n_a(__new_start, __n, __trans_tmp_2);
  }
}
namespace ffmpegthumbnailer {
struct VideoFrame {
  unsigned lineSize;
  vector<char> frameData;
};
struct MovieDecoder {
  void getScaledVideoFrame(int, bool, VideoFrame &);
};
void MovieDecoder::getScaledVideoFrame(int, bool, VideoFrame &videoFrame) {
  videoFrame.frameData.clear();
  videoFrame.frameData.resize(videoFrame.lineSize);
}
} // namespace ffmpegthumbnailer

$ g++ -flto=auto -O2 -shared 1.ii 2.ii -fPIC -fvisibility=hidden -w
1.ii: In member function ‘create’:
1.ii:39:1: error: definition in block 5 does not dominate use in block 6
   39 | FFMpegThumbnailer::create(const QString &path, QImage &img) {
      | ^
for SSA_NAME: _31 in statement:
_12 = _31;
during GIMPLE pass: dom
1.ii:39:1: internal compiler error: verify_ssa failed
0x106cfdd verify_ssa(bool, bool)
        /home/marxin/Programming/gcc/gcc/tree-ssa.cc:1211
0xd29c58 execute_function_todo
        /home/marxin/Programming/gcc/gcc/passes.cc:2098
0xd2a0ba execute_todo
        /home/marxin/Programming/gcc/gcc/passes.cc:2145
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
make: *** [/tmp/ccXPfUiR.mk:2: /tmp/ccMES7RX.ltrans0.ltrans.o] Error 1
lto-wrapper: fatal error: make returned 2 exit status
compilation terminated.
mold: lto-wrapper failed


More information about the Gcc-bugs mailing list