diff options
| author | Vexu <git@vexu.eu> | 2020-04-17 22:02:49 +0300 |
|---|---|---|
| committer | Vexu <git@vexu.eu> | 2020-04-17 22:02:49 +0300 |
| commit | 1afaf42525760edb78c287c216fda4aafc03d68f (patch) | |
| tree | 1069633e296b5f0e82161cd2458616dd43fac817 /src/analyze.cpp | |
| parent | c026a9f6d254cb4b6cf5d75105f17e3c912e32c2 (diff) | |
| download | zig-1afaf42525760edb78c287c216fda4aafc03d68f.tar.gz zig-1afaf42525760edb78c287c216fda4aafc03d68f.zip | |
add error for non-exter variadic functions
Diffstat (limited to 'src/analyze.cpp')
| -rw-r--r-- | src/analyze.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp index d7064ed597..f3f2a30dd8 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -3619,12 +3619,18 @@ static void add_top_level_decl(CodeGen *g, ScopeDecls *decls_scope, Tld *tld) { assert(tld->source_node->type == NodeTypeFnProto); is_export = tld->source_node->data.fn_proto.is_export; - if (!is_export && !tld->source_node->data.fn_proto.is_extern && + if (!tld->source_node->data.fn_proto.is_extern && tld->source_node->data.fn_proto.fn_def_node == nullptr) { add_node_error(g, tld->source_node, buf_sprintf("non-extern function has no body")); return; } + if (!tld->source_node->data.fn_proto.is_extern && + tld->source_node->data.fn_proto.is_var_args) + { + add_node_error(g, tld->source_node, buf_sprintf("non-extern function is variadic")); + return; + } } else if (tld->id == TldIdUsingNamespace) { g->resolve_queue.append(tld); } |
