aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-04-07 14:23:06 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-04-07 14:23:06 -0700
commit3b535d2c3af5259a71916681d87ab0c01f24b58d (patch)
tree61816becd81c72f3a8af790798c0f42bf443b5d9
parentee22e872967947d2f6e64cba888bf7bf56e4d332 (diff)
downloadzig-3b535d2c3af5259a71916681d87ab0c01f24b58d.tar.gz
zig-3b535d2c3af5259a71916681d87ab0c01f24b58d.zip
fix evaluating generic function instance in wrong context
See #22
-rw-r--r--src/analyze.cpp2
-rw-r--r--test/run_tests.cpp7
2 files changed, 8 insertions, 1 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index 75002ebb66..b1ffa8b969 100644
--- a/src/analyze.cpp
+++ b/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;
diff --git a/test/run_tests.cpp b/test/run_tests.cpp
index fb232aed70..0ff7385d94 100644
--- a/test/run_tests.cpp
+++ b/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");
}
//////////////////////////////////////////////////////////////////////////////