Skip to content

std::vector<std::byte> segfaults with gcc-15 #82

@anders-wind

Description

@anders-wind

First of all thanks for the Library!
I unfortunately do not have the time to come up with a reproducible build, but ill try to be as precise as possible

but In our project we insert a std::vectorstd::byte using a table writer insert

auto ReceivedPacketDB::write(tao::pq::table_writer& tw) const -> void
{
    tw.insert(this->local_trading_date, // absl::CivilDay with custom bind
                   this->local_timestamp, // absl::Time with custom bind
                   this->multicast_address, // std::string
                   this->multicast_port, // uint16_t
                   this->packet); // std::vector<std::byte>
}

If we try to retreive the values afterwards

       writer.push(db::rows::ReceivedPacketDB {
            .local_trading_date = local_trading_date,
            .local_timestamp = time,
            .multicast_address = "213.121.124.15",
            .multicast_port = 12345,
            .packet = std::vector {std::byte {0x12}, std::byte {0xC1}},
        });
        const auto received_packets =
            db_conn->execute(fmt::format("SELECT * FROM {}", db::rows::ReceivedPacketDB::table_name));
        REQUIRE_EQ(received_packets.columns(), db::rows::ReceivedPacketDB::columns.size());
        REQUIRE_EQ(received_packets.size(), 1);

        CHECK_EQ(received_packets[0]["local_trading_date"].as<absl::CivilDay>(), local_trading_date);
        CHECK_EQ(received_packets[0]["local_timestamp"].as<absl::Time>(), time.unwrap<ReceivedTimestamp>());
        CHECK_EQ(received_packets[0]["multicast_address"].as<std::string>(), "213.121.124.15");
        CHECK_EQ(received_packets[0]["multicast_port"].as<uint16_t>(), 12345);
        CHECK_EQ(received_packets[0]["packet"].as<std::vector<std::byte>>(),
                 std::vector {std::byte {0x12}, std::byte {0xC1}});

The code halts on the CHECK_EQ(received_packets[0]["packet"].as<std::vector<std::byte>>(), std::vector {std::byte {0x12}, std::byte {0xC1}}); line and after some time it segfaults

I can see that the data ends up in the database from running psql to access my local postgres docker db

 local_trading_date |   local_timestamp   | multicast_address | multicast_port | packet 
--------------------+---------------------+-------------------+----------------+--------
 2025-10-24         | 1761309915103126351 | 213.121.124.15    |          12345 | \x12c1

Most importantly this does not occur on gcc-13, gcc-14, clang-19, clang-20 or clang-21.
The error also does not occur in debug builds.

We build from HEAD which should be from around 2025-07-11.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions