fix not propagating parseh aliases through pub use decls
This commit is contained in:
parent
8e19bdfc79
commit
d9dd50d74c
@ -2922,13 +2922,17 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *
|
||||
continue;
|
||||
}
|
||||
|
||||
auto existing_entry = dst_use_node->owner->decls_scope->decl_table.put_unique(target_tld->name, target_tld);
|
||||
// Note: target_tld->name is not necessarily equal to entry->key because
|
||||
// of aliases that parseh uses.
|
||||
Buf *target_tld_name = entry->key;
|
||||
|
||||
auto existing_entry = dst_use_node->owner->decls_scope->decl_table.put_unique(target_tld_name, target_tld);
|
||||
if (existing_entry) {
|
||||
Tld *existing_decl = existing_entry->value;
|
||||
if (existing_decl != target_tld) {
|
||||
ErrorMsg *msg = add_node_error(g, dst_use_node,
|
||||
buf_sprintf("import of '%s' overrides existing definition",
|
||||
buf_ptr(target_tld->name)));
|
||||
buf_ptr(target_tld_name)));
|
||||
add_error_note(g, msg, existing_decl->source_node, buf_sprintf("previous definition here"));
|
||||
add_error_note(g, msg, target_tld->source_node, buf_sprintf("imported definition here"));
|
||||
}
|
||||
@ -2956,6 +2960,12 @@ void resolve_use_decl(CodeGen *g, AstNode *node) {
|
||||
void preview_use_decl(CodeGen *g, AstNode *node) {
|
||||
assert(node->type == NodeTypeUse);
|
||||
|
||||
if (node->data.use.resolution == TldResolutionOk ||
|
||||
node->data.use.resolution == TldResolutionInvalid)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
node->data.use.resolution = TldResolutionResolving;
|
||||
IrInstruction *result = analyze_const_value(g, &node->owner->decls_scope->base,
|
||||
node->data.use.expr, g->builtin_types.entry_namespace, nullptr);
|
||||
|
@ -979,7 +979,7 @@ pub const LibExeObjStep = struct {
|
||||
|
||||
for (builder.include_paths.toSliceConst()) |include_path| {
|
||||
%%zig_args.append("-isystem");
|
||||
%%zig_args.append(include_path);
|
||||
%%zig_args.append(builder.pathFromRoot(include_path));
|
||||
}
|
||||
|
||||
for (builder.rpaths.toSliceConst()) |rpath| {
|
||||
@ -1086,7 +1086,7 @@ pub const TestStep = struct {
|
||||
|
||||
for (builder.include_paths.toSliceConst()) |include_path| {
|
||||
%%zig_args.append("-isystem");
|
||||
%%zig_args.append(include_path);
|
||||
%%zig_args.append(builder.pathFromRoot(include_path));
|
||||
}
|
||||
|
||||
for (builder.rpaths.toSliceConst()) |rpath| {
|
||||
|
@ -9,4 +9,5 @@ pub fn addCases(cases: &tests.BuildExamplesContext) {
|
||||
cases.addBuildFile("example/mix_o_files/build.zig");
|
||||
cases.addBuildFile("test/standalone/issue_339/build.zig");
|
||||
cases.addBuildFile("test/standalone/pkg_import/build.zig");
|
||||
cases.addBuildFile("test/standalone/use_alias/build.zig");
|
||||
}
|
||||
|
11
test/standalone/use_alias/build.zig
Normal file
11
test/standalone/use_alias/build.zig
Normal file
@ -0,0 +1,11 @@
|
||||
const Builder = @import("std").build.Builder;
|
||||
|
||||
pub fn build(b: &Builder) {
|
||||
b.addCIncludePath(".");
|
||||
|
||||
const main = b.addTest("main.zig");
|
||||
main.setBuildMode(b.standardReleaseOptions());
|
||||
|
||||
const test_step = b.step("test", "Test it");
|
||||
test_step.dependOn(&main.step);
|
||||
}
|
1
test/standalone/use_alias/c.zig
Normal file
1
test/standalone/use_alias/c.zig
Normal file
@ -0,0 +1 @@
|
||||
pub use @cImport(@cInclude("foo.h"));
|
4
test/standalone/use_alias/foo.h
Normal file
4
test/standalone/use_alias/foo.h
Normal file
@ -0,0 +1,4 @@
|
||||
struct Foo {
|
||||
int a;
|
||||
int b;
|
||||
};
|
10
test/standalone/use_alias/main.zig
Normal file
10
test/standalone/use_alias/main.zig
Normal file
@ -0,0 +1,10 @@
|
||||
const c = @import("c.zig");
|
||||
const assert = @import("std").debug.assert;
|
||||
|
||||
test "symbol exists" {
|
||||
var foo = c.Foo {
|
||||
.a = 1,
|
||||
.b = 1,
|
||||
};
|
||||
assert(foo.a + foo.b == 2);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user