[cfe-dev] Ordering issue in Sema::ActOnStartOfFunctionDef
Christopher Lamb
christopher.lamb at gmail.com
Fri Dec 21 10:02:04 PST 2007
I think I can explain what's causing the behavior in this FIXME from
Sema::GetTypeForDeclarator() in case DeclaratorChunk::Function and
what I'd like to do about it.
// FIXME: We still apparently need the conversion in
// Sema::ParseParamDeclarator(). This doesn't make any
sense, since
// it should be driving off the type being created here.
In Sema::ActOnStartOfFunctionDef
ActOnDeclarator() creates the FunctionType, with its (apparently
immutable) argument type VLA. The FunctionType's argument type array
is based on DeclaratorChunk::FunctionTypeInfo with the default
conversions applied in GetTypeForDeclarator(), however the converted
types are never propagated back into the FunctionTypeInfo. It is
exactly these types in the FunctionTypeInfo, and not the
FunctionType's argument type array, which ActOnParamDeclarator() uses
to generate the types for it's ParmVarDecls.
The duplicated default conversions _could_ be eliminated by having
Sema::GetTypeForDeclarator() update the FunctionTypeInfo, or by
passing the FunctionType (or FunctionDecl) into ActOnParamDeclarator
(). However, this is bad because it means that ActOnParamDeclarator()
may not mutate the argument types in any way, which breaks address
spaces at the least.
My proposal is for ActOnDeclarator() for the FunctionDecl to be moved
after the loop over the parameter decls, which would allow
ActOnParamDeclarator() to modify types (default conversions, address
spaces, etc.) and update the FunctionTypeInfo object to by captured
subsequently in the FunctionType.
Whew!
--
Christopher Lamb
More information about the cfe-dev
mailing list