From 7fd43e8bf7f4f700ee6e389e064685f8d5c677a9 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 27 May 2009 19:20:18 +0200 Subject: [PATCH] Error instead of assert on delegate literals as constant expressions. Make function literal linkage internal inside functions and external otherwise. --- gen/toir.cpp | 6 +++++- gen/tollvm.cpp | 3 --- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/gen/toir.cpp b/gen/toir.cpp index 0ca1d743..06cdb226 100644 --- a/gen/toir.cpp +++ b/gen/toir.cpp @@ -2297,7 +2297,11 @@ LLConstant* FuncExp::toConstElem(IRState* p) LOG_SCOPE; assert(fd); - assert(fd->tok == TOKfunction); + if (fd->tok != TOKfunction) + { + assert(fd->tok == TOKdelegate); + error("delegate literals as constant expressions are not yet allowed"); + } fd->codegen(Type::sir); assert(fd->ir.irFunc->func); diff --git a/gen/tollvm.cpp b/gen/tollvm.cpp index f459a5d7..687c86b0 100644 --- a/gen/tollvm.cpp +++ b/gen/tollvm.cpp @@ -265,9 +265,6 @@ LLGlobalValue::LinkageTypes DtoLinkage(Dsymbol* sym) // extern(C) functions are always external else if (ft->linkage == LINKc) return llvm::GlobalValue::ExternalLinkage; - // Function & delegate literals, foreach bodies and lazy parameters: internal linkage - else if (fdecl->isFuncLiteralDeclaration()) - return llvm::GlobalValue::InternalLinkage; } // class else if (ClassDeclaration* cd = sym->isClassDeclaration())