changeset 1419:a6dfd3cb5b99 0.9.1

Error instead of assert on delegate literals as constant expressions. Make function literal linkage internal inside functions and external otherwise.
author Christian Kamm <kamm incasoftware de>
date Wed, 27 May 2009 19:20:18 +0200
parents f5f8c21ce6ef
children 3a31fc913db7 7a693c367190
files gen/toir.cpp gen/tollvm.cpp
diffstat 2 files changed, 5 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/gen/toir.cpp	Mon May 25 12:50:40 2009 +0200
+++ b/gen/toir.cpp	Wed May 27 19:20:18 2009 +0200
@@ -2297,7 +2297,11 @@
     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);
--- a/gen/tollvm.cpp	Mon May 25 12:50:40 2009 +0200
+++ b/gen/tollvm.cpp	Wed May 27 19:20:18 2009 +0200
@@ -265,9 +265,6 @@
         // 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())