aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.cpp
diff options
context:
space:
mode:
authorVexu <git@vexu.eu>2020-04-17 22:02:49 +0300
committerVexu <git@vexu.eu>2020-04-17 22:02:49 +0300
commit1afaf42525760edb78c287c216fda4aafc03d68f (patch)
tree1069633e296b5f0e82161cd2458616dd43fac817 /src/analyze.cpp
parentc026a9f6d254cb4b6cf5d75105f17e3c912e32c2 (diff)
downloadzig-1afaf42525760edb78c287c216fda4aafc03d68f.tar.gz
zig-1afaf42525760edb78c287c216fda4aafc03d68f.zip
add error for non-exter variadic functions
Diffstat (limited to 'src/analyze.cpp')
-rw-r--r--src/analyze.cpp8
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);
}