lto gimple types and debug info

Mark Mitchell mark@codesourcery.com
Wed Jul 30 01:00:00 GMT 2008


Daniel Berlin wrote:

> If you built an AST that included sizeof before doing template
> instantiation (which may not even be possible), you could at least
> determine whether sizeof was used on a given type other than in a
> malloc/new call (which we replace anyway).

Even if you did, I am allowed to know the ABI.

I can know that struct S has size 12 on this ABI, and do things like:

   struct S a[3];
   struct S* p = &a[0];
   /* This points at a[1].  */
   struct S* q = ((char *)p) + 12;

You cannot shrink S in that situation.  In C, you also have to handle 
the "common prefix" problem, where the members of S are the first few 
members of a larger structure T.  I'm then allowed to cast between an S* 
and a T*, and if you shrink S, things will break.

So, these kinds of optimizations, where you rip fields out of a 
structure are only safe if you can prove that addresses don't escape -- 
or if the user explicitly tells you that they are.

-- 
Mark Mitchell
CodeSourcery
mark@codesourcery.com
(650) 331-3385 x713



More information about the Gcc mailing list