rootcint problems with 2.00.09 on Linux/egcs

stefan kluth (skluth@mh1.lbl.gov)
Wed, 1 Jul 1998 13:27:02 -0700 (PDT)


Hi,

after installing 2.00.09 for Linux/egcs I find that rootcint generates
code which does not compile. I created two dictionary code files, one with
2.00.08 and one with 2.00.09 and diff'ed it. The differences coincide with
the lines where the compiler flags errors. Here is an example:

dictionary code file made with rootcint 2.00.08 (compiles and works):

...

static int G__AllJets_AllJets_2_0(G__value *result7,char *funcname,struct
G__param *libp,int hash) {
AllJets *p=NULL;
switch(libp->paran) {
case 3:
p = new AllJets(
*(HepConstAList<HepLorentzVector>*)libp->para[0].ref,*(AllJets::Algorithm*)
libp->para[1].ref,*(int*)libp->para[2].ref);

...

dictionary code file made with rootcint 2.00.09:

...

static int G__AllJets_AllJets_2_0(G__value *result7,char *funcname,struct
G__param *libp,int hash) {
AllJets *p=NULL;
switch(libp->paran) {
case 3:
p = new AllJets(
*(HepConstAList<HepLorentzVector>*)libp->para[0].ref,
libp->para[1].ref?*(AllJets::Algorithm*)libp->para[1].ref:G__Mint(libp->para[1])
,libp->para[2].ref?*(int*)libp->para[2].ref:G__Mint(libp->para[2]));

...

The egcs g++ compiler says:
AllJetsCint.cc: In function `int G__AllJets_AllJets_2_0(struct G__value *,
char *, struct G__param *, int)':
AllJetsCint.cc:371: no matching function for call to `AllJets::AllJets
(HepConstAList<HepLorentzVector> &, int, int &)'

The difference between rootcint for 2.00.08 and 2.00.09 seems to be that
rootcint inserts logical expressions " ... ? ... : ... " instead of just
casting and dereferencing pointers. This leads to the wrong argument types
for the call of the constructor.

Since this breaks my application I can't use 2.00.09 for the moment.

cheers, Stefan

---Stefan Kluth---------------Lynen Fellow----------------|\--|\-------
- LBNL, MS 50A 2160 - phone: +1 510 495 2376 - |/ |/ -
- 1 Cyclotron Rd. - fax: +1 510 495 2957 - |\/\|\/\|' -
---Berkeley, CA94720, USA-----e-mail: SKluth@lbl.gov------|/\/|/\/|----