http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52337
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-02-22
09:35:44 UTC ---
(do you have something against whitespace?!)
could you explain exactly what you think GCC does wrong, and what you expect to
happen?
I'm afraid I don't understand your report.
Here's the same code, once more with formatting:
typedef char**(*(*v[4])(int*p[],float (*f)(int a[])))[][6];
class e{ v i,a,b;
public:
int get();
friend int g();
} ai;
int e::get() {
long h1,h2,h3;
h1=(long)&i;
h2=(long)&a;
h3=(long)&b;
__builtin_printf("%p\n%p %lx\n%p %lx\noriginal pointer is:
%p\n",i,a,h2-h1,b,h3-h2, &i);
return 0;
}
int g(){ return ai.get(); }
class pgabstract{
v i,a,b;
public:
int get() {return vget();}
int(*p)();
virtual void t()=0;
int vget();
} *m[4];
int pgabstract::vget()
{
long h1,h2,h3;
h1=(long)&i;
h2=(long)&a;
h3=(long)&b;
__builtin_printf("%p\n%p %lx\n%p %lx\noriginal pointer is:
%p\n",i,a,h2-h1,b,h3-h2, &i);
return 0;
}
int main(){
m[3]=(pgabstract*)&ai;
m[3]->get();
}
When I run this I get:
0x600b48
0x600b68 20
0x600b88 20
original pointer is: 0x600b48