[Bug c++/104981] New: [coroutines] Internal compiler error when promise object's constructor takes a base class of the object parameter

ensadc at mailnesia dot com gcc-bugzilla@gcc.gnu.org
Fri Mar 18 15:32:33 GMT 2022


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

            Bug ID: 104981
           Summary: [coroutines] Internal compiler error when promise
                    object's constructor takes a base class of the object
                    parameter
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ensadc at mailnesia dot com
                CC: iains at gcc dot gnu.org
  Target Milestone: ---

#include <coroutine>

class Base {};

struct PromiseType;

struct Result {
    using promise_type = PromiseType;
};

struct PromiseType {
    PromiseType(const Base& parser, auto&&...) {}

    Result get_return_object() { return {}; }

    static std::suspend_never initial_suspend() { return {}; }
    static std::suspend_always final_suspend() noexcept { return {}; }
    [[noreturn]] static void unhandled_exception() { throw; }

    void return_value(int) {}
};

struct Derived : Base {
    Result f() {
        co_return 42;
    }
};

int main() {
    Derived d;
    d.f();
}

====
test.cpp: In member function ‘Result Derived::f()’:
test.cpp:26:5: internal compiler error: tree check: expected record_type or
union_type or qual_union_type, have reference_type in lookup_base, at
cp/search.cc:233
   26 |     }
      |     ^
0x8e421c tree_check_failed(tree_node const*, char const*, int, char const*,
...)
        ../../gcc/gcc/tree.cc:8724
0x751a6a tree_check3(tree_node*, char const*, int, char const*, tree_code,
tree_code, tree_code)
        ../../gcc/gcc/tree.h:3490
0x751a6a lookup_base(tree_node*, tree_node*, int, base_kind*, int)
        ../../gcc/gcc/cp/search.cc:233
0xa58c38 convert_to_base(tree_node*, tree_node*, bool, bool, int)
        ../../gcc/gcc/cp/class.cc:627
0xa2cfc2 convert_like_internal
        ../../gcc/gcc/cp/call.cc:8166
0xa2c5b0 convert_like_internal
        ../../gcc/gcc/cp/call.cc:8122
0xa316e1 convert_like_with_context
        ../../gcc/gcc/cp/call.cc:8466
0xa316e1 build_over_call
        ../../gcc/gcc/cp/call.cc:9579
0xa34d5b build_new_method_call(tree_node*, tree_node*, vec<tree_node*, va_gc,
vl_embed>**, tree_node*, int, tree_node**, int)
        ../../gcc/gcc/cp/call.cc:11171
0xa36147 build_special_member_call(tree_node*, tree_node*, vec<tree_node*,
va_gc, vl_embed>**, tree_node*, int, int)
        ../../gcc/gcc/cp/call.cc:10645
0xa9375d morph_fn_to_coro(tree_node*, tree_node**, tree_node**)
        ../../gcc/gcc/cp/coroutines.cc:4912
0xade26f finish_function(bool)
        ../../gcc/gcc/cp/decl.cc:17718
0xbd22f2 cp_parser_function_definition_after_declarator
        ../../gcc/gcc/cp/parser.cc:31242
0xbd2645 cp_parser_late_parsing_for_member
        ../../gcc/gcc/cp/parser.cc:32161
0xba8c71 cp_parser_class_specifier_1
        ../../gcc/gcc/cp/parser.cc:26176
0xba9f7c cp_parser_class_specifier
        ../../gcc/gcc/cp/parser.cc:26200
0xba9f7c cp_parser_type_specifier
        ../../gcc/gcc/cp/parser.cc:19344
0xbab06c cp_parser_decl_specifier_seq
        ../../gcc/gcc/cp/parser.cc:15903
0xbabc04 cp_parser_simple_declaration
        ../../gcc/gcc/cp/parser.cc:15151
0xbd9f32 cp_parser_declaration
        ../../gcc/gcc/cp/parser.cc:14964
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.


More information about the Gcc-bugs mailing list