2010-07-03 6 views
6

ce code CompilerLe nom de variable 'xor' entraîne une erreur de segmentation interne 'erreur de segmentation'!

int main(int argc, char **argv) 
{ 
    int xor = 0; 
} 

via

g++ main.cpp 

résultats dans:

internal compiler error: Segmentation fault 

avec

i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5659). 

Modification du nom de la variable supprime l'erreur.

Question: Est-ce que gcc provient d'Apple crap?

+1

évidemment c'est. –

+1

On dirait un candidat pour un rapport de bogue à l'équipe gcc. – yfeldblum

+0

Pour moi sur 4.4.1-4ubuntu9, il donne juste une erreur normale, "attendu unqualified-id avant '^' jeton." (xor est un alias pour ^). Pas de défaut de segmentation. –

Répondre

3

Toute fois que votre segfaults compilateur, c'est un bug. Votre cas de test déjà réduit est un candidat parfait à signaler à GCC.

+1

Il doit être signalé à Apple (http://developer.apple.com/bugreporter/). Ils peuvent mieux déterminer si c'est un bug qu'ils ont introduit, ou présent en amont. Si c'est en amont, ils vont généralement déposer un bug là-bas. –

+0

Merci pour votre indice. Je l'ai signalé à Apple ainsi qu'à l'équipe de gcc. – WolfgangA

3

and_eq, bitand, bitor, compl, non, not_eq, ou, or_eq, XOR et xor_eq sont des mots clés qui sont activés avec -ansi ou -foperator noms

vous avez un de ces commutateurs activés?

vérifier aussi: this

+0

Merci d'avoir signalé cette "fonctionnalité cachée"! – WolfgangA

+1

@Wolfgang, ce n'est pas vraiment g ++ - spécifique, ou caché. La norme C++ indique que 'xor' est réservé, et l'utilisation d'un mot réservé dans un autre contexte est un comportement indéfini. Cela signifie que tout peut arriver. Bien sûr, il est préférable que le compilateur imprime un message d'erreur clair. –

+0

@Matthew Je voulais dire comme une blague. Utiliser des opérateurs logiques épelés dans des conditions est une fonctionnalité intéressante qui rend le code plus lisible (en particulier pour les collègues qui sont habitués aux langages de script), mais je doute que beaucoup de programmeurs C++ connaissent ou utilisent cela. – WolfgangA