Commit 79adf55699

Andrew Kelley <superjoe30@gmail.com>
2016-02-02 23:58:13
fx segfault with colliding bogus top level functions
1 parent 7af59c7
Changed files (2)
src/analyze.cpp
@@ -5038,7 +5038,12 @@ static void detect_top_level_decl_deps(CodeGen *g, ImportTableEntry *import, Ast
                 decl_node->name = name;
                 decl_node->import = import;
                 if (decl_node->deps.size() > 0) {
-                    g->unresolved_top_level_decls.put(name, node);
+                    if (g->unresolved_top_level_decls.maybe_get(name)) {
+                        node->data.fn_proto.skip = true;
+                        add_node_error(g, node, buf_sprintf("redefinition of '%s'", buf_ptr(name)));
+                    } else {
+                        g->unresolved_top_level_decls.put(name, node);
+                    }
                 } else {
                     resolve_top_level_decl(g, import, node);
                 }
test/run_tests.cpp
@@ -1964,6 +1964,14 @@ export fn c(x: i32) -> i32 {x + 2}
 const x : f64 = 1.0;
 const y : f32 = x;
     )SOURCE", 1, ".tmp_source.zig:3:17: error: expected type 'f32', got 'f64'");
+
+
+    add_compile_fail_case("colliding invalid top level functions", R"SOURCE(
+fn func() -> bogus {}
+fn func() -> bogus {}
+    )SOURCE", 2,
+            ".tmp_source.zig:3:1: error: redefinition of 'func'",
+            ".tmp_source.zig:2:14: error: use of undeclared identifier 'bogus'");
 }
 
 //////////////////////////////////////////////////////////////////////////////