On Tue, Jul 29, 2008 at 11:20 AM, Paolo Bonzini <[EMAIL PROTECTED]> wrote: > >>>>> For that matter, "print sizeof(X)" should print the same value when >>>>> debugging optimized code as when debugging unoptimized code, even if the >>>>> compiler has optimized X away to an empty structure! >>>> >>>> I disagree. sizeof(X) in the code will return a value as small as >>>> possible in that case (so that malloc-ing an array of structures) does not >>>> waste memory, and the debugger should do the same. >> >> I don't think that's a viable option. The value of sizeof(X) is a >> compile-time constant, specified by a combination of ISO C and platform ABI >> rules. In C++, sizeof(X) can even be used as a (constant) template >> parameter, way before we get to any optimization. > > Then you are right. This adds another constraint... You can't work around this. 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).
Otherwise, you have to have a flag for the optimization which basically declares it is safe to do it.