[llvm] r222707 - Incorporate review comments from r221742
Philip Reames
listmail at philipreames.com
Mon Nov 24 15:24:24 PST 2014
Author: reames
Date: Mon Nov 24 17:24:24 2014
New Revision: 222707
URL: http://llvm.org/viewvc/llvm-project?rev=222707&view=rev
Log:
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.
Modified:
llvm/trunk/lib/IR/Function.cpp
Modified: llvm/trunk/lib/IR/Function.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Function.cpp?rev=222707&r1=222706&r2=222707&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Function.cpp (original)
+++ llvm/trunk/lib/IR/Function.cpp Mon Nov 24 17:24:24 2014
@@ -456,7 +456,15 @@ unsigned Function::lookupIntrinsicID() c
}
/// 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<PointerType>(Ty)) {
@@ -476,7 +484,8 @@ static std::string getMangledTypeStr(Typ
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;
More information about the llvm-commits
mailing list