Skip to content

Commit f2d3266

Browse files
authored
Merge pull request #4932 from Qix-/fix-private-access
Fix private access
2 parents f1e5a4f + 10abffc commit f2d3266

File tree

10 files changed

+72
-19
lines changed

10 files changed

+72
-19
lines changed

lib/std/build.zig

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -284,11 +284,11 @@ pub const Builder = struct {
284284
return run_step;
285285
}
286286

287-
fn dupe(self: *Builder, bytes: []const u8) []u8 {
287+
pub fn dupe(self: *Builder, bytes: []const u8) []u8 {
288288
return mem.dupe(self.allocator, u8, bytes) catch unreachable;
289289
}
290290

291-
fn dupePath(self: *Builder, bytes: []const u8) []u8 {
291+
pub fn dupePath(self: *Builder, bytes: []const u8) []u8 {
292292
const the_copy = self.dupe(bytes);
293293
for (the_copy) |*byte| {
294294
switch (byte.*) {
@@ -717,7 +717,7 @@ pub const Builder = struct {
717717
return self.invalid_user_input;
718718
}
719719

720-
fn spawnChild(self: *Builder, argv: []const []const u8) !void {
720+
pub fn spawnChild(self: *Builder, argv: []const []const u8) !void {
721721
return self.spawnChildEnvMap(null, self.env_map, argv);
722722
}
723723

@@ -843,7 +843,7 @@ pub const Builder = struct {
843843
}) catch unreachable;
844844
}
845845

846-
fn updateFile(self: *Builder, source_path: []const u8, dest_path: []const u8) !void {
846+
pub fn updateFile(self: *Builder, source_path: []const u8, dest_path: []const u8) !void {
847847
if (self.verbose) {
848848
warn("cp {} {} ", .{ source_path, dest_path });
849849
}
@@ -855,7 +855,7 @@ pub const Builder = struct {
855855
};
856856
}
857857

858-
fn pathFromRoot(self: *Builder, rel_path: []const u8) []u8 {
858+
pub fn pathFromRoot(self: *Builder, rel_path: []const u8) []u8 {
859859
return fs.path.resolve(self.allocator, &[_][]const u8{ self.build_root, rel_path }) catch unreachable;
860860
}
861861

lib/std/dwarf.zig

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ const Die = struct {
121121
};
122122
}
123123

124-
fn getAttrString(self: *const Die, di: *DwarfInfo, id: u64) ![]const u8 {
124+
pub fn getAttrString(self: *const Die, di: *DwarfInfo, id: u64) ![]const u8 {
125125
const form_value = self.getAttr(id) orelse return error.MissingDebugInfo;
126126
return switch (form_value.*) {
127127
FormValue.String => |value| value,
@@ -389,7 +389,7 @@ pub const DwarfInfo = struct {
389389
return self.abbrev_table_list.allocator;
390390
}
391391

392-
fn getSymbolName(di: *DwarfInfo, address: u64) ?[]const u8 {
392+
pub fn getSymbolName(di: *DwarfInfo, address: u64) ?[]const u8 {
393393
for (di.func_list.span()) |*func| {
394394
if (func.pc_range) |range| {
395395
if (address >= range.start and address < range.end) {
@@ -578,7 +578,7 @@ pub const DwarfInfo = struct {
578578
}
579579
}
580580

581-
fn findCompileUnit(di: *DwarfInfo, target_address: u64) !*const CompileUnit {
581+
pub fn findCompileUnit(di: *DwarfInfo, target_address: u64) !*const CompileUnit {
582582
for (di.compile_unit_list.span()) |*compile_unit| {
583583
if (compile_unit.pc_range) |range| {
584584
if (target_address >= range.start and target_address < range.end) return compile_unit;
@@ -690,7 +690,7 @@ pub const DwarfInfo = struct {
690690
return result;
691691
}
692692

693-
fn getLineNumberInfo(di: *DwarfInfo, compile_unit: CompileUnit, target_address: usize) !debug.LineInfo {
693+
pub fn getLineNumberInfo(di: *DwarfInfo, compile_unit: CompileUnit, target_address: usize) !debug.LineInfo {
694694
var stream = io.fixedBufferStream(di.debug_line);
695695
const in = &stream.inStream();
696696
const seekable = &stream.seekableStream();

lib/std/dynamic_library.zig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ const LinkMap = extern struct {
3333
pub const Iterator = struct {
3434
current: ?*LinkMap,
3535

36-
fn end(self: *Iterator) bool {
36+
pub fn end(self: *Iterator) bool {
3737
return self.current == null;
3838
}
3939

40-
fn next(self: *Iterator) ?*LinkMap {
40+
pub fn next(self: *Iterator) ?*LinkMap {
4141
if (self.current) |it| {
4242
self.current = it.l_next;
4343
return it;

lib/std/json.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2336,7 +2336,7 @@ pub const StringifyOptions = struct {
23362336
/// After a colon, should whitespace be inserted?
23372337
separator: bool = true,
23382338

2339-
fn outputIndent(
2339+
pub fn outputIndent(
23402340
whitespace: @This(),
23412341
out_stream: var,
23422342
) @TypeOf(out_stream).Error!void {

lib/std/net.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,7 @@ pub const AddressList = struct {
386386
addrs: []Address,
387387
canon_name: ?[]u8,
388388

389-
fn deinit(self: *AddressList) void {
389+
pub fn deinit(self: *AddressList) void {
390390
// Here we copy the arena allocator into stack memory, because
391391
// otherwise it would destroy itself while it was still working.
392392
var arena = self.arena;

lib/std/pdb.zig

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ const MsfStream = struct {
644644
return stream;
645645
}
646646

647-
fn readNullTermString(self: *MsfStream, allocator: *mem.Allocator) ![]u8 {
647+
pub fn readNullTermString(self: *MsfStream, allocator: *mem.Allocator) ![]u8 {
648648
var list = ArrayList(u8).init(allocator);
649649
while (true) {
650650
const byte = try self.inStream().readByte();
@@ -684,13 +684,13 @@ const MsfStream = struct {
684684
return buffer.len;
685685
}
686686

687-
fn seekBy(self: *MsfStream, len: i64) !void {
687+
pub fn seekBy(self: *MsfStream, len: i64) !void {
688688
self.pos = @intCast(u64, @intCast(i64, self.pos) + len);
689689
if (self.pos >= self.blocks.len * self.block_size)
690690
return error.EOF;
691691
}
692692

693-
fn seekTo(self: *MsfStream, len: u64) !void {
693+
pub fn seekTo(self: *MsfStream, len: u64) !void {
694694
self.pos = len;
695695
if (self.pos >= self.blocks.len * self.block_size)
696696
return error.EOF;
@@ -708,7 +708,7 @@ const MsfStream = struct {
708708
return block * self.block_size + offset;
709709
}
710710

711-
fn inStream(self: *MsfStream) std.io.InStream(*MsfStream, Error, read) {
711+
pub fn inStream(self: *MsfStream) std.io.InStream(*MsfStream, Error, read) {
712712
return .{ .context = self };
713713
}
714714
};

lib/std/zig/cross_target.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ pub const CrossTarget = struct {
660660
return Target.getObjectFormatSimple(self.getOsTag(), self.getCpuArch());
661661
}
662662

663-
fn updateCpuFeatures(self: CrossTarget, set: *Target.Cpu.Feature.Set) void {
663+
pub fn updateCpuFeatures(self: CrossTarget, set: *Target.Cpu.Feature.Set) void {
664664
set.removeFeatureSet(self.cpu_features_sub);
665665
set.addFeatureSet(self.cpu_features_add);
666666
set.populateDependencies(self.getCpuArch().allFeaturesList());

src-self-hosted/ir/text.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ pub const Inst = struct {
236236
@"comptime_int",
237237
@"comptime_float",
238238

239-
fn toType(self: BuiltinType) Type {
239+
pub fn toType(self: BuiltinType) Type {
240240
return switch (self) {
241241
.@"isize" => Type.initTag(.@"isize"),
242242
.@"usize" => Type.initTag(.@"usize"),

src/ir.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21624,6 +21624,15 @@ static IrInstGen *ir_analyze_container_member_access_inner(IrAnalyze *ira,
2162421624
if (tld->resolution == TldResolutionResolving)
2162521625
return ir_error_dependency_loop(ira, source_instr);
2162621626

21627+
if (tld->visib_mod == VisibModPrivate &&
21628+
tld->import != get_scope_import(source_instr->scope))
21629+
{
21630+
ErrorMsg *msg = ir_add_error(ira, source_instr,
21631+
buf_sprintf("'%s' is private", buf_ptr(field_name)));
21632+
add_error_note(ira->codegen, msg, tld->source_node, buf_sprintf("declared here"));
21633+
return ira->codegen->invalid_inst_gen;
21634+
}
21635+
2162721636
TldFn *tld_fn = (TldFn *)tld;
2162821637
ZigFn *fn_entry = tld_fn->fn_entry;
2162921638
assert(fn_entry != nullptr);

test/compile_errors.zig

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5375,6 +5375,50 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
53755375
break :x tc;
53765376
});
53775377

5378+
cases.addCase(x: {
5379+
const tc = cases.create("multiple files with private member instance function (canonical invocation) error",
5380+
\\const Foo = @import("foo.zig",).Foo;
5381+
\\
5382+
\\export fn callPrivFunction() void {
5383+
\\ var foo = Foo{};
5384+
\\ Foo.privateFunction(foo);
5385+
\\}
5386+
, &[_][]const u8{
5387+
"tmp.zig:5:8: error: 'privateFunction' is private",
5388+
"foo.zig:2:5: note: declared here",
5389+
});
5390+
5391+
tc.addSourceFile("foo.zig",
5392+
\\pub const Foo = struct {
5393+
\\ fn privateFunction(self: *Foo) void { }
5394+
\\};
5395+
);
5396+
5397+
break :x tc;
5398+
});
5399+
5400+
cases.addCase(x: {
5401+
const tc = cases.create("multiple files with private member instance function error",
5402+
\\const Foo = @import("foo.zig",).Foo;
5403+
\\
5404+
\\export fn callPrivFunction() void {
5405+
\\ var foo = Foo{};
5406+
\\ foo.privateFunction();
5407+
\\}
5408+
, &[_][]const u8{
5409+
"tmp.zig:5:8: error: 'privateFunction' is private",
5410+
"foo.zig:2:5: note: declared here",
5411+
});
5412+
5413+
tc.addSourceFile("foo.zig",
5414+
\\pub const Foo = struct {
5415+
\\ fn privateFunction(self: *Foo) void { }
5416+
\\};
5417+
);
5418+
5419+
break :x tc;
5420+
});
5421+
53785422
cases.add("container init with non-type",
53795423
\\const zero: i32 = 0;
53805424
\\const a = zero{1};

0 commit comments

Comments
 (0)