OVH Cloud OVH Cloud

Bug GCC 3.3 ?

62 réponses
Avatar
Marc Boyer
Bonjour,

j'ai du mal avec un code C++, et je soupsonne un bug de GCC 3.3.x.
Je n'arrive néanmoins pas à le trouver dans la base de donnée
des bugs (mais j'utilise peut-être pas les bons mots clef).

Voilà, est-ce que le nombre de caractères significatifs pour
une classe pourrait-être tout petit en GCC 3.3 ?

J'ai deux classes template: StateSpace et StateSpaceNode,
et je me demande s'il ne les confond pas parfois.

Si vous en avez connaissance, merci de me le dire avant que je
tente le passage à GCC 3.4 (je suis pas partant, ma tentative
de passage 3.2 à 3.3 a conduit à une réinstallation complète
de la machine: oui, je suis nul en administration Linux).

Merci d'avance,
Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

10 réponses

3 4 5 6 7
Avatar
Laurent Deniau
Gabriel Dos Reis wrote:
Laurent Deniau writes:

| Gabriel Dos Reis wrote:
| > Laurent Deniau writes:
| > | Marc Boyer wrote:
| > | > In article <cnvf5h$74f$, Laurent Deniau wrote:
| > | >
| > | >>Marc Boyer wrote:
| > | >>
| > | >>>In article <cnv6vg$i1i$, Laurent Deniau wrote:
| > | >>>
| > | >>>> Pour un outil standard au C, il vaut mieux s'en tenir a quelque
| > | >>>> chose de simple...
| > | >>>
| > | >>>
| > | >>> Simple oui, mais est-ce qu'un rien de sécurité en plus ne serait pas
| > | >>>utile.
| > | >>> Genre
| > | >>> #definelocal pour définir une macro de portée locale, ou un
| > | >>> #includeonce
| > | >>> qui gère tout seule l'inclusion multiple, etc...
| > | >>
| > | >> Le probleme c'est que le (seul) scope de cpp, c'est la TU. Alors
| > | >> local signifie quoi ici? Les scopes du C?
| > | > Local au fichier par exemple. Ou introduire des portées en cpp.
| > | | TU = translation unit, ce que tu appelles le fichier.
| > | Des portees en cpp? Definies par quoi?
| > Par forcément des portées mais des régions de texte. Voir la
| > proposition « #nospam » de BS.
|
| as-tu un lien? Inutile de dire que Stroustrup+#nospam avec google, ca
| explose ;-) Rien trouve non plus sur sa home page.

http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2004/n1614.pdf

(La prochaine version de cette proposition n'utilisera probablement
pas « scope », puisque cela crée certaines confusions. Moi, j'aime
bien « #nospam » -- comme on peut le voir dans la liste de EWG -- mais
cela semble politiquement pour certains).


Interessant. Cela ouvre des possibilites, surtout pour le C, d'imbriquer
plusieurs niveaux de codes generiques. Ca devrait interesser Marc et ca
BPL ;-)

a+, ld.

Avatar
Laurent Deniau
Gabriel Dos Reis wrote:
Laurent Deniau writes:

| Gabriel Dos Reis wrote:
| > Laurent Deniau writes:
| > | Marc Boyer wrote:
| > | > In article <cnvf5h$74f$, Laurent Deniau wrote:
| > | >
| > | >>Marc Boyer wrote:
| > | >>
| > | >>>In article <cnv6vg$i1i$, Laurent Deniau wrote:
| > | >>>
| > | >>>> Pour un outil standard au C, il vaut mieux s'en tenir a quelque
| > | >>>> chose de simple...
| > | >>>
| > | >>>
| > | >>> Simple oui, mais est-ce qu'un rien de sécurité en plus ne serait pas
| > | >>>utile.
| > | >>> Genre
| > | >>> #definelocal pour définir une macro de portée locale, ou un
| > | >>> #includeonce
| > | >>> qui gère tout seule l'inclusion multiple, etc...
| > | >>
| > | >> Le probleme c'est que le (seul) scope de cpp, c'est la TU. Alors
| > | >> local signifie quoi ici? Les scopes du C?
| > | > Local au fichier par exemple. Ou introduire des portées en cpp.
| > | | TU = translation unit, ce que tu appelles le fichier.
| > | Des portees en cpp? Definies par quoi?
| > Par forcément des portées mais des régions de texte. Voir la
| > proposition « #nospam » de BS.
|
| as-tu un lien? Inutile de dire que Stroustrup+#nospam avec google, ca
| explose ;-) Rien trouve non plus sur sa home page.

http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2004/n1614.pdf

(La prochaine version de cette proposition n'utilisera probablement
pas « scope », puisque cela crée certaines confusions. Moi, j'aime
bien « #nospam » -- comme on peut le voir dans la liste de EWG -- mais
cela semble politiquement pour certains).


En y regardant a deux fois, le fait de bloquer par defaut toutes les
macros du scope englobant peut poser des problemes. Je pense notament a
la redefinition en macro des variables globales comme errno dans le
contexte des threads (je sais que la norme ne parle pas des threads,
mais dans la pratique...). Il faudrait peut-etre avoir qque chose comme
#importstd qui importe automatiquement toutes les macros definies par le
compilateur.

a+, ld.

Avatar
Marc Boyer
Laurent Deniau wrote:
Marc Boyer wrote:
Ca ressemble presque non?


Oui, mais tu te le fais à la main.


#openscope
#closescope

aussi. Les defines, c'est autre chose, ils sont la pour caracteriser
l'interface.

J'ai aussi le même genre de chose dans la BPL:
#include "CleanVectorMacros.h"


Ca ce n'est pas la meme chose. OpenInterface et CloseInterface change en
fonction du contexte, notament OpenInterface #undef OpenInterface et
#define CloseInterface pour verifier la parite. Toi tu charges un
fichier pour faire du nettoyage.


OK, tu as ajouté un niveau de généricité.

Tiens, parlons du pb de perf: j'ai entendu des gens se plaindre
que le mécanisme de protection contre l'inclusion multiple était
couteux parce que cpp doit re-parser chaque fois le fichier
pour constater que le #endif est bien à la fin du fichier.
Avec un #includeonce (ou #import ou autre), on résoud ce
problème.


Et on en creer d'autre. #import (present dans Objective-C) est tres
controverse. Si ces gens voient un probleme de performance, ils peuvent
rajouter des balises autour des includes, comme le preconise Lakos.


Je connais pas de Lakos, même si je connaissais la technique.
J'ai toujours été étonné par cette technique: il me semblerait plus
raisonnable de jouer avec le -I et de faire des trucs du genre
Fichier "UnHeader.h"
#ifndef UNHEADER_ID
#define UNHEADER_ID
#include "reals_include/UnHeader.h"
#endif

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.



Avatar
Marc Boyer
In article <co1raa$ks8$, Laurent Deniau wrote:

Interessant. Cela ouvre des possibilites, surtout pour le C, d'imbriquer
plusieurs niveaux de codes generiques. Ca devrait interesser Marc et ca
BPL ;-)


Je vais regarder le lien (mais surtout attendre de voir ce que deviens
la proposition, puis voir si elle passe en C, et si oui dans quel
état).
On en reparle dans 10 ans sur fclc ;-) ?

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Avatar
Marc Boyer
Gabriel Dos Reis wrote:
Laurent Deniau writes:
|
| TU = translation unit, ce que tu appelles le fichier.
| Des portees en cpp? Definies par quoi?

Par forcément des portées mais des régions de texte. Voir la
proposition « #nospam » de BS.


Je viens de lire le papier, c'est diablement intéressant comme chose.

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

Avatar
Gabriel Dos Reis
Laurent Deniau writes:

| Gabriel Dos Reis wrote:
| > Laurent Deniau writes:
| > | Gabriel Dos Reis wrote:
| > | > Laurent Deniau writes:
| > | > | Marc Boyer wrote:
| > | > | > In article <cnvf5h$74f$, Laurent Deniau wrote:
| > | > | >
| > | > | >>Marc Boyer wrote:
| > | > | >>
| > | > | >>>In article <cnv6vg$i1i$, Laurent Deniau wrote:
| > | > | >>>
| > | > | >>>> Pour un outil standard au C, il vaut mieux s'en tenir a quelque
| > | > | >>>> chose de simple...
| > | > | >>>
| > | > | >>>
| > | > | >>> Simple oui, mais est-ce qu'un rien de sécurité en plus ne serait pas
| > | > | >>>utile.
| > | > | >>> Genre
| > | > | >>> #definelocal pour définir une macro de portée locale, ou un
| > | > | >>> #includeonce
| > | > | >>> qui gère tout seule l'inclusion multiple, etc...
| > | > | >>
| > | > | >> Le probleme c'est que le (seul) scope de cpp, c'est la TU. Alors
| > | > | >> local signifie quoi ici? Les scopes du C?
| > | > | > Local au fichier par exemple. Ou introduire des portées en cpp.
| > | > | | TU = translation unit, ce que tu appelles le fichier.
| > | > | Des portees en cpp? Definies par quoi?
| > | > Par forcément des portées mais des régions de texte. Voir la
| > | > proposition « #nospam » de BS.
| > | | as-tu un lien? Inutile de dire que Stroustrup+#nospam avec
| > google, ca
| > | explose ;-) Rien trouve non plus sur sa home page.
| > http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2004/n1614.pdf
| > (La prochaine version de cette proposition n'utilisera probablement
| > pas « scope », puisque cela crée certaines confusions. Moi, j'aime
| > bien « #nospam » -- comme on peut le voir dans la liste de EWG -- mais
| > cela semble politiquement pour certains).
|
| En y regardant a deux fois, le fait de bloquer par defaut toutes les
| macros du scope englobant peut poser des problemes.

C'est voulu :-)

L'un des buts non avoués est de montrer qu'il est possible de
programmer proprement et élégamment sans les macros. Une fois cette
étape franchie, la question du banissement de Cpp devient une
formalité :-) Mais les changements prennent du temps...

-- Gaby
Avatar
drkm
Gabriel Dos Reis writes:

drkm writes:

| Gabriel Dos Reis writes:

| > http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2004/n1614.pdf

| > (La prochaine version de cette proposition n'utilisera probablement
| > pas « scope », puisque cela crée certaines confusions. Moi, j'aime
| > bien « #nospam » -- comme on peut le voir dans la liste de EWG -- mais
| > cela semble politiquement pour certains).

| Étrange. Je trouve que « scope » est très bien.

Alors c'est que « scope » crée vraiment de la confusion :-)

| De quelles
| confusions parles-tu ? Avec la définition de scope du C++ ?

Regarde la contre-proposotion de Tom Plum dans les pre- et/ou
post-mainling de Redmond.


Il y a n1726 et n1740 dans le mailing post-Redmond. Il n'y emploit
en effet plus « scope », sans toutefois proposer encore de nouveau
nom :

2. The syntax and "begin-end" matching of the "new region" marker
remains the most contentious issue; see below. For purposes of
discussion, let's use an obviously-invalid place-holder :

xxx-begin-macro-region
...
xxx-end-macro-region

Il renseigne également l'adresse du wiki utilisé pour les discussions,
mais ce dernier est soumis à authentification.

Je n'ai rien trouvé non plus à propos du nom « scope » dans n1625
(le premier papier de Tom qui discutait de la proposition de BS).

J'ai sans doute loupé quelque chose, mais je ne vois toujours pas le
problème avec le nom « scope ».

| PS: Cela fait maintenant +/- une semaine que j'ai des difficultés
| avec le site du WG21. En une heure, je n'arrive même pas à rappatrier
| complètement la page référençant les papiers de 2004. D'autres
| ont-ils le même problème ? Y a-t-il un mirroir utilisable (j'ai
| essayé open-std et dkuug) ?

J'ai entendu dire que certains avaient des problèmes à rapatrier ces
papiers -- car l'hébergeant actuel aurait mis certaines limites
relativement basses aux débits. D'après ce que j'ai compris cela
devrait être temporaire...


Le lien qu'a donné Loïc semble fonctionner (merci).

--drkm

Avatar
drkm
Laurent Deniau writes:

drkm wrote:

Laurent Deniau writes:

compound
expressions


Qu'est-ce ?


Dans le context pre-cite je faisais reference aux extensions gcc des
compound expression en coumpound statement qui peuvent inclure des
declarations.


Ok. Lorsque j'ai vu que tu les qualifiais de non-standards, je ne
comprenais pas de quoi du parlais.

#define max(a,b)
({ typeof(a) a_ = (a);
typeof(b) b_ = (b);
a_ > b_ ? a_ : b_; })


À quoi te sert le fait de déclarer des variables intermédiaires ?
Éviter les effets de bord dus à l'évaluation multiple des arguments ?
Et l'extension de GCC à permettre l'utilisation de max() en tant
qu'expression ? Ok, je pense mieux comprendre ...

En C++, l'utilisation d'un modèle de fonction permetterait la même
chose, il me semble.

--drkm



Avatar
Gabriel Dos Reis
Laurent Deniau writes:

| > En C++, l'utilisation d'un modèle de fonction permetterait la même
| > chose, il me semble.
|
| c'est ce que je disais: fonction inline + template font la meme chose
| en mieux, donc peut d'interet en C++. Par contre je ne sais pas
| pourquoi C99 n'a pas retenu ces options, parce que ca serait bien
| utile...

Probablement, parce que c'est C++.

(J'ai entendu une rumeur comme quoi quelqu'un aurait fait une
suggestion pour C99 de template « minimal », mais il aurait été
renvoyé dans les cordes)

-- Gaby
Avatar
Laurent Deniau
Gabriel Dos Reis wrote:
Laurent Deniau writes:

| > En C++, l'utilisation d'un modèle de fonction permetterait la même
| > chose, il me semble.
|
| c'est ce que je disais: fonction inline + template font la meme chose
| en mieux, donc peut d'interet en C++. Par contre je ne sais pas
| pourquoi C99 n'a pas retenu ces options, parce que ca serait bien
| utile...

Probablement, parce que c'est C++.

(J'ai entendu une rumeur comme quoi quelqu'un aurait fait une
suggestion pour C99 de template « minimal », mais il aurait été
renvoyé dans les cordes)


C est vraiment la suite de B ou c'est pour 'C'onservateur ;-)

Encore un coup des faux cons ;-)

a+, ld.

3 4 5 6 7