diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-06-13 20:39:40 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-13 20:39:40 -0400 |
| commit | 86ebd4b975d2f1e01f468e06daab6e28c06f9719 (patch) | |
| tree | 250bfe03e0768bdf7619fa8bb588b6815e1d3f0d /src | |
| parent | df4f11f42f44b4ee2a06e43095bc160277ceed42 (diff) | |
| parent | e63ff4f1c110165c4b92025cb5b9d5531e861643 (diff) | |
| download | zig-86ebd4b975d2f1e01f468e06daab6e28c06f9719.tar.gz zig-86ebd4b975d2f1e01f468e06daab6e28c06f9719.zip | |
Merge pull request #9106 from Vexu/fmt
Add formatting check to CI pipeline
Diffstat (limited to 'src')
| -rw-r--r-- | src/AstGen.zig | 10 | ||||
| -rw-r--r-- | src/clang.zig | 40 | ||||
| -rw-r--r-- | src/codegen/llvm/bindings.zig | 18 | ||||
| -rw-r--r-- | src/codegen/spirv/spec.zig | 91 | ||||
| -rw-r--r-- | src/config.zig.in | 2 | ||||
| -rw-r--r-- | src/link/MachO.zig | 20 | ||||
| -rw-r--r-- | src/link/MachO/Trie.zig | 2 | ||||
| -rw-r--r-- | src/link/MachO/Zld.zig | 20 | ||||
| -rw-r--r-- | src/main.zig | 54 | ||||
| -rw-r--r-- | src/stage1.zig | 4 | ||||
| -rw-r--r-- | src/type.zig | 6 | ||||
| -rw-r--r-- | src/windows_sdk.zig | 2 |
12 files changed, 149 insertions, 120 deletions
diff --git a/src/AstGen.zig b/src/AstGen.zig index 374d27c3e6..d7720e7678 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -59,7 +59,7 @@ fn appendRefsAssumeCapacity(astgen: *AstGen, refs: []const Zir.Inst.Ref) void { astgen.extra.appendSliceAssumeCapacity(coerced); } -pub fn generate(gpa: *Allocator, tree: ast.Tree) InnerError!Zir { +pub fn generate(gpa: *Allocator, tree: ast.Tree) Allocator.Error!Zir { var arena = std.heap.ArenaAllocator.init(gpa); defer arena.deinit(); @@ -662,7 +662,7 @@ fn expr(gz: *GenZir, scope: *Scope, rl: ResultLoc, node: ast.Node.Index) InnerEr const lhs = try expr(gz, scope, .ref, node_datas[node].lhs); const extra = tree.extraData(node_datas[node].rhs, ast.Node.SliceSentinel); const start = try expr(gz, scope, .{ .ty = .usize_type }, extra.start); - const end = try expr(gz, scope, .{ .ty = .usize_type }, extra.end); + const end = if (extra.end != 0) try expr(gz, scope, .{ .ty = .usize_type }, extra.end) else .none; const sentinel = try expr(gz, scope, .{ .ty = .usize_type }, extra.sentinel); const result = try gz.addPlNode(.slice_sentinel, node, Zir.Inst.SliceSentinel{ .lhs = lhs, @@ -3877,6 +3877,10 @@ fn containerDecl( const node_tags = tree.nodes.items(.tag); const node_datas = tree.nodes.items(.data); + const prev_fn_block = astgen.fn_block; + astgen.fn_block = null; + defer astgen.fn_block = prev_fn_block; + // We must not create any types until Sema. Here the goal is only to generate // ZIR for all the field types, alignments, and default value expressions. @@ -3976,7 +3980,7 @@ fn containerDecl( .nonexhaustive_node = nonexhaustive_node, }; }; - if (counts.total_fields == 0) { + if (counts.total_fields == 0 and counts.nonexhaustive_node == 0) { // One can construct an enum with no tags, and it functions the same as `noreturn`. But // this is only useful for generic code; when explicitly using `enum {}` syntax, there // must be at least one tag. diff --git a/src/clang.zig b/src/clang.zig index 4cc82c0ae5..bd305bc76f 100644 --- a/src/clang.zig +++ b/src/clang.zig @@ -45,7 +45,7 @@ pub const APValueLValueBase = extern struct { extern fn ZigClangAPValueLValueBase_dyn_cast_Expr(APValueLValueBase) ?*const Expr; }; -pub const APValueKind = extern enum { +pub const APValueKind = enum(c_int) { None, Indeterminate, Int, @@ -105,7 +105,7 @@ pub const APFloat = opaque { extern fn ZigClangAPFloat_toString(*const APFloat, precision: c_uint, maxPadding: c_uint, truncateZero: bool) [*:0]const u8; }; -pub const APFloatBaseSemantics = extern enum { +pub const APFloatBaseSemantics = enum(c_int) { IEEEhalf, BFloat, IEEEsingle, @@ -1037,7 +1037,7 @@ pub const InitListExpr = opaque { extern fn ZigClangInitListExpr_getInitializedFieldInUnion(*const InitListExpr) ?*FieldDecl; }; -pub const BO = extern enum { +pub const BO = enum(c_int) { PtrMemD, PtrMemI, Mul, @@ -1073,7 +1073,7 @@ pub const BO = extern enum { Comma, }; -pub const UO = extern enum { +pub const UO = enum(c_int) { PostInc, PostDec, PreInc, @@ -1090,7 +1090,7 @@ pub const UO = extern enum { Coawait, }; -pub const TypeClass = extern enum { +pub const TypeClass = enum(c_int) { Adjusted, Decayed, ConstantArray, @@ -1145,7 +1145,7 @@ pub const TypeClass = extern enum { ExtVector, }; -const StmtClass = extern enum { +const StmtClass = enum(c_int) { NoStmtClass, GCCAsmStmtClass, MSAsmStmtClass, @@ -1362,7 +1362,7 @@ const StmtClass = extern enum { WhileStmtClass, }; -pub const CK = extern enum { +pub const CK = enum(c_int) { Dependent, BitCast, LValueBitCast, @@ -1429,7 +1429,7 @@ pub const CK = extern enum { IntToOCLSampler, }; -pub const DeclKind = extern enum { +pub const DeclKind = enum(c_int) { AccessSpec, Block, Captured, @@ -1513,7 +1513,7 @@ pub const DeclKind = extern enum { TranslationUnit, }; -pub const BuiltinTypeKind = extern enum { +pub const BuiltinTypeKind = enum(c_int) { OCLImage1dRO, OCLImage1dArrayRO, OCLImage1dBufferRO, @@ -1687,7 +1687,7 @@ pub const BuiltinTypeKind = extern enum { OMPIterator, }; -pub const CallingConv = extern enum { +pub const CallingConv = enum(c_int) { C, X86StdCall, X86FastCall, @@ -1708,7 +1708,7 @@ pub const CallingConv = extern enum { AArch64VectorCall, }; -pub const StorageClass = extern enum { +pub const StorageClass = enum(c_int) { None, Extern, Static, @@ -1717,7 +1717,7 @@ pub const StorageClass = extern enum { Register, }; -pub const APFloat_roundingMode = extern enum(i8) { +pub const APFloat_roundingMode = enum(i8) { TowardZero = 0, NearestTiesToEven = 1, TowardPositive = 2, @@ -1727,7 +1727,7 @@ pub const APFloat_roundingMode = extern enum(i8) { Invalid = -1, }; -pub const StringLiteral_StringKind = extern enum { +pub const StringLiteral_StringKind = enum(c_int) { Ascii, Wide, UTF8, @@ -1735,7 +1735,7 @@ pub const StringLiteral_StringKind = extern enum { UTF32, }; -pub const CharacterLiteral_CharacterKind = extern enum { +pub const CharacterLiteral_CharacterKind = enum(c_int) { Ascii, Wide, UTF8, @@ -1743,13 +1743,13 @@ pub const CharacterLiteral_CharacterKind = extern enum { UTF32, }; -pub const VarDecl_TLSKind = extern enum { +pub const VarDecl_TLSKind = enum(c_int) { None, Static, Dynamic, }; -pub const ElaboratedTypeKeyword = extern enum { +pub const ElaboratedTypeKeyword = enum(c_int) { Struct, Interface, Union, @@ -1759,21 +1759,21 @@ pub const ElaboratedTypeKeyword = extern enum { None, }; -pub const PreprocessedEntity_EntityKind = extern enum { +pub const PreprocessedEntity_EntityKind = enum(c_int) { InvalidKind, MacroExpansionKind, MacroDefinitionKind, InclusionDirectiveKind, }; -pub const Expr_ConstantExprKind = extern enum { +pub const Expr_ConstantExprKind = enum(c_int) { Normal, NonClassTemplateArgument, ClassTemplateArgument, ImmediateInvocation, }; -pub const UnaryExprOrTypeTrait_Kind = extern enum { +pub const UnaryExprOrTypeTrait_Kind = enum(c_int) { SizeOf, AlignOf, VecStep, @@ -1781,7 +1781,7 @@ pub const UnaryExprOrTypeTrait_Kind = extern enum { PreferredAlignOf, }; -pub const OffsetOfNode_Kind = extern enum { +pub const OffsetOfNode_Kind = enum(c_int) { Array, Field, Identifier, diff --git a/src/codegen/llvm/bindings.zig b/src/codegen/llvm/bindings.zig index 63ac7e86a0..364b059a87 100644 --- a/src/codegen/llvm/bindings.zig +++ b/src/codegen/llvm/bindings.zig @@ -131,7 +131,7 @@ extern fn LLVMLookupIntrinsicID(Name: [*]const u8, NameLen: usize) c_uint; pub const disposeMessage = LLVMDisposeMessage; extern fn LLVMDisposeMessage(Message: [*:0]const u8) void; -pub const VerifierFailureAction = extern enum { +pub const VerifierFailureAction = enum(c_int) { AbortProcess, PrintMessage, ReturnStatus, @@ -228,7 +228,7 @@ pub const Builder = opaque { extern fn LLVMBuildExtractValue(*const Builder, AggVal: *const Value, Index: c_uint, Name: [*:0]const u8) *const Value; }; -pub const IntPredicate = extern enum { +pub const IntPredicate = enum(c_int) { EQ = 32, NE = 33, UGT = 34, @@ -274,7 +274,7 @@ pub const TargetMachine = opaque { ) Bool; }; -pub const CodeMode = extern enum { +pub const CodeMode = enum(c_int) { Default, JITDefault, Tiny, @@ -284,14 +284,14 @@ pub const CodeMode = extern enum { Large, }; -pub const CodeGenOptLevel = extern enum { +pub const CodeGenOptLevel = enum(c_int) { None, Less, Default, Aggressive, }; -pub const RelocMode = extern enum { +pub const RelocMode = enum(c_int) { Default, Static, PIC, @@ -301,7 +301,7 @@ pub const RelocMode = extern enum { ROPI_RWPI, }; -pub const CodeGenFileType = extern enum { +pub const CodeGenFileType = enum(c_int) { AssemblyFile, ObjectFile, }; @@ -504,7 +504,7 @@ pub const LinkELF = ZigLLDLinkELF; pub const LinkMachO = ZigLLDLinkMachO; pub const LinkWasm = ZigLLDLinkWasm; -pub const ObjectFormatType = extern enum(c_int) { +pub const ObjectFormatType = enum(c_int) { Unknown, COFF, ELF, @@ -528,7 +528,7 @@ extern fn ZigLLVMWriteArchive( os_type: OSType, ) bool; -pub const OSType = extern enum(c_int) { +pub const OSType = enum(c_int) { UnknownOS, Ananas, CloudABI, @@ -567,7 +567,7 @@ pub const OSType = extern enum(c_int) { Emscripten, }; -pub const ArchType = extern enum(c_int) { +pub const ArchType = enum(c_int) { UnknownArch, arm, armeb, diff --git a/src/codegen/spirv/spec.zig b/src/codegen/spirv/spec.zig index 227211e4a6..429ed63d23 100644 --- a/src/codegen/spirv/spec.zig +++ b/src/codegen/spirv/spec.zig @@ -3,7 +3,7 @@ const Version = @import("std").builtin.Version; pub const version = Version{ .major = 1, .minor = 5, .patch = 4 }; pub const magic_number: u32 = 0x07230203; -pub const Opcode = extern enum(u16) { +pub const Opcode = enum(u16) { OpNop = 0, OpUndef = 1, OpSourceContinued = 2, @@ -382,12 +382,10 @@ pub const Opcode = extern enum(u16) { OpGroupNonUniformPartitionNV = 5296, OpWritePackedPrimitiveIndices4x8NV = 5299, OpReportIntersectionNV = 5334, - OpReportIntersectionKHR = 5334, OpIgnoreIntersectionNV = 5335, OpTerminateRayNV = 5336, OpTraceNV = 5337, OpTypeAccelerationStructureNV = 5341, - OpTypeAccelerationStructureKHR = 5341, OpExecuteCallableNV = 5344, OpTypeCooperativeMatrixNV = 5358, OpCooperativeMatrixLoadNV = 5359, @@ -432,9 +430,7 @@ pub const Opcode = extern enum(u16) { OpAssumeTrueKHR = 5630, OpExpectKHR = 5631, OpDecorateString = 5632, - OpDecorateStringGOOGLE = 5632, OpMemberDecorateString = 5633, - OpMemberDecorateStringGOOGLE = 5633, OpVmeImageINTEL = 5699, OpTypeVmeImageINTEL = 5700, OpTypeAvcImePayloadINTEL = 5701, @@ -585,6 +581,9 @@ pub const Opcode = extern enum(u16) { OpConstantCompositeContinuedINTEL = 6091, OpSpecConstantCompositeContinuedINTEL = 6092, _, + + const OpReportIntersectionKHR = OpReportIntersectionNV; + const OpTypeAccelerationStructureKHR = OpTypeAccelerationStructureNV; }; pub const ImageOperands = packed struct { Bias: bool align(@alignOf(u32)) = false, @@ -926,7 +925,7 @@ pub const FragmentShadingRate = packed struct { _reserved_bit_30: bool = false, _reserved_bit_31: bool = false, }; -pub const SourceLanguage = extern enum(u32) { +pub const SourceLanguage = enum(u32) { Unknown = 0, ESSL = 1, GLSL = 2, @@ -935,7 +934,7 @@ pub const SourceLanguage = extern enum(u32) { HLSL = 5, _, }; -pub const ExecutionModel = extern enum(u32) { +pub const ExecutionModel = enum(u32) { Vertex = 0, TessellationControl = 1, TessellationEvaluation = 2, @@ -959,23 +958,21 @@ pub const ExecutionModel = extern enum(u32) { CallableKHR = 5318, _, }; -pub const AddressingModel = extern enum(u32) { +pub const AddressingModel = enum(u32) { Logical = 0, Physical32 = 1, Physical64 = 2, PhysicalStorageBuffer64 = 5348, - PhysicalStorageBuffer64EXT = 5348, _, }; -pub const MemoryModel = extern enum(u32) { +pub const MemoryModel = enum(u32) { Simple = 0, GLSL450 = 1, OpenCL = 2, Vulkan = 3, - VulkanKHR = 3, _, }; -pub const ExecutionMode = extern enum(u32) { +pub const ExecutionMode = enum(u32) { Invocations = 0, SpacingEqual = 1, SpacingFractionalEven = 2, @@ -1044,7 +1041,7 @@ pub const ExecutionMode = extern enum(u32) { SchedulerTargetFmaxMhzINTEL = 5903, _, }; -pub const StorageClass = extern enum(u32) { +pub const StorageClass = enum(u32) { UniformConstant = 0, Input = 1, Uniform = 2, @@ -1058,26 +1055,19 @@ pub const StorageClass = extern enum(u32) { AtomicCounter = 10, Image = 11, StorageBuffer = 12, - CallableDataNV = 5328, CallableDataKHR = 5328, - IncomingCallableDataNV = 5329, IncomingCallableDataKHR = 5329, - RayPayloadNV = 5338, RayPayloadKHR = 5338, - HitAttributeNV = 5339, HitAttributeKHR = 5339, - IncomingRayPayloadNV = 5342, IncomingRayPayloadKHR = 5342, - ShaderRecordBufferNV = 5343, ShaderRecordBufferKHR = 5343, PhysicalStorageBuffer = 5349, - PhysicalStorageBufferEXT = 5349, CodeSectionINTEL = 5605, DeviceOnlyINTEL = 5936, HostOnlyINTEL = 5937, _, }; -pub const Dim = extern enum(u32) { +pub const Dim = enum(u32) { @"1D" = 0, @"2D" = 1, @"3D" = 2, @@ -1087,7 +1077,7 @@ pub const Dim = extern enum(u32) { SubpassData = 6, _, }; -pub const SamplerAddressingMode = extern enum(u32) { +pub const SamplerAddressingMode = enum(u32) { None = 0, ClampToEdge = 1, Clamp = 2, @@ -1095,12 +1085,12 @@ pub const SamplerAddressingMode = extern enum(u32) { RepeatMirrored = 4, _, }; -pub const SamplerFilterMode = extern enum(u32) { +pub const SamplerFilterMode = enum(u32) { Nearest = 0, Linear = 1, _, }; -pub const ImageFormat = extern enum(u32) { +pub const ImageFormat = enum(u32) { Unknown = 0, Rgba32f = 1, Rgba16f = 2, @@ -1145,7 +1135,7 @@ pub const ImageFormat = extern enum(u32) { R64i = 41, _, }; -pub const ImageChannelOrder = extern enum(u32) { +pub const ImageChannelOrder = enum(u32) { R = 0, A = 1, RG = 2, @@ -1168,7 +1158,7 @@ pub const ImageChannelOrder = extern enum(u32) { ABGR = 19, _, }; -pub const ImageChannelDataType = extern enum(u32) { +pub const ImageChannelDataType = enum(u32) { SnormInt8 = 0, SnormInt16 = 1, UnormInt8 = 2, @@ -1188,36 +1178,36 @@ pub const ImageChannelDataType = extern enum(u32) { UnormInt101010_2 = 16, _, }; -pub const FPRoundingMode = extern enum(u32) { +pub const FPRoundingMode = enum(u32) { RTE = 0, RTZ = 1, RTP = 2, RTN = 3, _, }; -pub const FPDenormMode = extern enum(u32) { +pub const FPDenormMode = enum(u32) { Preserve = 0, FlushToZero = 1, _, }; -pub const FPOperationMode = extern enum(u32) { +pub const FPOperationMode = enum(u32) { IEEE = 0, ALT = 1, _, }; -pub const LinkageType = extern enum(u32) { +pub const LinkageType = enum(u32) { Export = 0, Import = 1, LinkOnceODR = 2, _, }; -pub const AccessQualifier = extern enum(u32) { +pub const AccessQualifier = enum(u32) { ReadOnly = 0, WriteOnly = 1, ReadWrite = 2, _, }; -pub const FunctionParameterAttribute = extern enum(u32) { +pub const FunctionParameterAttribute = enum(u32) { Zext = 0, Sext = 1, ByVal = 2, @@ -1228,7 +1218,7 @@ pub const FunctionParameterAttribute = extern enum(u32) { NoReadWrite = 7, _, }; -pub const Decoration = extern enum(u32) { +pub const Decoration = enum(u32) { RelaxedPrecision = 0, SpecId = 1, Block = 2, @@ -1334,7 +1324,7 @@ pub const Decoration = extern enum(u32) { VectorComputeCallableFunctionINTEL = 6087, _, }; -pub const BuiltIn = extern enum(u32) { +pub const BuiltIn = enum(u32) { Position = 0, PointSize = 1, ClipDistance = 3, @@ -1455,7 +1445,7 @@ pub const BuiltIn = extern enum(u32) { SMIDNV = 5377, _, }; -pub const Scope = extern enum(u32) { +pub const Scope = enum(u32) { CrossDevice = 0, Device = 1, Workgroup = 2, @@ -1466,7 +1456,7 @@ pub const Scope = extern enum(u32) { ShaderCallKHR = 6, _, }; -pub const GroupOperation = extern enum(u32) { +pub const GroupOperation = enum(u32) { Reduce = 0, InclusiveScan = 1, ExclusiveScan = 2, @@ -1476,13 +1466,13 @@ pub const GroupOperation = extern enum(u32) { PartitionedExclusiveScanNV = 8, _, }; -pub const KernelEnqueueFlags = extern enum(u32) { +pub const KernelEnqueueFlags = enum(u32) { NoWait = 0, WaitKernel = 1, WaitWorkGroup = 2, _, }; -pub const Capability = extern enum(u32) { +pub const Capability = enum(u32) { Matrix = 0, Shader = 1, Geometry = 2, @@ -1560,8 +1550,6 @@ pub const Capability = extern enum(u32) { WorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, SubgroupVoteKHR = 4431, StorageBuffer16BitAccess = 4433, - StorageUniformBufferBlock16 = 4433, - UniformAndStorageBuffer16BitAccess = 4434, StorageUniform16 = 4434, StoragePushConstant16 = 4435, StorageInputOutput16 = 4436, @@ -1592,7 +1580,6 @@ pub const Capability = extern enum(u32) { ShaderClockKHR = 5055, SampleMaskOverrideCoverageNV = 5249, GeometryShaderPassthroughNV = 5251, - ShaderViewportIndexLayerEXT = 5254, ShaderViewportIndexLayerNV = 5254, ShaderViewportMaskNV = 5255, ShaderStereoViewNV = 5259, @@ -1602,40 +1589,24 @@ pub const Capability = extern enum(u32) { ImageFootprintNV = 5282, FragmentBarycentricNV = 5284, ComputeDerivativeGroupQuadsNV = 5288, - FragmentDensityEXT = 5291, ShadingRateNV = 5291, GroupNonUniformPartitionedNV = 5297, ShaderNonUniform = 5301, - ShaderNonUniformEXT = 5301, RuntimeDescriptorArray = 5302, - RuntimeDescriptorArrayEXT = 5302, InputAttachmentArrayDynamicIndexing = 5303, - InputAttachmentArrayDynamicIndexingEXT = 5303, UniformTexelBufferArrayDynamicIndexing = 5304, - UniformTexelBufferArrayDynamicIndexingEXT = 5304, StorageTexelBufferArrayDynamicIndexing = 5305, - StorageTexelBufferArrayDynamicIndexingEXT = 5305, UniformBufferArrayNonUniformIndexing = 5306, - UniformBufferArrayNonUniformIndexingEXT = 5306, SampledImageArrayNonUniformIndexing = 5307, - SampledImageArrayNonUniformIndexingEXT = 5307, StorageBufferArrayNonUniformIndexing = 5308, - StorageBufferArrayNonUniformIndexingEXT = 5308, StorageImageArrayNonUniformIndexing = 5309, - StorageImageArrayNonUniformIndexingEXT = 5309, InputAttachmentArrayNonUniformIndexing = 5310, - InputAttachmentArrayNonUniformIndexingEXT = 5310, UniformTexelBufferArrayNonUniformIndexing = 5311, - UniformTexelBufferArrayNonUniformIndexingEXT = 5311, StorageTexelBufferArrayNonUniformIndexing = 5312, - StorageTexelBufferArrayNonUniformIndexingEXT = 5312, RayTracingNV = 5340, VulkanMemoryModel = 5345, - VulkanMemoryModelKHR = 5345, VulkanMemoryModelDeviceScope = 5346, - VulkanMemoryModelDeviceScopeKHR = 5346, PhysicalStorageBufferAddresses = 5347, - PhysicalStorageBufferAddressesEXT = 5347, ComputeDerivativeGroupLinearNV = 5350, RayTracingProvisionalKHR = 5353, CooperativeMatrixNV = 5357, @@ -1685,18 +1656,18 @@ pub const Capability = extern enum(u32) { LongConstantCompositeINTEL = 6089, _, }; -pub const RayQueryIntersection = extern enum(u32) { +pub const RayQueryIntersection = enum(u32) { RayQueryCandidateIntersectionKHR = 0, RayQueryCommittedIntersectionKHR = 1, _, }; -pub const RayQueryCommittedIntersectionType = extern enum(u32) { +pub const RayQueryCommittedIntersectionType = enum(u32) { RayQueryCommittedIntersectionNoneKHR = 0, RayQueryCommittedIntersectionTriangleKHR = 1, RayQueryCommittedIntersectionGeneratedKHR = 2, _, }; -pub const RayQueryCandidateIntersectionType = extern enum(u32) { +pub const RayQueryCandidateIntersectionType = enum(u32) { RayQueryCandidateIntersectionTriangleKHR = 0, RayQueryCandidateIntersectionAABBKHR = 1, _, diff --git a/src/config.zig.in b/src/config.zig.in index 38dbf6a4d1..1bd1b35505 100644 --- a/src/config.zig.in +++ b/src/config.zig.in @@ -1,6 +1,6 @@ pub const have_llvm = true; pub const version: [:0]const u8 = "@ZIG_VERSION@"; -pub const semver = try @import("std").SemanticVersion.parse(version); +pub const semver = @import("std").SemanticVersion.parse(version) catch unreachable; pub const enable_logging: bool = @ZIG_ENABLE_LOGGING_BOOL@; pub const enable_tracy = false; pub const is_stage1 = true; diff --git a/src/link/MachO.zig b/src/link/MachO.zig index 4f9ee0587b..4de1708ff8 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -2700,7 +2700,7 @@ fn writeStubHelperPreamble(self: *MachO) !void { const this_addr = stub_helper.addr; const target_addr = data.addr; data_blk: { - const displacement = math.cast(i21, target_addr - this_addr) catch |_| break :data_blk; + const displacement = math.cast(i21, target_addr - this_addr) catch break :data_blk; // adr x17, disp mem.writeIntLittle(u32, code[0..4], aarch64.Instruction.adr(.x17, displacement).toU32()); // nop @@ -2709,7 +2709,7 @@ fn writeStubHelperPreamble(self: *MachO) !void { } data_blk: { const new_this_addr = this_addr + @sizeOf(u32); - const displacement = math.cast(i21, target_addr - new_this_addr) catch |_| break :data_blk; + const displacement = math.cast(i21, target_addr - new_this_addr) catch break :data_blk; // nop mem.writeIntLittle(u32, code[0..4], aarch64.Instruction.nop().toU32()); // adr x17, disp @@ -2738,8 +2738,8 @@ fn writeStubHelperPreamble(self: *MachO) !void { const this_addr = stub_helper.addr + 3 * @sizeOf(u32); const target_addr = got.addr; binder_blk: { - const displacement = math.divExact(u64, target_addr - this_addr, 4) catch |_| break :binder_blk; - const literal = math.cast(u18, displacement) catch |_| break :binder_blk; + const displacement = math.divExact(u64, target_addr - this_addr, 4) catch break :binder_blk; + const literal = math.cast(u18, displacement) catch break :binder_blk; // ldr x16, label mem.writeIntLittle(u32, code[12..16], aarch64.Instruction.ldr(.x16, .{ .literal = literal, @@ -2750,8 +2750,8 @@ fn writeStubHelperPreamble(self: *MachO) !void { } binder_blk: { const new_this_addr = this_addr + @sizeOf(u32); - const displacement = math.divExact(u64, target_addr - new_this_addr, 4) catch |_| break :binder_blk; - const literal = math.cast(u18, displacement) catch |_| break :binder_blk; + const displacement = math.divExact(u64, target_addr - new_this_addr, 4) catch break :binder_blk; + const literal = math.cast(u18, displacement) catch break :binder_blk; // nop mem.writeIntLittle(u32, code[12..16], aarch64.Instruction.nop().toU32()); // ldr x16, label @@ -2816,8 +2816,8 @@ fn writeStub(self: *MachO, index: u32) !void { const this_addr = stub_addr; const target_addr = la_ptr_addr; inner: { - const displacement = math.divExact(u64, target_addr - this_addr, 4) catch |_| break :inner; - const literal = math.cast(u18, displacement) catch |_| break :inner; + const displacement = math.divExact(u64, target_addr - this_addr, 4) catch break :inner; + const literal = math.cast(u18, displacement) catch break :inner; // ldr x16, literal mem.writeIntLittle(u32, code[0..4], aarch64.Instruction.ldr(.x16, .{ .literal = literal, @@ -2828,8 +2828,8 @@ fn writeStub(self: *MachO, index: u32) !void { } inner: { const new_this_addr = this_addr + @sizeOf(u32); - const displacement = math.divExact(u64, target_addr - new_this_addr, 4) catch |_| break :inner; - const literal = math.cast(u18, displacement) catch |_| break :inner; + const displacement = math.divExact(u64, target_addr - new_this_addr, 4) catch break :inner; + const literal = math.cast(u18, displacement) catch break :inner; // nop mem.writeIntLittle(u32, code[0..4], aarch64.Instruction.nop().toU32()); // ldr x16, literal diff --git a/src/link/MachO/Trie.zig b/src/link/MachO/Trie.zig index 379b10e2d8..9ef1e486e1 100644 --- a/src/link/MachO/Trie.zig +++ b/src/link/MachO/Trie.zig @@ -334,7 +334,7 @@ pub fn finalize(self: *Trie) !void { self.ordered_nodes.shrinkRetainingCapacity(0); try self.ordered_nodes.ensureCapacity(self.allocator, self.node_count); - comptime const Fifo = std.fifo.LinearFifo(*Node, .{ .Static = std.math.maxInt(u8) }); + const Fifo = std.fifo.LinearFifo(*Node, .{ .Static = std.math.maxInt(u8) }); var fifo = Fifo.init(); try fifo.writeItem(self.root.?); diff --git a/src/link/MachO/Zld.zig b/src/link/MachO/Zld.zig index dd957f1a4a..824ea1bb56 100644 --- a/src/link/MachO/Zld.zig +++ b/src/link/MachO/Zld.zig @@ -1305,7 +1305,7 @@ fn writeStubHelperCommon(self: *Zld) !void { const this_addr = stub_helper.addr; const target_addr = data.addr + data.size - @sizeOf(u64); data_blk: { - const displacement = math.cast(i21, target_addr - this_addr) catch |_| break :data_blk; + const displacement = math.cast(i21, target_addr - this_addr) catch break :data_blk; // adr x17, disp mem.writeIntLittle(u32, code[0..4], aarch64.Instruction.adr(.x17, displacement).toU32()); // nop @@ -1314,7 +1314,7 @@ fn writeStubHelperCommon(self: *Zld) !void { } data_blk: { const new_this_addr = this_addr + @sizeOf(u32); - const displacement = math.cast(i21, target_addr - new_this_addr) catch |_| break :data_blk; + const displacement = math.cast(i21, target_addr - new_this_addr) catch break :data_blk; // nop mem.writeIntLittle(u32, code[0..4], aarch64.Instruction.nop().toU32()); // adr x17, disp @@ -1339,8 +1339,8 @@ fn writeStubHelperCommon(self: *Zld) !void { const this_addr = stub_helper.addr + 3 * @sizeOf(u32); const target_addr = (got.addr + dyld_stub_binder.got_index.? * @sizeOf(u64)); binder_blk: { - const displacement = math.divExact(u64, target_addr - this_addr, 4) catch |_| break :binder_blk; - const literal = math.cast(u18, displacement) catch |_| break :binder_blk; + const displacement = math.divExact(u64, target_addr - this_addr, 4) catch break :binder_blk; + const literal = math.cast(u18, displacement) catch break :binder_blk; // ldr x16, label mem.writeIntLittle(u32, code[12..16], aarch64.Instruction.ldr(.x16, .{ .literal = literal, @@ -1351,8 +1351,8 @@ fn writeStubHelperCommon(self: *Zld) !void { } binder_blk: { const new_this_addr = this_addr + @sizeOf(u32); - const displacement = math.divExact(u64, target_addr - new_this_addr, 4) catch |_| break :binder_blk; - const literal = math.cast(u18, displacement) catch |_| break :binder_blk; + const displacement = math.divExact(u64, target_addr - new_this_addr, 4) catch break :binder_blk; + const literal = math.cast(u18, displacement) catch break :binder_blk; // Pad with nop to please division. // nop mem.writeIntLittle(u32, code[12..16], aarch64.Instruction.nop().toU32()); @@ -1444,8 +1444,8 @@ fn writeStub(self: *Zld, index: u32) !void { const this_addr = stub_addr; const target_addr = la_ptr_addr; inner: { - const displacement = math.divExact(u64, target_addr - this_addr, 4) catch |_| break :inner; - const literal = math.cast(u18, displacement) catch |_| break :inner; + const displacement = math.divExact(u64, target_addr - this_addr, 4) catch break :inner; + const literal = math.cast(u18, displacement) catch break :inner; // ldr x16, literal mem.writeIntLittle(u32, code[0..4], aarch64.Instruction.ldr(.x16, .{ .literal = literal, @@ -1456,8 +1456,8 @@ fn writeStub(self: *Zld, index: u32) !void { } inner: { const new_this_addr = this_addr + @sizeOf(u32); - const displacement = math.divExact(u64, target_addr - new_this_addr, 4) catch |_| break :inner; - const literal = math.cast(u18, displacement) catch |_| break :inner; + const displacement = math.divExact(u64, target_addr - new_this_addr, 4) catch break :inner; + const literal = math.cast(u18, displacement) catch break :inner; // nop mem.writeIntLittle(u32, code[0..4], aarch64.Instruction.nop().toU32()); // ldr x16, literal diff --git a/src/main.zig b/src/main.zig index 081b9ac335..512828bd77 100644 --- a/src/main.zig +++ b/src/main.zig @@ -2923,6 +2923,7 @@ pub const usage_fmt = \\ --stdin Format code from stdin; output to stdout \\ --check List non-conforming files and exit with an error \\ if the list is non-empty + \\ --ast-check Run zig ast-check on every file \\ \\ ; @@ -2930,6 +2931,7 @@ pub const usage_fmt = const Fmt = struct { seen: SeenMap, any_error: bool, + check_ast: bool, color: Color, gpa: *Allocator, out_buffer: std.ArrayList(u8), @@ -2942,6 +2944,7 @@ pub fn cmdFmt(gpa: *Allocator, args: []const []const u8) !void { var color: Color = .auto; var stdin_flag: bool = false; var check_flag: bool = false; + var check_ast_flag: bool = false; var input_files = ArrayList([]const u8).init(gpa); defer input_files.deinit(); @@ -2967,6 +2970,8 @@ pub fn cmdFmt(gpa: *Allocator, args: []const []const u8) !void { stdin_flag = true; } else if (mem.eql(u8, arg, "--check")) { check_flag = true; + } else if (mem.eql(u8, arg, "--ast-check")) { + check_ast_flag = true; } else { fatal("unrecognized parameter: '{s}'", .{arg}); } @@ -3017,6 +3022,7 @@ pub fn cmdFmt(gpa: *Allocator, args: []const []const u8) !void { .gpa = gpa, .seen = Fmt.SeenMap.init(gpa), .any_error = false, + .check_ast = check_ast_flag, .color = color, .out_buffer = std.ArrayList(u8).init(gpa), }; @@ -3085,7 +3091,7 @@ fn fmtPathDir( while (try dir_it.next()) |entry| { const is_dir = entry.kind == .Directory; - if (is_dir and std.mem.eql(u8, entry.name, "zig-cache")) continue; + if (is_dir and (mem.eql(u8, entry.name, "zig-cache") or mem.eql(u8, entry.name, "zig-out"))) continue; if (is_dir or mem.endsWith(u8, entry.name, ".zig")) { const full_path = try fs.path.join(fmt.gpa, &[_][]const u8{ file_path, entry.name }); @@ -3144,6 +3150,52 @@ fn fmtPathFile( return; } + if (fmt.check_ast) { + const Module = @import("Module.zig"); + const AstGen = @import("AstGen.zig"); + + var file: Module.Scope.File = .{ + .status = .never_loaded, + .source_loaded = true, + .zir_loaded = false, + .sub_file_path = file_path, + .source = source_code, + .stat_size = stat.size, + .stat_inode = stat.inode, + .stat_mtime = stat.mtime, + .tree = tree, + .tree_loaded = true, + .zir = undefined, + .pkg = undefined, + .root_decl = null, + }; + + if (stat.size > max_src_size) + return error.FileTooBig; + + file.zir = try AstGen.generate(fmt.gpa, file.tree); + file.zir_loaded = true; + defer file.zir.deinit(fmt.gpa); + + if (file.zir.hasCompileErrors()) { + var arena_instance = std.heap.ArenaAllocator.init(fmt.gpa); + defer arena_instance.deinit(); + var errors = std.ArrayList(Compilation.AllErrors.Message).init(fmt.gpa); + defer errors.deinit(); + + try Compilation.AllErrors.addZir(&arena_instance.allocator, &errors, &file); + const ttyconf: std.debug.TTY.Config = switch (fmt.color) { + .auto => std.debug.detectTTYConfig(), + .on => .escape_codes, + .off => .no_color, + }; + for (errors.items) |full_err_msg| { + full_err_msg.renderToStdErr(ttyconf); + } + fmt.any_error = true; + } + } + // As a heuristic, we make enough capacity for the same as the input source. fmt.out_buffer.shrinkRetainingCapacity(0); try fmt.out_buffer.ensureCapacity(source_code.len); diff --git a/src/stage1.zig b/src/stage1.zig index fc7b86e727..91e7cd8bed 100644 --- a/src/stage1.zig +++ b/src/stage1.zig @@ -58,7 +58,7 @@ pub const OS = c_int; /// Matches std.builtin.BuildMode pub const BuildMode = c_int; -pub const TargetSubsystem = extern enum(c_int) { +pub const TargetSubsystem = enum(c_int) { Console, Windows, Posix, @@ -171,7 +171,7 @@ export fn stage2_panic(ptr: [*]const u8, len: usize) void { } // ABI warning -const Error = extern enum { +const Error = enum(c_int) { None, OutOfMemory, InvalidFormat, diff --git a/src/type.zig b/src/type.zig index 3e6c810b20..410773b649 100644 --- a/src/type.zig +++ b/src/type.zig @@ -6,6 +6,8 @@ const Target = std.Target; const Module = @import("Module.zig"); const log = std.log.scoped(.Type); +const file_struct = @This(); + /// This is the raw data, with no bookkeeping, no memory awareness, no de-duplication. /// It's important for this type to be small. /// Types are not de-duplicated, which helps with multi-threading since it obviates the requirement @@ -3000,12 +3002,12 @@ pub const Type = extern union { }; } - pub fn init(comptime t: Tag) Type { + pub fn init(comptime t: Tag) file_struct.Type { comptime std.debug.assert(@enumToInt(t) < Tag.no_payload_count); return .{ .tag_if_small_enough = @enumToInt(t) }; } - pub fn create(comptime t: Tag, ally: *Allocator, data: Data(t)) error{OutOfMemory}!Type { + pub fn create(comptime t: Tag, ally: *Allocator, data: Data(t)) error{OutOfMemory}!file_struct.Type { const ptr = try ally.create(t.Type()); ptr.* = .{ .base = .{ .tag = t }, diff --git a/src/windows_sdk.zig b/src/windows_sdk.zig index 6dfdeb99fd..ca69ff4548 100644 --- a/src/windows_sdk.zig +++ b/src/windows_sdk.zig @@ -12,7 +12,7 @@ pub const ZigWindowsSDK = extern struct { msvc_lib_dir_ptr: ?[*]const u8, msvc_lib_dir_len: usize, }; -pub const ZigFindWindowsSdkError = extern enum { +pub const ZigFindWindowsSdkError = enum(c_int) { None, OutOfMemory, NotFound, |
