On Jan 17, 2008, at 3:11 AM, Eli Friedman wrote: > Currently, there are multiple places that need the values for > sizeof/alignof/offsetof (at least two places in isIntegerConstantExpr > and the visitor methods in CGExprScalar.cpp). However, there is no > common method to compute the needed information. There really should > be common methods (probably in ASTContext?) to get the result of > evaluating these expressions, because the logic isn't trivial. > > Sound reasonable? > > The reason I came upon this is that sizeof(void) currently crashes, > and there are currently three places that have to be changed to get it > right.
Sounds good to me. > Implementation notes: > The two versions in isIntegerConstantExpr for sizeof/alignof (which > appear to be the same) look mostly correct, although they don't handle > sizeof(void) correctly... the version in CGExprScalar.cpp also > mishandles "sizeof(void ())" (and a theoretical arch where CHAR_BIT != > 8...). Also, ASTContext::getTypeInfo currently mishandles references > in order to get the sizeof case correct, so once an alternative > exists, that should be fixed. The only big gotcha will be sizeof(VLA), which doesn't return a constant. I don't think there is a good way to represent this without knowing the client. The code generator (f.e.) needs to expand this out to LLVM IR instructions. -Chris _______________________________________________ cfe-dev mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
