Add Symbol::exportedFunction member to hold llvm::Function * for app-callable version of function.

This commit is contained in:
Matt Pharr
2011-10-04 15:46:17 -07:00
parent 9b7f55a28e
commit 686d9975b6
3 changed files with 10 additions and 2 deletions

View File

@@ -497,7 +497,6 @@ Module::AddGlobal(DeclSpecs *ds, Declarator *decl) {
}
LLVM_TYPE_CONST llvm::Type *llvmType = decl->sym->type->LLVMType(g->ctx);
llvm::GlobalValue::LinkageTypes linkage =
(ds->storageClass == SC_STATIC) ? llvm::GlobalValue::InternalLinkage :
llvm::GlobalValue::ExternalLinkage;
@@ -551,6 +550,9 @@ Module::AddGlobal(DeclSpecs *ds, Declarator *decl) {
}
bool isConst = (ds->typeQualifier & TYPEQUAL_CONST) != 0;
llvm::GlobalValue::LinkageTypes linkage =
(ds->storageClass == SC_STATIC) ? llvm::GlobalValue::InternalLinkage :
llvm::GlobalValue::ExternalLinkage;
decl->sym->storagePtr = new llvm::GlobalVariable(*module, llvmType, isConst,
linkage, llvmInitializer,
decl->sym->name.c_str());
@@ -843,6 +845,7 @@ Module::AddFunction(DeclSpecs *ds, Declarator *decl, Stmt *code) {
firstStmtPos);
lEmitFunctionCode(&ec, appFunction, functionType, funSym, decl, code);
if (errorCount == 0) {
funSym->exportedFunction = appFunction;
if (llvm::verifyFunction(*appFunction,
llvm::ReturnStatusAction) == true) {
if (g->debugPrint) {

View File

@@ -47,7 +47,7 @@ Symbol::Symbol(const std::string &n, SourcePos p, const Type *t,
StorageClass sc)
: pos(p), name(n) {
storagePtr = NULL;
function = NULL;
function = exportedFunction = NULL;
type = t;
constValue = NULL;
storageClass = sc;

5
sym.h
View File

@@ -83,6 +83,11 @@ public:
llvm::Function *function; /*!< For symbols that represent functions,
this stores the LLVM Function value for
the symbol once it has been created. */
llvm::Function *exportedFunction;
/*!< For symbols that represent functions with
'export' qualifiers, this points to the LLVM
Function for the application-callable version
of the function. */
const Type *type; /*!< The type of the symbol; if not set by the
constructor, this is set after the
declaration around the symbol has been parsed. */