From: Philip Reames Date: Mon, 24 Nov 2014 23:24:24 +0000 (+0000) Subject: Incorporate review comments from r221742 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=4e89fd0f4b4c24d225b80f93b34d7a665473f2d5;p=oota-llvm.git Incorporate review comments from r221742 This change implements the comment and style changes Sean requested during post commit review with r221742. Sorry for the delay. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222707 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/IR/Function.cpp b/lib/IR/Function.cpp index 7ed90996f69..fbf94b364af 100644 --- a/lib/IR/Function.cpp +++ b/lib/IR/Function.cpp @@ -456,7 +456,15 @@ unsigned Function::lookupIntrinsicID() const { } /// Returns a stable mangling for the type specified for use in the name -/// mangling scheme used by 'any' types in intrinsic signatures. +/// mangling scheme used by 'any' types in intrinsic signatures. The mangling +/// of named types is simply their name. Manglings for unnamed types consist +/// of a prefix ('p' for pointers, 'a' for arrays, 'f_' for functions) +/// combined with the mangling of their component types. A vararg function +/// type will have a suffix of 'vararg'. Since function types can contain +/// other function types, we close a function type mangling with suffix 'f' +/// which can't be confused with it's prefix. This ensures we don't have +/// collisions between two unrelated function types. Otherwise, you might +/// parse ffXX as f(fXX) or f(fX)X. (X is a placeholder for any other type.) static std::string getMangledTypeStr(Type* Ty) { std::string Result; if (PointerType* PTyp = dyn_cast(Ty)) { @@ -476,7 +484,8 @@ static std::string getMangledTypeStr(Type* Ty) { Result += getMangledTypeStr(FT->getParamType(i)); if (FT->isVarArg()) Result += "vararg"; - Result += "f"; //ensure distinguishable + // Ensure nested function types are distinguishable. + Result += "f"; } else if (Ty) Result += EVT::getEVT(Ty).getEVTString(); return Result;