Remove 'noalias' and 'nocapture' from %.nest_arg. They no longer apply now that

it may point to a struct containing variables from outer functions.
This commit is contained in:
Frits van Bommel
2009-04-15 20:59:21 +02:00
parent c19ab2e539
commit 8c3cc1467f
2 changed files with 2 additions and 11 deletions

View File

@@ -89,7 +89,7 @@ const llvm::FunctionType* DtoFunctionType(Type* type, Type* thistype, Type* nest
// and nested functions
else if (nesttype)
{
f->fty.arg_nest = new IrFuncTyArg(nesttype, false, NoAlias | NoCapture);
f->fty.arg_nest = new IrFuncTyArg(nesttype, false);
lidx++;
}

View File

@@ -358,16 +358,7 @@ DValue* DtoCallFunction(Loc& loc, Type* resulttype, DValue* fnval, Expressions*
{
Attr.Index = retinptr ? 2 : 1;
Attr.Attrs = tf->fty.arg_nest->attrs;
// For delegates, we can't assume 'nest' is noalias and nocapture
// (like we can with nested functions) since it might actually be
// a 'this', and thus neither attribute generally applies to it.
// TODO: don't remove nocapture if it's a "pure" delegate?
if (delegatecall) {
Attr.Attrs &= ~(llvm::Attribute::NoAlias | llvm::Attribute::NoCapture);
}
// LLVM doesn't like it when no bits are set...
if (Attr.Attrs)
attrs.push_back(Attr);
attrs.push_back(Attr);
}
}