2016-09-10 1 views
5

J'ai trouvé un bogue dans GCC 6 et 7 (pas dans GCC 5) dans les fonctions constexpr, ce qui conduit à des résultats différents si la fonction est évaluée au moment de la compilation (mauvais résultat) ou runtime (résultat correct).GCC Bug - Accès au tableau In/Decrement dans constexpr

#include <iostream> 

constexpr int bar(int *b) { 
    int i = 0; 
    b[i++] = 1; // GCC produce here an failure. 

    return 0; 
} 

constexpr int foo() 
{ 
    int tmp[] = {0}; 
    bar(tmp); 

    return tmp[0]; 
} 

constexpr int cexprI = foo(); 

int main() 
{ 
    std::cout << cexprI << " " << foo() << "\n"; 

    return 0; 
} 

Live Example

Le problème est l'incrément (se produit également pour décrément) fonctionnement intérieur de l'accès au tableau.

Le résultat de la compilation de l'expression constante est 0 (faux) et le résultat d'exécution est 1 (correct).

Quelqu'un pourrait-il confirmer ce bug et signaler à: https://gcc.gnu.org/bugzilla/

Je ne peux pas créer un compte là-bas User account creation has been restricted.. J'ai contacté l'administrateur, mais le bug pour moi est majeur à critique. Donc, il voulait aussi vous informer. Je vous remercie!

Répondre