Basile, you fully understood what I was asking. And I think I understood that I may have to rethink what I wanted to do since the effort is seemingly out-weighing the benefits. thanks again. jeff
--- On Sat, 8/28/10, Basile Starynkevitch <bas...@starynkevitch.net> wrote: > From: Basile Starynkevitch <bas...@starynkevitch.net> > Subject: Re: Guidance needed: hi-level steps to track an object until its > destruction > To: "Jeff Saremi" <jeffsar...@yahoo.com> > Cc: gcc@gcc.gnu.org > Received: Saturday, August 28, 2010, 1:05 PM > On Thu, 2010-08-26 at 18:16 -0700, > Jeff Saremi wrote: > > I'm hoping someone here could take the time to outline > what I need to do (i'm not looking for code but if you point > me to some i'd appreciate it). > > > > I'd like to track an object from the it's created > until it's destroyed (in C++). And then see if a certain > method of it is called or not. To keep it short we can limit > this to one function at the beginning of which an object > gets created and at the end of it the object goes out of > scope. > > And i'm guessing this can be done via one a pass at > the right time. I guess before gimplification or being > converted to RTL and such. > > > I am not sure that is easily feasible. I would believe it > is impossible. > > Within the compiler (or inside a GCC plugin, or inside a > GCC extension > coded in MELT), you probably are able change/inspect C++ > classes & every > other declaration any compiler is tracking. You are also > able to find > every occurrence of variables containing a pointer to such > classes. > > However, you are apparently willing to track a single > *instance* of such > a class, and this instance is in the execution of the > compiled program > [not inside the compiler]. This means that you are able to > deal with all > the aliasing & pointer equivalence issues (a task known > to be > impossible). How can the compiler surely know that pointer > p in [a > particular instruction of] method YourClass::foo() is never > (or > sometimes, or always) pointing to the same instance -in the > running > process of the compiled program- as pointer q in method > yourclass::bar() > > Or perhaps my English is so weak that I misunderstood you. > If that is > the case, apologies. > > Or maybe you want to instrument your compiler so that for > every code > emitted for method yourclass::gee() you add a first block > which checks > that the this reciever is not a given pointer. > > In other words & C++ parlance, you could (this is > doable, but not > trivial) hack the compiler so that at the start of every > method (i.e. > member function in C++) the equivalent of the following C++ > code has > been magically added > > extern "C" YourClass* hunted_yourclass_pointer; > extern "C" void some_error_routine(void); > > if (this == hunted_yourclass_pointer) > some_error_routine(); > > But I am not sure you want to do that. > > Cheers. > -- > Basile STARYNKEVITCH > http://starynkevitch.net/Basile/ > email: basile<at>starynkevitch<dot>net mobile: > +33 6 8501 2359 > 8, rue de la Faiencerie, 92340 Bourg La Reine, France > *** opinions {are only mine, sont seulement les miennes} > *** > >