[Bug 1887338] [NEW] The gcc provided by gcc-10 package produces internal compiler errors not present in gcc version 10.1

Jorge Antonio Perez 1887338 at bugs.launchpad.net
Mon Jul 13 05:17:40 UTC 2020


Public bug reported:

BACKGROUND

Simple code involving coroutines results in internal compiler errors in
the version of gcc provided by this package. I am filing a bug report
here because gcc version 10.1 does not produce these errors, and these
errors are only present in the compiler version provided by the gcc-10
package.

On my system, this version is:

 g++-10 (Ubuntu 10-20200411-0ubuntu1) 10.0.1 20200411 (experimental)
[master revision
bb87d5cc77d:75961caccb7:f883c46b4877f637e0fa5025b4d6b5c9040ec566]

REPRODUCING THE BUG

In order to reproduce the bug, create a file main.cpp and compile as:

g++-10 -std=c++20 -fcoroutines main.cpp

Compiling this file will produce an internal compiler error. Here, g++-10 invokes the g++ compiler provided by this package. This file should contain the following code (code inside ticks):
```
#include <coroutine>
#include <exception>

// Compiler version resulting in bug: gcc 10.0.1 20200411 (experimental) 
// Compile with:
// g++-10 -std=c++20 -fcoroutines main.cpp

struct promise {
    std::suspend_never initial_suspend() { return {}; }
    std::suspend_never final_suspend() { return {}; }
    void return_void() {}
    bool get_return_object() { return true; }
    static bool get_return_object_on_allocation_failure() { return false; }
    [[noreturn]] void unhandled_exception() { std::terminate(); }
};

struct result {
    bool success;
    result(bool success) : success(success) {}
    using promise_type = promise;
};

result foo() {
    co_return; 
}

int main() {
    foo();
}
```

Under the version of gcc provided by this package, the output of
compilation is:

during RTL pass: expand
main.cpp: In function ‘result foo()’:
main.cpp:25:1: internal compiler error: in expand_expr_addr_expr_1, at expr.c:8070
   25 | }
      | ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-10/README.Bugs> for instructions.

Internal compiler errors such as these were fixed in gcc 10.1. Here is a
link to Compiler Explorer demonstrating that it compiles fine under
10.1: https://godbolt.org/z/dMrY8r

There are many similar code examples that result in internal compiler
errors, and I believe the occurrence of these errors will be frustrating
for anyone attempting to use C++20 features such as coroutines. In
addition, some code examples (such as the one above) only produce a
compiler error when there's no optimization flag, but compile fine with
optimization enabled. This is extremely unexpected behavior.

** Affects: gcc-10 (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to gcc-10 in Ubuntu.
https://bugs.launchpad.net/bugs/1887338

Title:
  The gcc provided by gcc-10 package produces internal compiler errors
  not present in gcc version 10.1

Status in gcc-10 package in Ubuntu:
  New

Bug description:
  BACKGROUND

  Simple code involving coroutines results in internal compiler errors
  in the version of gcc provided by this package. I am filing a bug
  report here because gcc version 10.1 does not produce these errors,
  and these errors are only present in the compiler version provided by
  the gcc-10 package.

  On my system, this version is:

   g++-10 (Ubuntu 10-20200411-0ubuntu1) 10.0.1 20200411 (experimental)
  [master revision
  bb87d5cc77d:75961caccb7:f883c46b4877f637e0fa5025b4d6b5c9040ec566]

  REPRODUCING THE BUG

  In order to reproduce the bug, create a file main.cpp and compile as:

  g++-10 -std=c++20 -fcoroutines main.cpp

  Compiling this file will produce an internal compiler error. Here, g++-10 invokes the g++ compiler provided by this package. This file should contain the following code (code inside ticks):
  ```
  #include <coroutine>
  #include <exception>

  // Compiler version resulting in bug: gcc 10.0.1 20200411 (experimental) 
  // Compile with:
  // g++-10 -std=c++20 -fcoroutines main.cpp

  struct promise {
      std::suspend_never initial_suspend() { return {}; }
      std::suspend_never final_suspend() { return {}; }
      void return_void() {}
      bool get_return_object() { return true; }
      static bool get_return_object_on_allocation_failure() { return false; }
      [[noreturn]] void unhandled_exception() { std::terminate(); }
  };

  struct result {
      bool success;
      result(bool success) : success(success) {}
      using promise_type = promise;
  };

  result foo() {
      co_return; 
  }

  int main() {
      foo();
  }
  ```

  Under the version of gcc provided by this package, the output of
  compilation is:

  during RTL pass: expand
  main.cpp: In function ‘result foo()’:
  main.cpp:25:1: internal compiler error: in expand_expr_addr_expr_1, at expr.c:8070
     25 | }
        | ^
  Please submit a full bug report,
  with preprocessed source if appropriate.
  See <file:///usr/share/doc/gcc-10/README.Bugs> for instructions.

  Internal compiler errors such as these were fixed in gcc 10.1. Here is
  a link to Compiler Explorer demonstrating that it compiles fine under
  10.1: https://godbolt.org/z/dMrY8r

  There are many similar code examples that result in internal compiler
  errors, and I believe the occurrence of these errors will be
  frustrating for anyone attempting to use C++20 features such as
  coroutines. In addition, some code examples (such as the one above)
  only produce a compiler error when there's no optimization flag, but
  compile fine with optimization enabled. This is extremely unexpected
  behavior.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gcc-10/+bug/1887338/+subscriptions



More information about the foundations-bugs mailing list