authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-04-15 23:32:26+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-04-15 23:32:26+03:00
log101aac92c258af9f25520c36f06b2ce8335d7f9a
tree7ff9258c3b713734519f6395b3fa9f23ccff2d07
parent1c4c826a505b3f4863a0125f7915273ad2e7c1c0

stage2: fix bugs preventing stage2 from building stage3 with LLVM


9 files changed, 40 insertions(+), 15 deletions(-)

lib/std/c.zig+12-4
......@@ -219,7 +219,11 @@ pub extern "c" fn utimes(path: [*:0]const u8, times: *[2]c.timeval) c_int;
219219pub extern "c" fn utimensat(dirfd: c.fd_t, pathname: [*:0]const u8, times: *[2]c.timespec, flags: u32) c_int;
220220pub extern "c" fn futimens(fd: c.fd_t, times: *const [2]c.timespec) c_int;
221221
222pub extern "c" fn pthread_create(noalias newthread: *pthread_t, noalias attr: ?*const c.pthread_attr_t, start_routine: fn (?*anyopaque) callconv(.C) ?*anyopaque, noalias arg: ?*anyopaque) c.E;
222pub extern "c" fn pthread_create(noalias newthread: *pthread_t, noalias attr: ?*const c.pthread_attr_t, start_routine: PThreadStartFn, noalias arg: ?*anyopaque) c.E;
223const PThreadStartFn = if (builtin.zig_backend == .stage1)
224 fn (?*anyopaque) callconv(.C) ?*anyopaque
225else
226 *const fn (?*anyopaque) callconv(.C) ?*anyopaque;
223227pub extern "c" fn pthread_attr_init(attr: *c.pthread_attr_t) c.E;
224228pub extern "c" fn pthread_attr_setstack(attr: *c.pthread_attr_t, stackaddr: *anyopaque, stacksize: usize) c.E;
225229pub extern "c" fn pthread_attr_setstacksize(attr: *c.pthread_attr_t, stacksize: usize) c.E;
......@@ -229,10 +233,14 @@ pub extern "c" fn pthread_self() pthread_t;
229233pub extern "c" fn pthread_join(thread: pthread_t, arg_return: ?*?*anyopaque) c.E;
230234pub extern "c" fn pthread_detach(thread: pthread_t) c.E;
231235pub extern "c" fn pthread_atfork(
232 prepare: ?fn () callconv(.C) void,
233 parent: ?fn () callconv(.C) void,
234 child: ?fn () callconv(.C) void,
236 prepare: ?PThreadForkFn,
237 parent: ?PThreadForkFn,
238 child: ?PThreadForkFn,
235239) c_int;
240const PThreadForkFn = if (builtin.zig_backend == .stage1)
241 fn () callconv(.C) void
242else
243 *const fn () callconv(.C) void;
236244pub extern "c" fn pthread_key_create(key: *c.pthread_key_t, destructor: ?fn (value: *anyopaque) callconv(.C) void) c.E;
237245pub extern "c" fn pthread_key_delete(key: c.pthread_key_t) c.E;
238246pub extern "c" fn pthread_getspecific(key: c.pthread_key_t) ?*anyopaque;
lib/std/c/tokenizer.zig+5-1
......@@ -126,7 +126,11 @@ pub const Token = struct {
126126 Keyword_error,
127127 Keyword_pragma,
128128
129 pub fn symbol(id: std.meta.Tag(Id)) []const u8 {
129 pub fn symbol(id: Id) []const u8 {
130 return symbolName(id);
131 }
132
133 pub fn symbolName(id: std.meta.Tag(Id)) []const u8 {
130134 return switch (id) {
131135 .Invalid => "Invalid",
132136 .Eof => "Eof",
src/clang.zig+8-3
......@@ -161,7 +161,12 @@ pub const ASTUnit = opaque {
161161 extern fn ZigClangASTUnit_getSourceManager(*ASTUnit) *SourceManager;
162162
163163 pub const visitLocalTopLevelDecls = ZigClangASTUnit_visitLocalTopLevelDecls;
164 extern fn ZigClangASTUnit_visitLocalTopLevelDecls(*ASTUnit, context: ?*anyopaque, Fn: ?fn (?*anyopaque, *const Decl) callconv(.C) bool) bool;
164 extern fn ZigClangASTUnit_visitLocalTopLevelDecls(*ASTUnit, context: ?*anyopaque, Fn: ?VisitorFn) bool;
165
166 const VisitorFn = if (@import("builtin").zig_backend == .stage1)
167 fn (?*anyopaque, *const Decl) callconv(.C) bool
168 else
169 *const fn (?*anyopaque, *const Decl) callconv(.C) bool;
165170
166171 pub const getLocalPreprocessingEntities_begin = ZigClangASTUnit_getLocalPreprocessingEntities_begin;
167172 extern fn ZigClangASTUnit_getLocalPreprocessingEntities_begin(*ASTUnit) PreprocessingRecord.iterator;
......@@ -490,8 +495,8 @@ pub const FloatingLiteral = opaque {
490495 pub const getValueAsApproximateDouble = ZigClangFloatingLiteral_getValueAsApproximateDouble;
491496 extern fn ZigClangFloatingLiteral_getValueAsApproximateDouble(*const FloatingLiteral) f64;
492497
493 pub const getBeginLoc = ZigClangIntegerLiteral_getBeginLoc;
494 extern fn ZigClangIntegerLiteral_getBeginLoc(*const FloatingLiteral) SourceLocation;
498 pub const getBeginLoc = ZigClangFloatingLiteral_getBeginLoc;
499 extern fn ZigClangFloatingLiteral_getBeginLoc(*const FloatingLiteral) SourceLocation;
495500
496501 pub const getRawSemantics = ZigClangFloatingLiteral_getRawSemantics;
497502 extern fn ZigClangFloatingLiteral_getRawSemantics(*const FloatingLiteral) APFloatBaseSemantics;
src/codegen/llvm.zig+1-1
......@@ -7220,7 +7220,7 @@ pub const FuncGen = struct {
72207220 return self.builder.buildInBoundsGEP(base_ptr, &indices, indices.len, "");
72217221 }
72227222
7223 fn getIntrinsic(self: *FuncGen, name: []const u8, types: []*const llvm.Type) *const llvm.Value {
7223 fn getIntrinsic(self: *FuncGen, name: []const u8, types: []const *const llvm.Type) *const llvm.Value {
72247224 const id = llvm.lookupIntrinsicID(name.ptr, name.len);
72257225 assert(id != 0);
72267226 return self.llvmModule().getIntrinsicDeclaration(id, types.ptr, types.len);
src/codegen/llvm/bindings.zig+2-2
......@@ -60,7 +60,7 @@ pub const Context = opaque {
6060 Packed: Bool,
6161 ) *const Type;
6262
63 const structCreateNamed = LLVMStructCreateNamed;
63 pub const structCreateNamed = LLVMStructCreateNamed;
6464 extern fn LLVMStructCreateNamed(C: *const Context, Name: [*:0]const u8) *const Type;
6565
6666 pub const constString = LLVMConstStringInContext;
......@@ -320,7 +320,7 @@ pub const Module = opaque {
320320 extern fn LLVMGetNamedFunction(*const Module, Name: [*:0]const u8) ?*const Value;
321321
322322 pub const getIntrinsicDeclaration = LLVMGetIntrinsicDeclaration;
323 extern fn LLVMGetIntrinsicDeclaration(Mod: *const Module, ID: c_uint, ParamTypes: ?[*]*const Type, ParamCount: usize) *const Value;
323 extern fn LLVMGetIntrinsicDeclaration(Mod: *const Module, ID: c_uint, ParamTypes: ?[*]const *const Type, ParamCount: usize) *const Value;
324324
325325 pub const printToString = LLVMPrintModuleToString;
326326 extern fn LLVMPrintModuleToString(*const Module) [*:0]const u8;
src/translate_c.zig+5-3
......@@ -368,11 +368,13 @@ pub fn translate(
368368 resources_path: [*:0]const u8,
369369 zig_is_stage1: bool,
370370) !std.zig.Ast {
371 // TODO stage2 bug
372 var tmp = errors;
371373 const ast_unit = clang.LoadFromCommandLine(
372374 args_begin,
373375 args_end,
374 &errors.ptr,
375 &errors.len,
376 &tmp.ptr,
377 &tmp.len,
376378 resources_path,
377379 ) orelse {
378380 if (errors.len == 0) return error.ASTUnitFailure;
......@@ -5325,7 +5327,7 @@ const MacroCtx = struct {
53255327 try self.fail(
53265328 c,
53275329 "unable to translate C expr: expected '{s}' instead got '{s}'",
5328 .{ CToken.Id.symbol(expected_id), next_id.symbol() },
5330 .{ CToken.Id.symbolName(expected_id), next_id.symbol() },
53295331 );
53305332 return error.ParseError;
53315333 }
src/translate_c/ast.zig+1-1
......@@ -779,7 +779,7 @@ const TokenTag = std.zig.Token.Tag;
779779
780780const Context = struct {
781781 gpa: Allocator,
782 buf: std.ArrayList(u8) = .{},
782 buf: std.ArrayList(u8),
783783 nodes: std.zig.Ast.NodeList = .{},
784784 extra_data: std.ArrayListUnmanaged(std.zig.Ast.Node.Index) = .{},
785785 tokens: std.zig.Ast.TokenList = .{},
src/zig_clang.cpp+5
......@@ -2706,6 +2706,11 @@ double ZigClangFloatingLiteral_getValueAsApproximateDouble(const ZigClangFloatin
27062706 return casted->getValueAsApproximateDouble();
27072707}
27082708
2709struct ZigClangSourceLocation ZigClangFloatingLiteral_getBeginLoc(const struct ZigClangFloatingLiteral *self) {
2710 auto casted = reinterpret_cast<const clang::FloatingLiteral *>(self);
2711 return bitcast(casted->getBeginLoc());
2712}
2713
27092714ZigClangAPFloatBase_Semantics ZigClangFloatingLiteral_getRawSemantics(const ZigClangFloatingLiteral *self) {
27102715 auto casted = reinterpret_cast<const clang::FloatingLiteral *>(self);
27112716 return static_cast<ZigClangAPFloatBase_Semantics>(casted->getRawSemantics());
src/zig_clang.h+1
......@@ -1245,6 +1245,7 @@ ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangDeclStmt_getBeginLoc(const st
12451245ZIG_EXTERN_C unsigned ZigClangAPFloat_convertToHexString(const struct ZigClangAPFloat *self, char *DST,
12461246 unsigned HexDigits, bool UpperCase, enum ZigClangAPFloat_roundingMode RM);
12471247ZIG_EXTERN_C double ZigClangFloatingLiteral_getValueAsApproximateDouble(const ZigClangFloatingLiteral *self);
1248ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangFloatingLiteral_getBeginLoc(const struct ZigClangFloatingLiteral *);
12481249ZIG_EXTERN_C ZigClangAPFloatBase_Semantics ZigClangFloatingLiteral_getRawSemantics(const ZigClangFloatingLiteral *self);
12491250
12501251ZIG_EXTERN_C enum ZigClangStringLiteral_StringKind ZigClangStringLiteral_getKind(const struct ZigClangStringLiteral *self);