| author | |
| committer | |
| log | 901b5c1566a497822b98ba9327578839bac3df50 |
| tree | a086b61f7e6d4ee6b252c9c1ca037b48d77edee8 |
| parent | 09cc1dc66067f378a1508e34c0714b659b445724 |
| signature |
closes #12312 files changed, 17 insertions(+), 0 deletions(-)
src/analyze.cpp+7| ... | ... | @@ -3242,6 +3242,13 @@ static void add_top_level_decl(CodeGen *g, ScopeDecls *decls_scope, Tld *tld) { |
| 3242 | 3242 | } else if (tld->id == TldIdFn) { |
| 3243 | 3243 | assert(tld->source_node->type == NodeTypeFnProto); |
| 3244 | 3244 | is_export = tld->source_node->data.fn_proto.is_export; |
| 3245 | ||
| 3246 | if (!is_export && !tld->source_node->data.fn_proto.is_extern && | |
| 3247 | tld->source_node->data.fn_proto.fn_def_node == nullptr) | |
| 3248 | { | |
| 3249 | add_node_error(g, tld->source_node, buf_sprintf("non-extern function has no body")); | |
| 3250 | return; | |
| 3251 | } | |
| 3245 | 3252 | } |
| 3246 | 3253 | if (is_export) { |
| 3247 | 3254 | g->resolve_queue.append(tld); |
test/compile_errors.zig+10| ... | ... | @@ -1,6 +1,16 @@ |
| 1 | 1 | const tests = @import("tests.zig"); |
| 2 | 2 | |
| 3 | 3 | pub fn addCases(cases: *tests.CompileErrorContext) void { |
| 4 | cases.add( | |
| 5 | "function protoype with no body", | |
| 6 | \\fn foo() void; | |
| 7 | \\export fn entry() void { | |
| 8 | \\ foo(); | |
| 9 | \\} | |
| 10 | , | |
| 11 | ".tmp_source.zig:1:1: error: non-extern function has no body", | |
| 12 | ); | |
| 13 | ||
| 4 | 14 | cases.add( |
| 5 | 15 | "@typeInfo causing depend on itself compile error", |
| 6 | 16 | \\const start = struct { |