Revision: 126379 Author: clattner Date: 2007-04-21 22:52:13 -0700 (Sat, 21 Apr 2007)
Log Message: ----------- apply reid's patch for PR1146 Modified Paths: -------------- apple-local/branches/llvm/gcc/llvm-types.cpp Modified: apple-local/branches/llvm/gcc/llvm-types.cpp =================================================================== --- apple-local/branches/llvm/gcc/llvm-types.cpp 2007-04-21 06:48:37 UTC (rev 126378) +++ apple-local/branches/llvm/gcc/llvm-types.cpp 2007-04-22 05:52:13 UTC (rev 126379) @@ -751,15 +751,17 @@ for (; Args && TREE_TYPE(Args) != void_type_node; Args = TREE_CHAIN(Args)) ABIConverter.HandleArgument(TREE_TYPE(Args)); - ParamAttrsList *ParamAttrs = 0; + ParamAttrsList *PAL = 0; if (static_chain) { // Pass the static chain in a register. - ParamAttrs = new ParamAttrsList(); - ParamAttrs->addAttributes(1, ParamAttr::InReg); + ParamAttrsVector Attrs; + ParamAttrsWithIndex PAWI; PAWI.index = 1; PAWI.attrs = ParamAttr::InReg; + Attrs.push_back(PAWI); + PAL = ParamAttrsList::get(Attrs); } - return FunctionType::get(RetTy, ArgTys, false, ParamAttrs); + return FunctionType::get(RetTy, ArgTys, false, PAL); } const FunctionType *TypeConverter::ConvertFunctionType(tree type, @@ -811,7 +813,7 @@ // the parameter attribute in the FunctionType so any arguments passed to // the function will be correctly sign or zero extended to 32-bits by // the LLVM code gen. - ParamAttrsList Attrs; + ParamAttrsVector Attrs; uint16_t RAttributes = ParamAttr::None; if (CallingConv == CallingConv::C) { tree ResultTy = TREE_TYPE(type); @@ -827,8 +829,10 @@ RAttributes |= ParamAttr::SExt; } } - if (RAttributes != ParamAttr::None) - Attrs.addAttributes(0, RAttributes); + if (RAttributes != ParamAttr::None) { + ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = RAttributes; + Attrs.push_back(PAWI); + } unsigned Idx = 1; bool isFirstArg = true; @@ -838,16 +842,21 @@ LLVM_TARGET_INIT_REGPARM(lparam, type); #endif // LLVM_TARGET_ENABLE_REGPARM - if (static_chain) + if (static_chain) { // Pass the static chain in a register. - Attrs.addAttributes(Idx++, ParamAttr::InReg); + ParamAttrsWithIndex PAWI; PAWI.index = Idx++; PAWI.attrs = ParamAttr::InReg; + Attrs.push_back(PAWI); + } // The struct return attribute must be associated with the first // parameter but that parameter may have other attributes too so we set up // the first Attributes value here based on struct return. This only works // Handle the structure return calling convention - if (ABIConverter.isStructReturn()) - Attrs.addAttributes(Idx++, ParamAttr::StructRet); + if (ABIConverter.isStructReturn()) { + ParamAttrsWithIndex PAWI; + PAWI.index = Idx++; PAWI.attrs = ParamAttr::StructRet; + Attrs.push_back(PAWI); + } for (tree Args = TYPE_ARG_TYPES(type); Args && TREE_VALUE(Args) != void_type_node; Args = TREE_CHAIN(Args)) { @@ -873,18 +882,20 @@ isVarArg, lparam); #endif // LLVM_TARGET_ENABLE_REGPARM - if (Attributes != ParamAttr::None) - Attrs.addAttributes(Idx, Attributes); + if (Attributes != ParamAttr::None) { + ParamAttrsWithIndex PAWI; PAWI.index = Idx; PAWI.attrs = Attributes; + Attrs.push_back(PAWI); + } Idx++; } // Only instantiate the parameter attributes if we got some - ParamAttrsList *ParamAttrs = 0; + ParamAttrsList *PAL = 0; if (!Attrs.empty()) - ParamAttrs = new ParamAttrsList(Attrs); + PAL = ParamAttrsList::get(Attrs); // Finally, make the function type - return FunctionType::get(RetTy, ArgTypes, isVarArg, ParamAttrs); + return FunctionType::get(RetTy, ArgTypes, isVarArg, PAL); } //===----------------------------------------------------------------------===// _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits