Bug 91493

Summary: g++ 9.2.1 crashes compiling clickhouse
Product: gcc Reporter: Rafael David Tinoco <rafaeldtinoco>
Component: c++Assignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED DUPLICATE    
Severity: normal CC: webrown.cpp
Priority: P3    
Version: 9.2.1   
Target Milestone: ---   
See Also: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91500
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed: 2019-08-20 00:00:00

Description Rafael David Tinoco 2019-08-20 01:40:04 UTC
The following function:

std::string toString(const ColumnDefaultKind kind)
{
    static const std::unordered_map<ColumnDefaultKind, std::string> map{
        { ColumnDefaultKind::Default, AliasNames::DEFAULT },
        { ColumnDefaultKind::Materialized, AliasNames::MATERIALIZED },
        { ColumnDefaultKind::Alias, AliasNames::ALIAS }
    };

    const auto it = map.find(kind);
    return it != std::end(map) ? it->second : throw Exception{"Invalid ColumnDefaultKind", ErrorCodes::LOGICAL_ERROR};
}

causes gcc9 (with attached dump) to crash while other similar function (in related syntax):

ColumnDefaultKind columnDefaultKindFromString(const std::string & str)
{
    static const std::unordered_map<std::string, ColumnDefaultKind> map{
        { AliasNames::DEFAULT, ColumnDefaultKind::Default },
        { AliasNames::MATERIALIZED, ColumnDefaultKind::Materialized },
        { AliasNames::ALIAS, ColumnDefaultKind::Alias }
    };

    const auto it = map.find(str);
    return it != std::end(map) ? it->second : throw Exception{"Unknown column default specifier: " + str, ErrorCodes::LOGICAL_ERROR};
}

does not. Changing the syntax to:

std::string toString(const ColumnDefaultKind kind)
{
    static const std::unordered_map<ColumnDefaultKind, std::string> map{
        { ColumnDefaultKind::Default, AliasNames::DEFAULT },
        { ColumnDefaultKind::Materialized, AliasNames::MATERIALIZED },
        { ColumnDefaultKind::Alias, AliasNames::ALIAS }
    };

    const auto it = map.find(kind);

    if (it != std::end(map))
        throw Exception{"Invalid ColumnDefaultKind", ErrorCodes::LOGICAL_ERROR};

    return it->second;
}

fixes the issue.
Comment 1 Richard Biener 2019-08-20 07:32:24 UTC
Please provide a testcase that can be compiled.
Comment 2 Rafael David Tinoco 2019-08-20 15:08:36 UTC
Related:

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

Possibly a duplicate.
Comment 3 Sam James 2024-03-23 10:51:40 UTC

*** This bug has been marked as a duplicate of bug 91500 ***