C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[GCC] macros un peu génantes : est-ce un bug ?

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Christophe de VIENNE
Guest





PostPosted: Tue Mar 22, 2005 10:11 am    Post subject: [GCC] macros un peu génantes : est-ce un bug ? Reply with quote



Bonjour,

Alors que je définissais tranquillement une classe ressemblant à ceci :

class version {
int major;
int minor;
int release;
};

Je me suis rendu compte que des macros "major" et "minor" exitaient et
étaient substituées en "gnu_dev_major" et "gnu_dev_minor".

L'include incriminé est... string (indirectement) !

db_core.cc:14:1: warning: "major" redefined
In file included from /usr/include/sys/types.h:219,
from /usr/include/stdlib.h:433,
from
/usr/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../include/c++/3.4.3/cstdlib:52,
from
/usr/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../include/c++/3.4.3/bits/stl_algobase.h:67,
from
/usr/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../include/c++/3.4.3/bits/char_traits.h:46,
from
/usr/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../include/c++/3.4.3/string:47,
from db_core.hh:9,
from db_core.cc:6:
/usr/include/sys/sysmacros.h:64:1: warning: this is the location of the
previous definition


Ma question est en fait : peut-on considérer cela comme un bug de gcc
(l'inclusion de cstdlib et non stdlib.h devrait me protéger de ce genre
de surprise), et dois-je en faire un bug-report ?


A+

Christophe


--
Christophe de Vienne
Back to top
Gabriel Dos Reis
Guest





PostPosted: Tue Mar 22, 2005 5:04 pm    Post subject: Re: [GCC] macros un peu génantes : est-ce un bug ? Reply with quote



Christophe de VIENNE <cdevienne (AT) alphacent (DOT) com> writes:

Quote:
Bonjour,

Alors que je définissais tranquillement une classe ressemblant à ceci :

class version {
int major;
int minor;
int release;
};

Je me suis rendu compte que des macros "major" et "minor" exitaient et
étaient substituées en "gnu_dev_major" et "gnu_dev_minor".

L'include incriminé est... string (indirectement) !

<string.h> ou <string> ou <stdlib.h> ?

quelle version de GCC ?

aucune des versions que j'ai à ma portée (3.3.x, 3.4.x et 4.0.x) ne
se comporte aussi étrangement.

-- Gaby

Back to top
Christophe de VIENNE
Guest





PostPosted: Tue Mar 22, 2005 5:19 pm    Post subject: Re: [GCC] macros un peu génantes : est-ce un bug ? Reply with quote



Gabriel Dos Reis wrote:
Quote:
Christophe de VIENNE <cdevienne (AT) alphacent (DOT) com> writes:

|
| L'include incriminé est... string (indirectement) !

string.h> ou <string> ou <stdlib.h> ?

J'inclue string uniquement, mais le problème viens de cstdlib. Pour plus
de clarté j'ai reproduit le comportement (voir plus loin).

Quote:

quelle version de GCC ?

3.4.3 ( sur une arch current, la compilo du gcc et/ou de la glibc jouant
peut-être ).


Reproduction du problème :

[cdevienne@luciole ~]$ g++ --version
g++ (GCC) 3.4.3
Copyright © 2004 Free Software Foundation, Inc.
Ce logiciel est libre; voir les sources pour les conditions de copie.
Il n'y a PAS
GARANTIE; ni implicite pour le MARCHANDAGE ou pour un BUT PARTICULIER.

[cdevienne@luciole ~]$ cat test.h
#include <cstdlib>

#define major toto

[cdevienne@luciole ~]$ g++ -E -o test.ii test.h
test.h:3:1: attention : "major" redefined
Dans le fichier inclus à partir de /usr/include/sys/types.h:219,
à partir de /usr/include/stdlib.h:433,
à partir de
/usr/lib/gcc/i686-pc-linux-gnu/3.4.3/../../../../include/c++/3.4.3/cstdlib:52,
à partir de test.h:1:
/usr/include/sys/sysmacros.h:64:1: attention : this is the location of
the previous definition



A+

Christophe


--
Christophe de Vienne

Back to top
James Kanze
Guest





PostPosted: Tue Mar 22, 2005 9:07 pm    Post subject: Re: [GCC] macros un peu génantes : est-ce un bug ? Reply with quote

Gabriel Dos Reis wrote:
Quote:
Christophe de VIENNE <cdevienne (AT) alphacent (DOT) com> writes:

| Alors que je définissais tranquillement une classe ressemblant à ceci :

| class version {
| int major;
| int minor;
| int release;
| };

| Je me suis rendu compte que des macros "major" et "minor"
| exitaient et étaient substituées en "gnu_dev_major" et
| "gnu_dev_minor".

| L'include incriminé est... string (indirectement) !

string.h> ou <string> ou <stdlib.h> ?

quelle version de GCC ?

aucune des versions que j'ai à ma portée (3.3.x, 3.4.x et
4.0.x) ne se comporte aussi étrangement.

Surtout, sur quel système, et avec quelles options de
compilation ?

Certains vieux Unix avait des macros pour major et minor dans
stat.h (ou un en-tête qu'il incluait, peut-être sys/types.h). Ce
n'est pas standard selon Posix, mais c'est possible que certains
systèmes continuent de les supporter pour des raisons
historiques, au moins avec certaines combinaisons des options
-D. Or, ça ne m'étonnerait pas que par un chemin indirect,
certains en-têtes de g++ finissent par inclure l'en-tête en
question.

(Note bien cependant que ce n'est que de la spéculation de ma
part. Comme toi, je n'ai jamais vu le problème moi-même.)

--
James Kanze mailto: [email]james.kanze (AT) free (DOT) fr[/email]
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34

Back to top
James Kanze
Guest





PostPosted: Tue Mar 22, 2005 9:22 pm    Post subject: Re: [GCC] macros un peu génantes : est-ce un bug ? Reply with quote

James Kanze wrote:
Quote:
Gabriel Dos Reis wrote:
Christophe de VIENNE <cdevienne (AT) alphacent (DOT) com> writes:

| Alors que je définissais tranquillement une classe
| ressemblant à ceci :

| class version {
| int major;
| int minor;
| int release;
| };

| Je me suis rendu compte que des macros "major" et "minor"
| exitaient et étaient substituées en "gnu_dev_major" et
| "gnu_dev_minor".

| L'include incriminé est... string (indirectement) !

string.h> ou <string> ou <stdlib.h> ?

quelle version de GCC ?

aucune des versions que j'ai à ma portée (3.3.x, 3.4.x et
4.0.x) ne se comporte aussi étrangement.

Surtout, sur quel système, et avec quelles options de
compilation ?

Certains vieux Unix avait des macros pour major et minor dans
stat.h (ou un en-tête qu'il incluait, peut-être sys/types.h).
Ce n'est pas standard selon Posix, mais c'est possible que
certains systèmes continuent de les supporter pour des raisons
historiques, au moins avec certaines combinaisons des options
-D. Or, ça ne m'étonnerait pas que par un chemin indirect,
certains en-têtes de g++ finissent par inclure l'en-tête en
question.

(Note bien cependant que ce n'est que de la spéculation de ma
part. Comme toi, je n'ai jamais vu le problème moi-même.)

Correction. Je viens de faire l'essai moi-même sous Linux, et il
y a effectivement des macros de ce nom dans
/usr/include/sys/sysmacros.h. Ce n'est donc pas un ancien
système, mais quelque chose de tout récent.

Toujours est-il qu'il s'agit d'un en-tête système (g++ est dans
/opt sur mon système). Ce n'est pas un fichier installé par g++.
Le copyright dit bien lib C du compilateur C de GNU, mais la
version que j'ai fait partie de la distribution Linux, et non
gcc. Je n'exclurais pas que quelqu'un de Linux a fait joujou,
d'autant plus que je ne trouve pas de fichier de ce nom dans la
distribution de g++ 3.4.3, ni dans le répertoire objet où j'ai
généré le compilateur.

--
James Kanze mailto: [email]james.kanze (AT) free (DOT) fr[/email]
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34

Back to top
Christophe de VIENNE
Guest





PostPosted: Wed Mar 23, 2005 8:51 am    Post subject: Re: [GCC] macros un peu génantes : est-ce un bug ? Reply with quote

James Kanze wrote:
Quote:
Correction. Je viens de faire l'essai moi-même sous Linux, et il
y a effectivement des macros de ce nom dans
/usr/include/sys/sysmacros.h.

C'est bien là qu'il est défini chez moi.

Quote:
Ce n'est donc pas un ancien
système, mais quelque chose de tout récent.

Mon système est en effet assez à jour.

Quote:
Toujours est-il qu'il s'agit d'un en-tête système (g++ est dans
/opt sur mon système). Ce n'est pas un fichier installé par g++.
Le copyright dit bien lib C du compilateur C de GNU, mais la
version que j'ai fait partie de la distribution Linux, et non
gcc. Je n'exclurais pas que quelqu'un de Linux a fait joujou,
d'autant plus que je ne trouve pas de fichier de ce nom dans la
distribution de g++ 3.4.3, ni dans le répertoire objet où j'ai
généré le compilateur.

Quoi qu'il en soit je trouve cela un peu génant, les mots major et minor
étant des noms de variables potentiels.
Le problème est que je ne sais pas trop à qui remonter ce problème. Au
projet gcc pour que cstdlib nettoie comme il faut ces macros ? ou glibc
? au autre encore ?

A+

Christophe

--
Christophe de Vienne

Back to top
Benoît Bréholée
Guest





PostPosted: Wed Mar 23, 2005 9:29 am    Post subject: Re: [GCC] macros un peu génantes : est-ce un bug ? Reply with quote

Christophe de VIENNE <cdevienne (AT) alphacent (DOT) com> :

Quote:
Le problème est que je ne sais pas trop à qui remonter ce problème. Au
projet gcc pour que cstdlib nettoie comme il faut ces macros ? ou glibc
? au autre encore ?

Plutôt à ta distribution, et ce sont les mainteneurs de ces programmes
qui ensuite transmettront le problème aux développeurs amont s'il y a
lieu.

Back to top
Gabriel Dos Reis
Guest





PostPosted: Wed Mar 23, 2005 11:35 am    Post subject: Re: [GCC] macros un peu génantes : est-ce un bug ? Reply with quote

Christophe de VIENNE <cdevienne (AT) alphacent (DOT) com> writes:

[...]

Quote:
Quoi qu'il en soit je trouve cela un peu génant, les mots major et minor
étant des noms de variables potentiels.

Oui.

Quote:
Le problème est que je ne sais pas trop à qui remonter ce problème. Au
projet gcc pour que cstdlib nettoie comme il faut ces macros ? ou glibc
? au autre encore ?

à ton distributeur de linux -- si tu le rapportes à GCC, il est
probable que les bugmasters s'en foutent parce que ce n'est pas
quelque chose que GCC définit et GCC n'a aucun contrôle dessus.

Je suis moi-même tombé sur un problème similaire (mais avec "likely" et
"unlikely") en essayant de compiler le système Axiom

http://www.axiom-developer.org/

sur mon linux favori. Après quelques heures de frustration, j'ai
découvert que quelques génies de la glibc ont décidé de définir ces
noms en tant que macros (et Axiom aussi !) et avec les bonnes
combinaisons de circonstance, cela donne de jolis puzzles :-(

Vivement #nospam.

-- Gaby

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Wed Mar 23, 2005 12:54 pm    Post subject: Re: macros un peu génantes : est-ce un bug ? Reply with quote

Christophe de VIENNE wrote:
Quote:
James Kanze wrote:
Correction. Je viens de faire l'essai moi-même sous Linux,
et il y a effectivement des macros de ce nom dans

/usr/include/sys/sysmacros.h.

C'est bien là qu'il est défini chez moi.

Ce n'est donc pas un ancien système, mais quelque chose de
tout récent.

Mon système est en effet assez à jour.

Ce n'est pas une question d'être à jour. Ces macros était bien
présents dans des variantes anciennes de Unix -- on pourrait
comprendre qu'un vendeur qui livrait ces variantes quand elles
étaient courantes veut encore supporter le code écrit pour des
systèmes de l'époque (encore que... c'est vraiment ancien).

Linux ne fait pas partie des vendeurs qui livrait de ces
systèmes.

Quote:
Toujours est-il qu'il s'agit d'un en-tête système (g++ est
dans /opt sur mon système). Ce n'est pas un fichier installé
par g++. Le copyright dit bien lib C du compilateur C de
GNU, mais la version que j'ai fait partie de la distribution
Linux, et non gcc. Je n'exclurais pas que quelqu'un de Linux
a fait joujou, d'autant plus que je ne trouve pas de fichier
de ce nom dans la distribution de g++ 3.4.3, ni dans le
répertoire objet où j'ai généré le compilateur.

Quoi qu'il en soit je trouve cela un peu génant, les mots
major et minor étant des noms de variables potentiels.

Tout à fait.

Ils sont présents sous Solaris. Il y a aussi un commentaire qui
dit qu'ils seront enlevés lors de la « next major release »
(mais les copyright dans le fichier sont de AT&T, et s'arrête à
1989, et il y en a eu des releases depuis). Mais ce fichier
n'est inclu par aucun autre -- tu n'as les macros que si toi, tu
l'inclus directement. (Et d'après son contenu, j'ai l'impression
qu'il sert surtout quand tu écris des pilotes de périphérique,
ou de telles choses.)

La question alors est : pourquoi est-ce qu'il est inclu depuis
<cstdlib> ? Il y a une erreur là.

Quote:
Le problème est que je ne sais pas trop à qui remonter ce
problème. Au projet gcc pour que cstdlib nettoie comme il faut
ces macros ? ou glibc ? au autre encore ?

Dans la mésure où le problème est indépendant de gcc, et
touchera tout compilateur C sur le système, dès que le programme
inclu <stdlib.h>, je mettrais d'abord Linux en cause. Après
tout, c'est à eux de fournir les en-têtes corrects.

Ceci dit, je signalerais le problème à gcc aussi, quand même. À
la rigueur, même s'ils ne sont pas à l'origine du problème, il
pourrait vouloir le corriger, ou au moins chercher un
work-around.

D'autant plus qu'il y a des boîtes où on compilent avec des
options -Dmajor=2 -Dminor=3, pour la version no. 2.3.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Back to top
Thomas Labourdette
Guest





PostPosted: Wed Mar 23, 2005 2:36 pm    Post subject: Re: [GCC] macros un peu génantes : est-ce un bug ? Reply with quote

Christophe de VIENNE a écrit le Mercredi 23 Mars 2005 09:51 :

Quote:
James Kanze wrote:
Correction. Je viens de faire l'essai moi-même sous Linux, et il
y a effectivement des macros de ce nom dans
/usr/include/sys/sysmacros.h.

C'est bien là qu'il est défini chez moi.

Chez moi (Debian/Linux) ce fichier est inclus via sys/types.h uniquement si
__USE_BSD est définit.

@+
--
Éve ENGILE (signature aléatoire)
BAC :
- Les 4 points cardinaux sont la droite, la gauche, le bas et le haut.


Back to top
Christophe de VIENNE
Guest





PostPosted: Wed Mar 23, 2005 3:02 pm    Post subject: Re: [GCC] macros un peu génantes : est-ce un bug ? Reply with quote

Thomas Labourdette wrote:
Quote:
Christophe de VIENNE a écrit le Mercredi 23 Mars 2005 09:51 :
James Kanze wrote:
Correction. Je viens de faire l'essai moi-même sous Linux, et il
y a effectivement des macros de ce nom dans
/usr/include/sys/sysmacros.h.

C'est bien là qu'il est défini chez moi.

Chez moi (Debian/Linux) ce fichier est inclus via sys/types.h uniquement si
__USE_BSD est définit.


J'ai la même chose. Par contre je ne sais pas pourquoi ce __USE_BSD est
défini systématiquement.

A+

Christophe

--
Christophe de Vienne

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Thu Mar 24, 2005 8:47 am    Post subject: Re: macros un peu génantes : est-ce un bug ? Reply with quote

Christophe de VIENNE wrote:
Quote:
Thomas Labourdette wrote:
Christophe de VIENNE a écrit le Mercredi 23 Mars 2005 09:51 :
James Kanze wrote:
Correction. Je viens de faire l'essai moi-même sous Linux, et il
y a effectivement des macros de ce nom dans
/usr/include/sys/sysmacros.h.

C'est bien là qu'il est défini chez moi.

Chez moi (Debian/Linux) ce fichier est inclus via
sys/types.h uniquement si __USE_BSD est définit.

J'ai la même chose. Par contre je ne sais pas pourquoi ce
__USE_BSD est défini systématiquement.

Apparamment, parce que je n'ai besoin d'aucun #define ni -D pour
que le problème se présente.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.