Re: Recent changes in rootcint.cxx

From: Federico Carminati <Federico.Carminati_at_cern.ch>
Date: Thu, 1 Feb 2007 10:01:29 +0100


Hello,

     apparently rootcint now generates code that requires copy constructors. As long as they are all "synthesised" things are ok, but if you defined one of them as protected or private, then the code fails. The solution is to remove all copy constructors, or define and implement all the needed ones. A pain in the lower-rear. Best,

Federico Carminati
CERN-PH
1211 Geneva 23
Switzerland
Tel: +41 22 76 74959
Fax: +41 22 76 79480
Mobile: +41 76 487 4843

On 1 Feb 2007, at 09:57, Fons Rademakers wrote:

> Hi Philippe,
>
> the same problem is observed by ALICE where AliRoot also does not
> compile anymore due to the same kind of errors.
>
> Cheers, Fons.
>
>
> Constantin Loizides wrote:
>> Hi Phillippe,
>> I made an example for you based on a stripped down version of
>> the class I reported the problem with and using the $ROOTSYS/test
>> environment.
>> Constantin
>> Philippe Canal wrote:
>>> Hi Constantin,
>>>
>>> Can you please send a succint example reproducing the problem?
>>>
>>> Thanks,
>>> Philippe.
>>>
>>> -----Original Message-----
>>> From: owner-roottalk_at_pcroot.cern.ch [mailto:owner-
>>> roottalk_at_pcroot.cern.ch]
>>> On Behalf Of Constantin Loizides
>>> Sent: Wednesday, January 31, 2007 12:36 PM
>>> To: ROOT TALK
>>> Subject: [ROOT] Recent changes in rootcint.cxx
>>>
>>> HI,
>>>
>>> recently none of my projects compiles anymore with ROOT head,
>>> nothing was
>>> changed
>>> than updating ROOT to the latest cvs (as of now).
>>>
>>> The compilation fails in the rootcint generated code segments,
>>> like in
>>>
>>> >g++ -g -I. --ansi -Wall -Wno-long-long -Wno-strict-aliasing -
>>> Df2cFortran
>>> -D_GNU_SOURCE -Iinclude >-I/opt/root/root_head/include -
>>> DHAVE_CERNLIBS -o
>>> genherwig/bld/G__genherwig.o -c genherwig/G__genherwig.cxx
>>> >./genherwig/THIHerwigBase.h:27: error: 'template<class T> struct
>>> THIHerwigBase::IE_t' is protected
>>> >genherwig/G__genherwig.h:55: error: within this context
>>>
>>> where
>>>
>>> class THIHerwigBase : public THIGenerator {
>>> protected:
>>>
>>> template<typename T = Int_t>
>>> struct IE_t { /*IndexElement*/
>>> public:
>>> UInt_t fIndex; //index in common block
>>> T fVal; //corresponding value
>>> IE_t(UInt_t i=0, T v=0) : fIndex(i),fVal(v) {}
>>> virtual ~IE_t() {}
>>> ClassDefT(IE_t,1) // Generic parameter given by an index
>>> (in common
>>> block)
>>> };
>>> // and so on
>>> }
>>>
>>> After a bit of research I figured out that in
>>> http://root.cern.ch/viewcvs/utils/src/rootcint.cxx.diff?
>>> r1=1.251&r2=1.252&so
>>> rtby=date
>>> a change was performed to not brutally overwrite protect and
>>> private with
>>> public,
>>> but rather to keep the access pattern assigned by the programmer.
>>> This of
>>> course
>>> is great, but seems not work:
>>>
>>> The login message says:
>>> "Remove the #define private public since it is no longer used (we
>>> really on the Shadow classes to replace this technique)."
>>>
>>> What are those Shadow classes? Am I supposed to write some code
>>> to support the new feature?
>>>
>>> Please let me know asap, since lots of code fails to compile and
>>> I need
>>> to understand the change in HEAD before I can adapt our projects.
>>>
>>> Thanks,
>>> Constantin
>>>
>
> --
> Org: CERN, European Laboratory for Particle Physics.
> Mail: 1211 Geneve 23, Switzerland
> E-Mail: Fons.Rademakers_at_cern.ch Phone: +41 22 7679248
> WWW: http://fons.rademakers.org Fax: +41 22 7669640
Received on Thu Feb 01 2007 - 10:01:46 CET

This archive was generated by hypermail 2.2.0 : Thu Feb 01 2007 - 23:50:01 CET