Commit 3b535d2c3a

Andrew Kelley <superjoe30@gmail.com>
2016-04-07 23:23:06
fix evaluating generic function instance in wrong context
See #22
1 parent ee22e87
Changed files (2)
src/analyze.cpp
@@ -4674,7 +4674,7 @@ static TypeTableEntry *analyze_generic_fn_call(CodeGen *g, ImportTableEntry *imp
         }
         AstNode **param_node = &node->data.fn_call_expr.params.at(i);
 
-        TypeTableEntry *param_type = analyze_expression(g, import, child_context, expected_param_type,
+        TypeTableEntry *param_type = analyze_expression(g, import, parent_context, expected_param_type,
                 *param_node);
         if (param_type->id == TypeTableEntryIdInvalid) {
             return param_type;
test/run_tests.cpp
@@ -1781,6 +1781,13 @@ b";
 fn foo() {}
 const invalid = foo > foo;
     )SOURCE", 1, ".tmp_source.zig:3:21: error: operator not allowed for type 'fn()'");
+
+    add_compile_fail_case("generic function instance with non-constant expression", R"SOURCE(
+fn foo(x: i32)(y: i32) -> i32 { return x + y; }
+fn test1(a: i32, b: i32) -> i32 {
+    return foo(a)(b);
+}
+    )SOURCE", 1, ".tmp_source.zig:4:16: error: unable to resolve constant expression");
 }
 
 //////////////////////////////////////////////////////////////////////////////