GCC가 컴파일되지 않는 이유(lto 및 pgo로 구축)를 아는 사람이 있습니까?

GCC가 컴파일되지 않는 이유(lto 및 pgo로 구축)를 아는 사람이 있습니까?

잘못된 정보:

/var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/d/runtime.cc:37:6: warning: type 'libcall_type' violates the C++ One Definition Rule [-Wodr]
   37 | enum libcall_type
      |      ^
/var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/rtl.h:4108:6: note: an enum with different value name is defined in another translation unit
 4108 | enum libcall_type
      |      ^
during RTL pass: ira
/var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/vec.h: In function 'reserve':
/var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/vec.h:385: internal compiler error: in to_frequency, at profile-count.c:265
  385 | }
      |
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://bugs.gentoo.org/> for instructions.
make[4]: *** [/var/tmp/portage/sys-devel/gcc-9.2.0-r2/temp/ccTMcIub.mk:2: /var/tmp/portage/sys-devel/gcc-9.2.0-r2/temp/d21.v85pN6.ltrans0.ltrans.o] Error 1
lto-wrapper: fatal error: make returned 2 exit status
compilation terminated.
/usr/x86_64-pc-linux-gnu/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
make[3]: *** [/var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/gcc-9.2.0/gcc/d/Make-lang.in:148: d21] Error 1
make[3]: *** Waiting for unfinished jobs....
rm gcc.pod gdc.pod gccgo.pod gfortran.pod
make[3]: Leaving directory '/var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/build/gcc'
make[2]: *** [Makefile:4915: all-stagefeedback-gcc] Error 2
make[2]: Leaving directory '/var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/build'
make[1]: *** [Makefile:25729: stagefeedback-bubble] Error 2
make[1]: Leaving directory '/var/tmp/portage/sys-devel/gcc-9.2.0-r2/work/build'
make: *** [Makefile:25749: profiledbootstrap] Error 2

특정 기능:

int
profile_count::to_frequency (struct function *fun) const
{
  if (!initialized_p ())
    return BB_FREQ_MAX;
  if (*this == profile_count::zero ())
    return 0;
  gcc_assert (REG_BR_PROB_BASE == BB_FREQ_MAX
              && fun->cfg->count_max.initialized_p ());
  profile_probability prob = probability_in (fun->cfg->count_max);
  if (!prob.initialized_p ())
    return REG_BR_PROB_BASE;
  return prob.to_reg_br_prob_base ();
}

저는 gcc 9.2로 구축해 왔으며 일부 더 작은 시스템과 커널을 가지고 있습니다. 어쩌면 뭔가 빠졌을 수도 있습니다. 그 외에도 "내부 컴파일러 오류" 문제에 대해 더 좋은 소식을 찾을 수 있을지 궁금합니다.

답변1

LTO+PGO 컴파일러 오류입니다.https://gcc.gnu.org/PR97295

CXXFLAGS=-O3 설정으로 gcc를 컴파일할 때 젠투에서 비슷한 문제가 관찰되었습니다. 이 문제는 해결되었습니다https://bugs.gentoo.org/701786.

관련 정보