Bug 1525304

Summary: internal compiler error: in force_type_die, at dwarf2out.c:25128
Product: Red Hat Developer Toolset Reporter: Brad Hubbard <bhubbard>
Component: gccAssignee: Marek Polacek <mpolacek>
Status: CLOSED ERRATA QA Contact: Michael Petlan <mpetlan>
Severity: medium Docs Contact: Vladimír Slávik <vslavik>
Priority: medium    
Version: DTS 7.1 RHEL 7CC: aoliva, bgollahe, davejohansen, extras-qa, fweimer, jakub, jwakely, kanderso, law, mcermak, mnewsome, mpolacek, ohudlick, vslavik
Target Milestone: alpha   
Target Release: 7.1   
Hardware: x86_64   
OS: Linux   
Fixed In Version: devtoolset-7-gcc-7.2.1-6.el6 Doc Type: Bug Fix
Doc Text:
Previously, the *GCC* compiler handled the Debugging Information Entries (DIE) incorrectly when generating them for a C++ class method nested in another class method. As a consequence, the compiler might terminate unexpectedly when compiling such C++ code. Handling of DIE in this situation has been corrected and the problem no longer occurs.
Story Points: ---
Clone Of: 1516576 Environment:
Last Closed: 2018-05-03 05:13:47 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Bug Depends On: 1516576    
Bug Blocks: 1516577    

Description Brad Hubbard 2017-12-13 02:04:38 UTC
+++ This bug was initially created as a clone of Bug #1516576 +++

Description of problem:

Whilst compiling ceph we encountered an ICE. I was able to reduce it to the following. Note this is different to the reproducer in the gcc bug report identified below but involves similarly nested classes.

$ cat << EOF >reproducer.ii
template <typename a> struct b { a c; };
template <typename d> struct e { d *operator->(); };
template <typename d> class f {
  typedef e<d> g;
class h {
class j {
  virtual ~j();
  struct k : h {
    int l;
    k() : h(l) {
      struct m : j {
        m() {}
struct n {
  n() {
    for (f<b<b<j *>>>::g i;;)
      delete i->c.c;
void o() { n(); }
$ g++ -c -O2 -g reproducer.ii                                                                                                                                                                                     
reproducer.ii: In destructor ‘virtual j::k::k()::m::~m()’:
reproducer.ii:17:14: internal compiler error: in force_type_die, at dwarf2out.c:25128
       struct m : j {

Version-Release number of selected component (if applicable):

How reproducible:

Actual results:
internal compiler error

Expected results:
Successful compile

Additional info:
This is the linked gcc bug 82155.
Currently we are having to build with a gcc package including this patch which resolves the issue, https://github.com/gcc-mirror/gcc/commit/c7db9cf55ae4022f134624db81cc70d694079b6c

Giving this high severity as it is adversely affecting the ceph build system.

Comment 4 Michael Petlan 2018-04-18 16:54:19 UTC
Tests passed with devtoolset-7-gcc-7.3.1-5.4.el{6,7}.

Comment 8 errata-xmlrpc 2018-05-03 05:13:47 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.