O GCC falha ao relatar uma chamada lambda constexpr mal formada

9

Abaixo estão dois casos de teste para Comportamento indefinido, expressos como IIFE (Imediatamente chamado de lambda-axpression):

constexpr auto test3 = []{
    int* p{};
    {   
        int x{};
        p = &x;
    }
    return *p; // Undefined Behaviour
}(); // IIFE

constexpr auto test4 = []{
    int x = std::numeric_limits<int>::min();
    int y = -x;  // Undefined Behaviour
    return y;
}();

int main() {}

Quando compilado com o tronco GCC, test4é corretamente rejeitado, pois exibe Comportamento indefinido em a constexpr. Por outro lado, test3é aceito.

O GCC está certo em aceitar test3?

wimalopaan
fonte
4
@ formerlyknownas_463035818 O padrão exige que TODOS os UBs em um consumidor sejam diagnosticados.
NathanOliver 22/01
@NathanOliver oh thanks. é assim que eu aprendo, eu
cometo
Sim. Parece um bug do GCC
NathanOliver
Vou denunciá-lo.
wimalopaan 22/01

Respostas:

7

O GCC está certo em aceitar o test3?

Não, isso é um bug do GCC. Acabei de denunciá- lo como bug # 93389 .

wimalopaan
fonte
Obrigado por simplificar a pergunta e a resposta!
wimalopaan 22/01