Parsing types from in-memory strings
The goal was to parse a type from an llvm specified type string, e.g.,
i8*
into Type::getInt8PtrTy
. The solution is to use
llvm::parseType(tystr, smd, M)
where tystr
is something that is
like a const char *
. It will contain the type description string.
smd
is an instance of SMDiagnostic
and M
is the Module
which
owns context in which the type will be defined. E.g.,:
Type* makeType(const char* tystr, Module& M) {
SMDiagnostic smd;
return llvm::parseType(rettype, smd, M);
}
// makeType("i8*", M) will return the same thing as Type::getInt8PtrTy(M.getContext());
Original Question posted to newsgroup
For various reasons I want to be able to use the LLParser
machinery to create Type
objects. So, I need to create an LLParser which will parse a string, instead of a reading it from a file. If I was doing this in clang, then I think I would need to use an instance of InMemoryFileSystem
which inherits from FileSystem
. However, I want to do this in an llvm pass. Any suggestions?