diff --git a/Make.inc b/Make.inc index 24ec6db63e4a2..e7f1ed633e4f5 100644 --- a/Make.inc +++ b/Make.inc @@ -1107,6 +1107,18 @@ $(foreach proj,$(BB_PROJECTS),$(eval $(call SET_BB_DEFAULT,$(proj)))) # Use the Assertions build BINARYBUILDER_LLVM_ASSERTS ?= 0 +# XXX: Ensure assertion/debug flags are properly propagated in the absence of +# assert-enabled LLVM builds from BinaryBuilder. Note that this does not apply +# to Julia master, which has corresponding assert-enabled LLVM builds. +ifeq ($(USE_BINARYBUILDER_LLVM),1) +ifeq ($(BINARYBUILDER_LLVM_ASSERTS),0) +override LLVM_ASSERTIONS := 0 +endif +endif + +ifeq ($(LLVM_ASSERTIONS),0) +CXX_DISABLE_ASSERTION += -DNDEBUG +endif # OS specific stuff diff --git a/base/boot.jl b/base/boot.jl index f80fd674521ee..8ad161b2f0de2 100644 --- a/base/boot.jl +++ b/base/boot.jl @@ -8,7 +8,7 @@ #abstract type Vararg{T} end #mutable struct Symbol -# #opaque +## opaque #end #mutable struct TypeName @@ -53,28 +53,43 @@ #abstract type DenseArray{T,N} <: AbstractArray{T,N} end #mutable struct Array{T,N} <: DenseArray{T,N} +## opaque #end #mutable struct Module -# name::Symbol +## opaque +#end + +#mutable struct SimpleVector +## opaque +#end + +#mutable struct String +## opaque #end #mutable struct Method +#... #end #mutable struct MethodInstance +#... #end #mutable struct CodeInstance +#... #end #mutable struct CodeInfo +#... #end #mutable struct TypeMapLevel +#... #end #mutable struct TypeMapEntry +#... #end #abstract type Ref{T} end @@ -93,7 +108,8 @@ #end #struct LineInfoNode -# method::Any +# module::Module +# method::Symbol # file::Symbol # line::Int # inlined_at::Int @@ -379,8 +395,8 @@ eval(Core, :(PiNode(val, typ) = $(Expr(:new, :PiNode, :val, :typ)))) eval(Core, :(PhiCNode(values::Array{Any, 1}) = $(Expr(:new, :PhiCNode, :values)))) eval(Core, :(UpsilonNode(val) = $(Expr(:new, :UpsilonNode, :val)))) eval(Core, :(UpsilonNode() = $(Expr(:new, :UpsilonNode)))) -eval(Core, :(LineInfoNode(@nospecialize(method), file::Symbol, line::Int, inlined_at::Int) = - $(Expr(:new, :LineInfoNode, :method, :file, :line, :inlined_at)))) +eval(Core, :(LineInfoNode(mod::Module, @nospecialize(method), file::Symbol, line::Int, inlined_at::Int) = + $(Expr(:new, :LineInfoNode, :mod, :method, :file, :line, :inlined_at)))) Module(name::Symbol=:anonymous, std_imports::Bool=true) = ccall(:jl_f_new_module, Ref{Module}, (Any, Bool), name, std_imports) diff --git a/base/compiler/ssair/inlining.jl b/base/compiler/ssair/inlining.jl index 0c90b4d3e9c6d..ef467b9523382 100644 --- a/base/compiler/ssair/inlining.jl +++ b/base/compiler/ssair/inlining.jl @@ -30,7 +30,6 @@ struct InliningTodo sparams::Vector{Any} # The static parameters we computed for this call site metharg # ::Type # The LineTable and IR of the inlinee - linetable::Vector{LineInfoNode} ir::IRCode # If the function being inlined is a single basic block we can use a # simpler inlining algorithm. This flag determines whether that's allowed @@ -307,8 +306,8 @@ function ir_inline_item!(compact::IncrementalCompact, idx::Int, argexprs::Vector linetable_offset = length(linetable) # Append the linetable of the inlined function to our line table inlined_at = Int(compact.result_lines[idx]) - for entry in item.linetable - push!(linetable, LineInfoNode(entry.method, entry.file, entry.line, + for entry in item.ir.linetable + push!(linetable, LineInfoNode(entry.module, entry.method, entry.file, entry.line, (entry.inlined_at > 0 ? entry.inlined_at + linetable_offset : inlined_at))) end if item.isva @@ -734,15 +733,15 @@ function analyze_method!(idx::Int, sig::Signature, @nospecialize(metharg), meths @timeit "inline IR inflation" begin ir2 = inflate_ir(src, mi) - # prepare inlining linetable with method instance information - inline_linetable = Vector{LineInfoNode}(undef, length(src.linetable)) - for i = 1:length(src.linetable) - entry = src.linetable[i] - if entry.inlined_at === 0 && entry.method === method - entry = LineInfoNode(mi, entry.file, entry.line, entry.inlined_at) - end - inline_linetable[i] = entry - end + # #optional: prepare inlining linetable with method instance information + # inline_linetable = ir2.linetable + # for i = 1:length(inline_linetable) + # entry = inline_linetable[i] + # if entry.inlined_at === 0 && entry.method === method + # entry = LineInfoNode(entry.module, mi, entry.file, entry.line, entry.inlined_at) + # inline_linetable[i] = entry + # end + # end end #verify_ir(ir2) @@ -750,7 +749,7 @@ function analyze_method!(idx::Int, sig::Signature, @nospecialize(metharg), meths na > 0 && method.isva, isinvoke, na, method, Any[methsp...], metharg, - inline_linetable, ir2, linear_inline_eligible(ir2)) + ir2, linear_inline_eligible(ir2)) end # Neither the product iterator not CartesianIndices are available diff --git a/base/compiler/tfuncs.jl b/base/compiler/tfuncs.jl index 18dec7d839950..19dbae49361b3 100644 --- a/base/compiler/tfuncs.jl +++ b/base/compiler/tfuncs.jl @@ -925,11 +925,11 @@ function fieldtype_tfunc(@nospecialize(s0), @nospecialize(name)) if s0 === Any || s0 === Type || DataType ⊑ s0 || UnionAll ⊑ s0 return Type end - # fieldtype only accepts Types, errors on `Module` - if isa(s0, Const) && (!(isa(s0.val, DataType) || isa(s0.val, UnionAll) || isa(s0.val, Union)) || s0.val === Module) + # fieldtype only accepts Types + if isa(s0, Const) && !(isa(s0.val, DataType) || isa(s0.val, UnionAll) || isa(s0.val, Union)) return Bottom end - if s0 == Type{Module} || s0 == Type{Union{}} || isa(s0, Conditional) + if (s0 isa Type && s0 == Type{Union{}}) || isa(s0, Conditional) return Bottom end diff --git a/base/compiler/typeinfer.jl b/base/compiler/typeinfer.jl index 5091ea08582cf..8f1764c3b2030 100644 --- a/base/compiler/typeinfer.jl +++ b/base/compiler/typeinfer.jl @@ -536,7 +536,7 @@ function typeinf_ext(mi::MethodInstance, params::Params) tree.slotflags = fill(0x00, nargs) tree.ssavaluetypes = 1 tree.codelocs = Int32[1] - tree.linetable = [LineInfoNode(method, method.file, Int(method.line), 0)] + tree.linetable = [LineInfoNode(method.module, method.name, method.file, Int(method.line), 0)] tree.inferred = true tree.ssaflags = UInt8[0] tree.pure = true diff --git a/base/gcutils.jl b/base/gcutils.jl index 72882d68b8638..20cf7a839bb61 100644 --- a/base/gcutils.jl +++ b/base/gcutils.jl @@ -99,7 +99,20 @@ the current Task. Finalizers will only run when the counter is at zero. (Set `true` for enabling, `false` for disabling). They may still run concurrently on another Task or thread. """ -enable_finalizers(on::Bool) = ccall(:jl_gc_enable_finalizers, Cvoid, (Ptr{Cvoid}, Int32,), C_NULL, on) +enable_finalizers(on::Bool) = on ? enable_finalizers() : disable_finalizers() + +function enable_finalizers() + Base.@_inline_meta + ccall(:jl_gc_enable_finalizers_internal, Cvoid, ()) + if unsafe_load(cglobal(:jl_gc_have_pending_finalizers, Cint)) != 0 + ccall(:jl_gc_run_pending_finalizers, Cvoid, (Ptr{Cvoid},), C_NULL) + end +end + +function disable_finalizers() + Base.@_inline_meta + ccall(:jl_gc_disable_finalizers_internal, Cvoid, ()) +end """ GC.@preserve x1 x2 ... xn expr diff --git a/base/lock.jl b/base/lock.jl index 9d0a6b053f05e..2dd1d12d8a785 100644 --- a/base/lock.jl +++ b/base/lock.jl @@ -59,7 +59,7 @@ function trylock(rl::ReentrantLock) if rl.reentrancy_cnt == 0 rl.locked_by = t rl.reentrancy_cnt = 1 - GC.enable_finalizers(false) + GC.disable_finalizers() got = true elseif t === notnothing(rl.locked_by) rl.reentrancy_cnt += 1 @@ -87,7 +87,7 @@ function lock(rl::ReentrantLock) if rl.reentrancy_cnt == 0 rl.locked_by = t rl.reentrancy_cnt = 1 - GC.enable_finalizers(false) + GC.disable_finalizers() break elseif t === notnothing(rl.locked_by) rl.reentrancy_cnt += 1 @@ -128,7 +128,7 @@ function unlock(rl::ReentrantLock) rethrow() end end - GC.enable_finalizers(true) + GC.enable_finalizers() end unlock(rl.cond_wait) return @@ -150,7 +150,7 @@ function unlockall(rl::ReentrantLock) rethrow() end end - GC.enable_finalizers(true) + GC.enable_finalizers() unlock(rl.cond_wait) return n end diff --git a/base/locks-mt.jl b/base/locks-mt.jl index c910ee6e01318..6847824432dee 100644 --- a/base/locks-mt.jl +++ b/base/locks-mt.jl @@ -61,12 +61,12 @@ Base.assert_havelock(l::SpinLock) = islocked(l) ? nothing : Base.concurrency_vio function lock(l::SpinLock) while true if _get(l) == 0 - GC.enable_finalizers(false) + GC.disable_finalizers() p = _xchg!(l, 1) if p == 0 return end - GC.enable_finalizers(true) + GC.enable_finalizers() end ccall(:jl_cpu_pause, Cvoid, ()) # Temporary solution before we have gc transition support in codegen. @@ -76,12 +76,12 @@ end function trylock(l::SpinLock) if _get(l) == 0 - GC.enable_finalizers(false) + GC.disable_finalizers() p = _xchg!(l, 1) if p == 0 return true end - GC.enable_finalizers(true) + GC.enable_finalizers() end return false end @@ -89,7 +89,7 @@ end function unlock(l::SpinLock) _get(l) == 0 && error("unlock count must match lock count") _set!(l, 0) - GC.enable_finalizers(true) + GC.enable_finalizers() ccall(:jl_cpu_wake, Cvoid, ()) return end diff --git a/deps/Versions.make b/deps/Versions.make index f9e474f287f34..de0e75d539214 100644 --- a/deps/Versions.make +++ b/deps/Versions.make @@ -30,7 +30,7 @@ CURL_BB_REL = 1 LIBGIT2_VER = 0.28.2 LIBGIT2_BB_REL = 1 LIBUV_VER = 1.29.1 -LIBUV_BB_REL = 9 +LIBUV_BB_REL = 12 OBJCONV_VER = 2.49.0 OBJCONV_BB_REL = 0 ZLIB_VER = 1.2.11 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.aarch64-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.aarch64-linux-gnu.tar.gz/md5 deleted file mode 100644 index 68dc7f146f154..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.aarch64-linux-gnu.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -f62a26a8747875641cf208c10398f8c3 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.aarch64-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.aarch64-linux-gnu.tar.gz/sha512 deleted file mode 100644 index c7e070ade278d..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.aarch64-linux-gnu.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -3cd90ede9313f15f8bd0484436722c0233d6462675d9afd9b758c1f2eba545e006c08a10d082ff93a2bcda6db25b7186fc41e2fcb882d8b3b7ca13a29f85efe5 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.aarch64-linux-musl.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.aarch64-linux-musl.tar.gz/md5 deleted file mode 100644 index fdd80dad00b0f..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.aarch64-linux-musl.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -88deb297c61dd5dc23609b5811e8ddf3 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.aarch64-linux-musl.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.aarch64-linux-musl.tar.gz/sha512 deleted file mode 100644 index 1a53e81b4ced6..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.aarch64-linux-musl.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -cfdefe8ca33e1fba5a2677f40aff23cbf66fa5c58a5d0aa23fb37c1dc5a18c92d6f0228e42f39370939516fb27b7976bf4f8aa922662b9b2cd28ea9354fb7eb7 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.armv7l-linux-gnueabihf.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.armv7l-linux-gnueabihf.tar.gz/md5 deleted file mode 100644 index 4cd4c49abc20b..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.armv7l-linux-gnueabihf.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -d574f0328b92f89dbad112fb7469b0e3 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.armv7l-linux-gnueabihf.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.armv7l-linux-gnueabihf.tar.gz/sha512 deleted file mode 100644 index ba6f537535eab..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.armv7l-linux-gnueabihf.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -8e81de23baef1060307f8642ba8bae0c05566d4291f9c876da4a1409db67206527f8afce0b2cb94758f1efcefa3bfd1ca5b7ccb87d5b0bf291c4b154e1ad7c15 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.armv7l-linux-musleabihf.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.armv7l-linux-musleabihf.tar.gz/md5 deleted file mode 100644 index 9fb5420db80ba..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.armv7l-linux-musleabihf.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -f02bd3f826599fd654f75be6ef3c413f diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.armv7l-linux-musleabihf.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.armv7l-linux-musleabihf.tar.gz/sha512 deleted file mode 100644 index 4bb2992a2d041..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.armv7l-linux-musleabihf.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -ee897ae441f5de0ab31ba272e36620802e1ea09ef8e9982b9fdae3ba55b06e594e0aafe0faad435e1ae8a47335d49decc2bfdd06328a578eaf599881b94726b5 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-linux-gnu.tar.gz/md5 deleted file mode 100644 index 18fd79aa12702..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-linux-gnu.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -3fa6b5b6c966abc7e2e66392005d9bed diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-linux-gnu.tar.gz/sha512 deleted file mode 100644 index 1da5d747742a0..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-linux-gnu.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -2ef3da931a9758427090a655126515218e95093c5f72bab46eb81da7983f57858ddd4553bd62853fc79bcb9e5ee31ea7f7301e337661752a74113699e5f30eef diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-linux-musl.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-linux-musl.tar.gz/md5 deleted file mode 100644 index 25747f620185e..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-linux-musl.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -c8e5815ad79ce6d9948ab8270fefb8c4 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-linux-musl.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-linux-musl.tar.gz/sha512 deleted file mode 100644 index 05624052c5fb9..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-linux-musl.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -27ff7670ae35b12f095f972fd4697ca25f3f09b5a58567ac0f4837222a55f47cb53a587d34bfba7d2c694c60a5ef3d938d1a950dbf3c6a05c0b1c95fe7177acf diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-w64-mingw32.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-w64-mingw32.tar.gz/md5 deleted file mode 100644 index 763685594a140..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-w64-mingw32.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -68787d2b3f47593d4b9f9a65a06a5b9d diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-w64-mingw32.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-w64-mingw32.tar.gz/sha512 deleted file mode 100644 index adb18d89e1adc..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.i686-w64-mingw32.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -c49af88c0de1fce898841a11a7eeb03261f1838ad01dadfeec0fa051a6f5a73821208910823d148a2f97e455aab1ae2d5f71928b2bb2e2bdd037a679f2300d3e diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.powerpc64le-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.powerpc64le-linux-gnu.tar.gz/md5 deleted file mode 100644 index 674632301e877..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.powerpc64le-linux-gnu.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -8cd161fe79a728f8cfa5bb237164405f diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.powerpc64le-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.powerpc64le-linux-gnu.tar.gz/sha512 deleted file mode 100644 index 7ef32173ac355..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.powerpc64le-linux-gnu.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -570a5e86bb67afe86509440a62bd3af971496c7fec95b0751796dda16d8b000bdadce781f40992decf886bb2f1b5737b3049774d929d128cf91a3e0cee79cbb9 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-apple-darwin14.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-apple-darwin14.tar.gz/md5 deleted file mode 100644 index 14bc27e787cab..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-apple-darwin14.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -9a538e613df006bf06e247011b445cf3 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-apple-darwin14.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-apple-darwin14.tar.gz/sha512 deleted file mode 100644 index 19f9891f4298f..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-apple-darwin14.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -13a555d4f04c6cbd5d058f737d94da66ffd69fa04093737450c6e537c637126e085a14d97f9ef0c43f62d7f48f94928261f42caef12cb342faf197aed8ad1a35 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-linux-gnu.tar.gz/md5 deleted file mode 100644 index 528f832ed2a81..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-linux-gnu.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -ab9a8d2010cc91d959878eaafd5cdd56 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-linux-gnu.tar.gz/sha512 deleted file mode 100644 index 556db0f7bf243..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-linux-gnu.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -ed73132f846b42d82eea537d0deb17abfd4f60c81535d1a161bf457c2bd00c6befb8ffc287e054c2abbe3bb2ecb890d85639459dc6641c4aa5a291832249dd66 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-linux-musl.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-linux-musl.tar.gz/md5 deleted file mode 100644 index bb3ef49ad48cd..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-linux-musl.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -fae95b4b5aab54b4cda42d7dfaabdf80 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-linux-musl.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-linux-musl.tar.gz/sha512 deleted file mode 100644 index 1b52b8bbeefc0..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-linux-musl.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -98e21f1068f4863edabbd6648c57c7d7c08c51991010223bef5ee54a6589e56e5151dae33b59cf9de614d6c1e1635bb1effdd480fa03c01bfe5b461dcb12ccc2 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-unknown-freebsd11.1.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-unknown-freebsd11.1.tar.gz/md5 deleted file mode 100644 index b80a8b9c4db3a..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-unknown-freebsd11.1.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -6a9df3e3796e4668ad6309c52aba51a7 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-unknown-freebsd11.1.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-unknown-freebsd11.1.tar.gz/sha512 deleted file mode 100644 index 8ae5691d7c50d..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-unknown-freebsd11.1.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -a5193c38d2c7e02be34c3e4a77dfb37de46e86c620e7964f177eb2a3bb35741cff1cb58cd4a7b269d45cb6d169a9cdb5a7e805823b062cd6878bec54f6cc2678 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-w64-mingw32.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-w64-mingw32.tar.gz/md5 deleted file mode 100644 index 98e6f27eada6b..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-w64-mingw32.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -32d2b4a5a8edb51ce9c79a32ebbcd5e9 diff --git a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-w64-mingw32.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-w64-mingw32.tar.gz/sha512 deleted file mode 100644 index 7a0a40c5fede6..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.24.0-julia-0.x86_64-w64-mingw32.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -744d72d1047acbf289e826281bac53bf4624d979c1e07c17e7ded11217c1f2dfe566cc6d59e9fbdfd98e181120ebb28411d021f47c3a95d42ab1af0e90802d5f diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.aarch64-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.aarch64-linux-gnu.tar.gz/md5 deleted file mode 100644 index 8d844afb68761..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.aarch64-linux-gnu.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -e3c78f70717b1323f300925bf7877a8a diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.aarch64-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.aarch64-linux-gnu.tar.gz/sha512 deleted file mode 100644 index 08870246e29ae..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.aarch64-linux-gnu.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -236287de60e7e400e79224843217a15735e9873d7473e5bb029bea0462dcf85b39ee0ad8efb85397713e07fbb795d5cc67e4398e4fb700b2c82257be6765035f diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.aarch64-linux-musl.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.aarch64-linux-musl.tar.gz/md5 deleted file mode 100644 index ead98d0796573..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.aarch64-linux-musl.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -cb93ad3a9d01e739071a29c02b4bac60 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.aarch64-linux-musl.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.aarch64-linux-musl.tar.gz/sha512 deleted file mode 100644 index f3fb0f6410e4a..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.aarch64-linux-musl.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -494d9de6e38ba931cdb799a974dd4c781019dfe24ce8813b78c745b4b3a5a68edb45a81d028069f13bcb4353f6ba9f7757ccc2455b612eed068c0595362b6830 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.armv7l-linux-gnueabihf.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.armv7l-linux-gnueabihf.tar.gz/md5 deleted file mode 100644 index 8c208c6f69f35..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.armv7l-linux-gnueabihf.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -ced3ff67ea4ed9b55cac37ae3e1a8ff9 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.armv7l-linux-gnueabihf.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.armv7l-linux-gnueabihf.tar.gz/sha512 deleted file mode 100644 index 1ca301b4ae89b..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.armv7l-linux-gnueabihf.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -9293cfa079236620d588e1bebddf06864b4f5ca1d19d0a79852325d3c74e8e4b4b1066996c22cf5c8d16346973dcc20fc3fed8b5e53d50075999b5cbe22615e0 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.armv7l-linux-musleabihf.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.armv7l-linux-musleabihf.tar.gz/md5 deleted file mode 100644 index 5d2b8242e03f5..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.armv7l-linux-musleabihf.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -5a4d5bd0e2fb7c317d0e7fc079e657f6 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.armv7l-linux-musleabihf.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.armv7l-linux-musleabihf.tar.gz/sha512 deleted file mode 100644 index 5fef3f223da84..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.armv7l-linux-musleabihf.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -5e930c49987c04b8a9ce5481ffa28c6a0e292b0a6d86f8459258fc79e15b0a4c7402be23e4dda2ca640c7cd0defab60c4e1435df5685e23e0a70a7d25494b9c6 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-linux-gnu.tar.gz/md5 deleted file mode 100644 index 09f75ba2db246..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-linux-gnu.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -d85e235d6ba2d3a75faeec5a01437a35 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-linux-gnu.tar.gz/sha512 deleted file mode 100644 index 6f9aa1a911686..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-linux-gnu.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -cb3227eee7c4d9f8bfee9a5b4101509ffe9570eb064b53ede6d6eb6ef520219ac854276160f1b7fb70dde7ca4eda78cccb93eb68e8a9d5686fbd4f124bf4ca96 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-linux-musl.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-linux-musl.tar.gz/md5 deleted file mode 100644 index a2dec168c6de7..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-linux-musl.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -ef3dddd3aca2a317ba8c2f2fe1a9a4f4 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-linux-musl.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-linux-musl.tar.gz/sha512 deleted file mode 100644 index 871574a3dc2e1..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-linux-musl.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -a32fdb1a55ca7bef2dda81f388cf0c231150dee2323cd349a3fbb1d7da7fe66aaa33f6eff3b34dfff60f64de60986f0d56edcae8b08e9cf7129d6febe395db46 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-w64-mingw32.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-w64-mingw32.tar.gz/md5 deleted file mode 100644 index 7c0f9fe8d4740..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-w64-mingw32.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -0ee316030df3c6762991564c26efc2f8 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-w64-mingw32.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-w64-mingw32.tar.gz/sha512 deleted file mode 100644 index 35d49b7c48aa2..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.i686-w64-mingw32.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -783dfcb0e0760e8d9b58bd587767ee96abead2577555b5ed5fb84b1c120312e7d5f0d791b1157c5fe1e4ca9612cc56d52b5c644d4312fc0b7491fff25188a264 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.powerpc64le-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.powerpc64le-linux-gnu.tar.gz/md5 deleted file mode 100644 index ad4df84d9ff54..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.powerpc64le-linux-gnu.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -58f2540cdae3124defbb2f8ddb16631a diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.powerpc64le-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.powerpc64le-linux-gnu.tar.gz/sha512 deleted file mode 100644 index 4b6b0f1bc36a9..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.powerpc64le-linux-gnu.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -c66768a860a3c05364022244ab1f3a9e87f242cf3731e63e7461340a564d56133ef9238b9e156ac6b2fe7b23cd143f853cb13befb6b27df0f9b183647a205508 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-apple-darwin14.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-apple-darwin14.tar.gz/md5 deleted file mode 100644 index 07758bfe86c4e..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-apple-darwin14.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -2d7b9822dc407d25a00d86e4e545e4e1 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-apple-darwin14.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-apple-darwin14.tar.gz/sha512 deleted file mode 100644 index 1346be8b3a40e..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-apple-darwin14.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -a7724c477550b13297e6cde70651ce673a2151f698529ecee1e78f76bdf3c4de77d333786caa96da9c8b5e0b38ed323f7aa135f1e4a874608a16f43fe3db0ec7 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-linux-gnu.tar.gz/md5 deleted file mode 100644 index a96d5e830b816..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-linux-gnu.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -49c38e6f0d1ee9665bb15d7a12cc0fea diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-linux-gnu.tar.gz/sha512 deleted file mode 100644 index e7a0128a81821..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-linux-gnu.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -9d562e0e4fc304afb7c948aab6d9522ed697216f3c458392b7b5b80a41df8a5a366733b269aa3828d4453dfd770bd0bac817ec4165a8affa568ce57dd450c861 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-linux-musl.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-linux-musl.tar.gz/md5 deleted file mode 100644 index 8716698ae3a93..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-linux-musl.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -49dede722eb6ec52d5b59482fde11ee0 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-linux-musl.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-linux-musl.tar.gz/sha512 deleted file mode 100644 index b4683a7f9175f..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-linux-musl.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -ca0b9d6d43f16a2c55805e41c08851b2b54df68f031ca3acef9dfb5f4ceb43cce37f51f34092f6ae67a415fb580adc462a275dfc87f3e9f469df26a1d3ebf6f6 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-unknown-freebsd11.1.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-unknown-freebsd11.1.tar.gz/md5 deleted file mode 100644 index 46f24401d5c4a..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-unknown-freebsd11.1.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -72ae8dded9baf8ab0b0a179859734b83 diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-unknown-freebsd11.1.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-unknown-freebsd11.1.tar.gz/sha512 deleted file mode 100644 index 5378b97f206eb..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-unknown-freebsd11.1.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -26bb930cf161a573910b6c739c9ac3804a021337119037954006b4e8f6cd8eefba2c03988fb0ba4c38fa35a3398ca6ffdf10bc4d5fcce4b3d0f7e5ff41edfd6a diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-w64-mingw32.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-w64-mingw32.tar.gz/md5 deleted file mode 100644 index 2756dd96ccb2e..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-w64-mingw32.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -3c04d98d70369a378434c04b3478e93d diff --git a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-w64-mingw32.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-w64-mingw32.tar.gz/sha512 deleted file mode 100644 index c89874d091140..0000000000000 --- a/deps/checksums/LibUV.v2.0.0+1.29.1-julia-0.x86_64-w64-mingw32.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -b7abdaad577ec48a28735f1ff7e1092da1c2fd384e51fccb2eb7302a7dc5856cc5e7f95299a7b650bfd784f9ecfc6a311c181e1d42673fe27d69991dcace349b diff --git a/deps/checksums/LibUV.v2.0.0-12.aarch64-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.aarch64-linux-gnu.tar.gz/md5 new file mode 100644 index 0000000000000..3558f07e81ada --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.aarch64-linux-gnu.tar.gz/md5 @@ -0,0 +1 @@ +a5532dcc43089e5c3590903c647dd532 diff --git a/deps/checksums/LibUV.v2.0.0-12.aarch64-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.aarch64-linux-gnu.tar.gz/sha512 new file mode 100644 index 0000000000000..85e6fbd48babc --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.aarch64-linux-gnu.tar.gz/sha512 @@ -0,0 +1 @@ +36bb45035c0a52a7c826b2b6574cd220c91d46f2a71b4b023514a0f6ad9132c072bdb09e83127c36c96ad03eff63d04d231c6aef716eeb51f13d2eb3d5625e54 diff --git a/deps/checksums/LibUV.v2.0.0-12.aarch64-linux-musl.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.aarch64-linux-musl.tar.gz/md5 new file mode 100644 index 0000000000000..54919b94963a0 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.aarch64-linux-musl.tar.gz/md5 @@ -0,0 +1 @@ +3ebd2aaf5c2deedf89cb04f72e88f4e3 diff --git a/deps/checksums/LibUV.v2.0.0-12.aarch64-linux-musl.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.aarch64-linux-musl.tar.gz/sha512 new file mode 100644 index 0000000000000..41b7d5d68510c --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.aarch64-linux-musl.tar.gz/sha512 @@ -0,0 +1 @@ +3198642bee9b06b48c99102f4f4a24d7d8bfc7691d890a3596ecb433ea75c1b0d4d9ff55161735bbfae071f2e570ef16f6b14ba350a822bd451324069eee19aa diff --git a/deps/checksums/LibUV.v2.0.0-12.armv7l-linux-gnueabihf.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.armv7l-linux-gnueabihf.tar.gz/md5 new file mode 100644 index 0000000000000..6f2762be4fa3e --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.armv7l-linux-gnueabihf.tar.gz/md5 @@ -0,0 +1 @@ +2e5e802747e9101c4c70bd88d98f0aa7 diff --git a/deps/checksums/LibUV.v2.0.0-12.armv7l-linux-gnueabihf.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.armv7l-linux-gnueabihf.tar.gz/sha512 new file mode 100644 index 0000000000000..319ad86f2a5af --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.armv7l-linux-gnueabihf.tar.gz/sha512 @@ -0,0 +1 @@ +a21fb98e33cd901ec1bfc79163687f6cb6dac02406fb3ebd33c6d8b63309b66cbe850c9da608bbc1a61a967a4309dafc308431d40c6ba8beab837e345f526f5e diff --git a/deps/checksums/LibUV.v2.0.0-12.armv7l-linux-musleabihf.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.armv7l-linux-musleabihf.tar.gz/md5 new file mode 100644 index 0000000000000..39e3b35fed5a1 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.armv7l-linux-musleabihf.tar.gz/md5 @@ -0,0 +1 @@ +0661f12762e2f2bbc90bce17d90fdbcf diff --git a/deps/checksums/LibUV.v2.0.0-12.armv7l-linux-musleabihf.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.armv7l-linux-musleabihf.tar.gz/sha512 new file mode 100644 index 0000000000000..80cbbe08a44fe --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.armv7l-linux-musleabihf.tar.gz/sha512 @@ -0,0 +1 @@ +a0f40ca80578d3d9e6b94a7f11d292ecd52de90374645c8fa8607e28b9f421709fbbba941ee3e7c9fba88abfe87daf6d265dbe8fcaf0e2faf1b83d8b5ab8a9a7 diff --git a/deps/checksums/LibUV.v2.0.0-12.i686-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.i686-linux-gnu.tar.gz/md5 new file mode 100644 index 0000000000000..2fefd21cc76d9 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.i686-linux-gnu.tar.gz/md5 @@ -0,0 +1 @@ +5adc7739a9c5d4568870e2852c85485b diff --git a/deps/checksums/LibUV.v2.0.0-12.i686-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.i686-linux-gnu.tar.gz/sha512 new file mode 100644 index 0000000000000..3adf24ba48a80 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.i686-linux-gnu.tar.gz/sha512 @@ -0,0 +1 @@ +65caee96a5ce3de9e200e86590711ad9762af436e0b3ce5770f3b748456c9b3bcd4fe9872890956c752ccddf970d79121d993b458303c37683ecc4ccaa4a30e3 diff --git a/deps/checksums/LibUV.v2.0.0-12.i686-linux-musl.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.i686-linux-musl.tar.gz/md5 new file mode 100644 index 0000000000000..5e45c00b0ded2 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.i686-linux-musl.tar.gz/md5 @@ -0,0 +1 @@ +b833b0eaee3d4cf4eac990b97cf46418 diff --git a/deps/checksums/LibUV.v2.0.0-12.i686-linux-musl.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.i686-linux-musl.tar.gz/sha512 new file mode 100644 index 0000000000000..3278f87c1ac99 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.i686-linux-musl.tar.gz/sha512 @@ -0,0 +1 @@ +67b8f47bfc7b8f203f35f18f093b6551fc1b33a60ca9fe6ce048e611e9775342982777bf75cf7d160189b692a1807851b82f780233a725e06c6920cb6f336066 diff --git a/deps/checksums/LibUV.v2.0.0-12.i686-w64-mingw32.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.i686-w64-mingw32.tar.gz/md5 new file mode 100644 index 0000000000000..41ee14ed9af17 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.i686-w64-mingw32.tar.gz/md5 @@ -0,0 +1 @@ +402da2f9380368c661868bab09312a90 diff --git a/deps/checksums/LibUV.v2.0.0-12.i686-w64-mingw32.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.i686-w64-mingw32.tar.gz/sha512 new file mode 100644 index 0000000000000..13276bbd89b67 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.i686-w64-mingw32.tar.gz/sha512 @@ -0,0 +1 @@ +1676103aa045ed5f9522f4a39850fb088f05c196ed6275e58851e4feeb0b56b475b8642e1da312ef762d3115772c9b201d294a2fb9bfeffeeeb05d979d5735ef diff --git a/deps/checksums/LibUV.v2.0.0-12.powerpc64le-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.powerpc64le-linux-gnu.tar.gz/md5 new file mode 100644 index 0000000000000..cdf7d3292914a --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.powerpc64le-linux-gnu.tar.gz/md5 @@ -0,0 +1 @@ +e5f2412b1575dbecb1e2165445444796 diff --git a/deps/checksums/LibUV.v2.0.0-12.powerpc64le-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.powerpc64le-linux-gnu.tar.gz/sha512 new file mode 100644 index 0000000000000..bbe8a3e1acf4c --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.powerpc64le-linux-gnu.tar.gz/sha512 @@ -0,0 +1 @@ +4740676cfaf11b5f948080344a4e899301d18c6c2d67faa44db3c21c7b119cfe198490707579a7af3cec4c7e43f9eb5bb404a33a83099d574b06cfb508f237b0 diff --git a/deps/checksums/LibUV.v2.0.0-12.x86_64-apple-darwin14.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.x86_64-apple-darwin14.tar.gz/md5 new file mode 100644 index 0000000000000..69b32e2a020a8 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.x86_64-apple-darwin14.tar.gz/md5 @@ -0,0 +1 @@ +9305017a0d3d9e2283d3f49661cdba38 diff --git a/deps/checksums/LibUV.v2.0.0-12.x86_64-apple-darwin14.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.x86_64-apple-darwin14.tar.gz/sha512 new file mode 100644 index 0000000000000..4464bbb39e02b --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.x86_64-apple-darwin14.tar.gz/sha512 @@ -0,0 +1 @@ +742eb0479b6a94f5946b78a9238da0d5e2a32ca88930fbad6f503e3b05beb9a7c28ddc6cfaaa18f26695cc2b8bf3d159ce26a9ff3c0e54672b958573f10b2029 diff --git a/deps/checksums/LibUV.v2.0.0-12.x86_64-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.x86_64-linux-gnu.tar.gz/md5 new file mode 100644 index 0000000000000..f111de1015d85 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.x86_64-linux-gnu.tar.gz/md5 @@ -0,0 +1 @@ +41cf3481575ef92b093b507ef415f365 diff --git a/deps/checksums/LibUV.v2.0.0-12.x86_64-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.x86_64-linux-gnu.tar.gz/sha512 new file mode 100644 index 0000000000000..3599e11f4f8ac --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.x86_64-linux-gnu.tar.gz/sha512 @@ -0,0 +1 @@ +6ee11f400f0cf08c9bf29f0767a18f5395d6331744e52d1f892210a0cee62c93e36ee1b4221a016d66b50c8f55a70cb4dfc48b0f5167de1ed5ff15a6d3919ec2 diff --git a/deps/checksums/LibUV.v2.0.0-12.x86_64-linux-musl.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.x86_64-linux-musl.tar.gz/md5 new file mode 100644 index 0000000000000..5d4e2b43625cc --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.x86_64-linux-musl.tar.gz/md5 @@ -0,0 +1 @@ +ae3e40a41d55373183070605b41e58ff diff --git a/deps/checksums/LibUV.v2.0.0-12.x86_64-linux-musl.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.x86_64-linux-musl.tar.gz/sha512 new file mode 100644 index 0000000000000..fedae143f995e --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.x86_64-linux-musl.tar.gz/sha512 @@ -0,0 +1 @@ +b537f1dc04f64fe95f0c3ebc9a976b35ace6f4a0f5efe5f6f896d0e9a7f24c5fe2929336c629475caadbe1a2940a438c8f33842e32c4228fa0f120c1543b3995 diff --git a/deps/checksums/LibUV.v2.0.0-12.x86_64-unknown-freebsd11.1.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.x86_64-unknown-freebsd11.1.tar.gz/md5 new file mode 100644 index 0000000000000..17affd51698c9 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.x86_64-unknown-freebsd11.1.tar.gz/md5 @@ -0,0 +1 @@ +9558c33e427b2febd224267ad5febe8f diff --git a/deps/checksums/LibUV.v2.0.0-12.x86_64-unknown-freebsd11.1.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.x86_64-unknown-freebsd11.1.tar.gz/sha512 new file mode 100644 index 0000000000000..45226fb2c9a66 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.x86_64-unknown-freebsd11.1.tar.gz/sha512 @@ -0,0 +1 @@ +82b7aa28229c1927e1b62c11baf1fd20245dbda88c9f6a795d8a390a0a1edbbc6a2e651dc030dbbea9d11e10ffe582ec751619458f8e264f42d5bc000ba7aaaa diff --git a/deps/checksums/LibUV.v2.0.0-12.x86_64-w64-mingw32.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-12.x86_64-w64-mingw32.tar.gz/md5 new file mode 100644 index 0000000000000..b14d17e34368f --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.x86_64-w64-mingw32.tar.gz/md5 @@ -0,0 +1 @@ +ab387930bd7b71bb745a3aa1fda5e5f6 diff --git a/deps/checksums/LibUV.v2.0.0-12.x86_64-w64-mingw32.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-12.x86_64-w64-mingw32.tar.gz/sha512 new file mode 100644 index 0000000000000..8c35d79aac7b3 --- /dev/null +++ b/deps/checksums/LibUV.v2.0.0-12.x86_64-w64-mingw32.tar.gz/sha512 @@ -0,0 +1 @@ +a3893c4ec05e2c9b13caf41174a8db7ebfbb76dfe0be58c297d7b8e5e7953d7a036e3e7d37a8a8e541b57daacb1e5a902f8101a79266e866dd762bc24f8606de diff --git a/deps/checksums/LibUV.v2.0.0-9.aarch64-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.aarch64-linux-gnu.tar.gz/md5 deleted file mode 100644 index 2955de37e027f..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.aarch64-linux-gnu.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -2bd32030f78a45b6195999407f510aa5 diff --git a/deps/checksums/LibUV.v2.0.0-9.aarch64-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.aarch64-linux-gnu.tar.gz/sha512 deleted file mode 100644 index bef5e4d5d86a6..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.aarch64-linux-gnu.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -1ccc3ffa4f5473e74f4ce342423bddc268a6f70d9743aa2f11124163db27f3e56711e85555895e2ff506a025f9dfbfec686ff457e949aa45d86ffef5ec6c2037 diff --git a/deps/checksums/LibUV.v2.0.0-9.aarch64-linux-musl.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.aarch64-linux-musl.tar.gz/md5 deleted file mode 100644 index d7a9dce808eac..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.aarch64-linux-musl.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -c3b6f24843c4be53fa72d995a9296450 diff --git a/deps/checksums/LibUV.v2.0.0-9.aarch64-linux-musl.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.aarch64-linux-musl.tar.gz/sha512 deleted file mode 100644 index 713eb1f2f7812..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.aarch64-linux-musl.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -1659c0fa80c162411c284bcf85dfac2d6a699bf2b09bbfe7868ebade0c5e424e3bda416b345cc101f946dbbbd7fea677318d733ad12bf3bb6ba5555accbe8d45 diff --git a/deps/checksums/LibUV.v2.0.0-9.armv7l-linux-gnueabihf.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.armv7l-linux-gnueabihf.tar.gz/md5 deleted file mode 100644 index de164951f7fa3..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.armv7l-linux-gnueabihf.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -71b09d3e80394d283756348854a65017 diff --git a/deps/checksums/LibUV.v2.0.0-9.armv7l-linux-gnueabihf.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.armv7l-linux-gnueabihf.tar.gz/sha512 deleted file mode 100644 index 71ca326cc3196..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.armv7l-linux-gnueabihf.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -b360975c81b574a9ed673c106ab0a520eac42e594b48933a9e0526a1e00462da524b86a516d860945e04fe395ddba31acebe1ed8609aa65ccc7eea784ef0fb68 diff --git a/deps/checksums/LibUV.v2.0.0-9.armv7l-linux-musleabihf.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.armv7l-linux-musleabihf.tar.gz/md5 deleted file mode 100644 index 4c68299162b86..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.armv7l-linux-musleabihf.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -40bf3062a91d1c24122e71be0479ed94 diff --git a/deps/checksums/LibUV.v2.0.0-9.armv7l-linux-musleabihf.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.armv7l-linux-musleabihf.tar.gz/sha512 deleted file mode 100644 index 3da89c2a0c7ee..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.armv7l-linux-musleabihf.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -aa66897bd05f13daf682104b16329093f1234922c07d97e8134db0a1f499d17c8716704e4c8b21a00d148afa920f4fa1d2fd884a545c973b8a6734d7aada5fc6 diff --git a/deps/checksums/LibUV.v2.0.0-9.i686-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.i686-linux-gnu.tar.gz/md5 deleted file mode 100644 index b176f993aa66f..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.i686-linux-gnu.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -11477f56cffc636d48245ad623eea1c7 diff --git a/deps/checksums/LibUV.v2.0.0-9.i686-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.i686-linux-gnu.tar.gz/sha512 deleted file mode 100644 index 54542c43f6e91..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.i686-linux-gnu.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -da82d92db2ba2bf0c0b52928390bbf0ee5a8212883fd23a772c7735c7f427ca229229b75e8d7ff8964d42a2ab0614f1adfd156e0ef067b682931e0236fe7ef7b diff --git a/deps/checksums/LibUV.v2.0.0-9.i686-linux-musl.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.i686-linux-musl.tar.gz/md5 deleted file mode 100644 index 609ecb4e59ebd..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.i686-linux-musl.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -739be10627a93a419f0a9f193232931c diff --git a/deps/checksums/LibUV.v2.0.0-9.i686-linux-musl.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.i686-linux-musl.tar.gz/sha512 deleted file mode 100644 index c49cb60652102..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.i686-linux-musl.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -8abf48cf61ef7dd1a7d619bb062ba919d97d9d68f2e3d04dd7c4fdfacf01e5bcc864ecd6fe5e8782ba72822764883583d60c5164c96fe030a979d3436278f2bd diff --git a/deps/checksums/LibUV.v2.0.0-9.i686-w64-mingw32.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.i686-w64-mingw32.tar.gz/md5 deleted file mode 100644 index d0603d4804576..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.i686-w64-mingw32.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -3e27de72945d3eda858798b8faaaa2f9 diff --git a/deps/checksums/LibUV.v2.0.0-9.i686-w64-mingw32.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.i686-w64-mingw32.tar.gz/sha512 deleted file mode 100644 index 47c2c429b9634..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.i686-w64-mingw32.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -c0dd0c3dea0f9e2b7319f46733685a5ac1ecb6423886e669aeb14e1bc8aae4017ad994b8802dcc9f57cceaebf138f3f4328b97d2f0a64c317243ce3fe282dd52 diff --git a/deps/checksums/LibUV.v2.0.0-9.powerpc64le-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.powerpc64le-linux-gnu.tar.gz/md5 deleted file mode 100644 index e6a0484d73886..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.powerpc64le-linux-gnu.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -4231a4b2c1adb333f2ed603ad22b92c5 diff --git a/deps/checksums/LibUV.v2.0.0-9.powerpc64le-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.powerpc64le-linux-gnu.tar.gz/sha512 deleted file mode 100644 index 47c6e2b165c24..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.powerpc64le-linux-gnu.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -aef5f19dc6b1061f1ebd205e4663779498e0094435dc875e4ebca3dda67b0c11d5cb8eb88a20f9baaf82d59a1e83a5fedcdb7a6be9255d738aca1981656523bf diff --git a/deps/checksums/LibUV.v2.0.0-9.x86_64-apple-darwin14.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.x86_64-apple-darwin14.tar.gz/md5 deleted file mode 100644 index 949a55c685a58..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.x86_64-apple-darwin14.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -ac719bf85a3619e9d238d0efb1291ef0 diff --git a/deps/checksums/LibUV.v2.0.0-9.x86_64-apple-darwin14.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.x86_64-apple-darwin14.tar.gz/sha512 deleted file mode 100644 index 59b8e810d7aca..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.x86_64-apple-darwin14.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -753e640aeca665b6e35deed35860d8e3f3076b9c1cfae382d029827e138bc3ff65a90bbee2f828a8371ac15bca29469c1720b3c1b9c29f56d8b402790c7608e8 diff --git a/deps/checksums/LibUV.v2.0.0-9.x86_64-linux-gnu.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.x86_64-linux-gnu.tar.gz/md5 deleted file mode 100644 index a86d696b18338..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.x86_64-linux-gnu.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -446e2ffac64e64b24c47d17d03cdc3a3 diff --git a/deps/checksums/LibUV.v2.0.0-9.x86_64-linux-gnu.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.x86_64-linux-gnu.tar.gz/sha512 deleted file mode 100644 index aebd451c8e4d4..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.x86_64-linux-gnu.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -185ec913e17aa00b866c1c7f2b4645c80ab8ff067ee1c176cc33c75e6161450994a795feeb46ca0bcbb80bbc727de8a4532ddee5b658fdc9bbf10b1676a54026 diff --git a/deps/checksums/LibUV.v2.0.0-9.x86_64-linux-musl.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.x86_64-linux-musl.tar.gz/md5 deleted file mode 100644 index 2c40c1f925383..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.x86_64-linux-musl.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -0f7913302512ad1002ce77b2c619a4c8 diff --git a/deps/checksums/LibUV.v2.0.0-9.x86_64-linux-musl.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.x86_64-linux-musl.tar.gz/sha512 deleted file mode 100644 index 95213b7850a17..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.x86_64-linux-musl.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -c8cc6d5a27bc21f28a1cb7e75b40947e9870ace136e50040fefe067c30398f3a1655ce28fa43b28e09ff743d5f1bbce061dff2f47ab67ca81cd3d1e6f360317a diff --git a/deps/checksums/LibUV.v2.0.0-9.x86_64-unknown-freebsd11.1.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.x86_64-unknown-freebsd11.1.tar.gz/md5 deleted file mode 100644 index 20a55c8a252c3..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.x86_64-unknown-freebsd11.1.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -2fd4a5b814194d588186485b8cc5b73d diff --git a/deps/checksums/LibUV.v2.0.0-9.x86_64-unknown-freebsd11.1.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.x86_64-unknown-freebsd11.1.tar.gz/sha512 deleted file mode 100644 index 900f3d55128b7..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.x86_64-unknown-freebsd11.1.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -4b72488b5afa6dcc64763155489a4aad0f438266bdc039c03ed8835cf14f6159c5151751cdbc61cdfb54253bf458b2af4a7d3d8cb6ad70ffb154df0082c2149b diff --git a/deps/checksums/LibUV.v2.0.0-9.x86_64-w64-mingw32.tar.gz/md5 b/deps/checksums/LibUV.v2.0.0-9.x86_64-w64-mingw32.tar.gz/md5 deleted file mode 100644 index aec56e6f81632..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.x86_64-w64-mingw32.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -bab85c5eae8370f4058e06b6779c7dc7 diff --git a/deps/checksums/LibUV.v2.0.0-9.x86_64-w64-mingw32.tar.gz/sha512 b/deps/checksums/LibUV.v2.0.0-9.x86_64-w64-mingw32.tar.gz/sha512 deleted file mode 100644 index 9ba2115db44b0..0000000000000 --- a/deps/checksums/LibUV.v2.0.0-9.x86_64-w64-mingw32.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -78f42e12f99a9dddfec221c03e43fb76ac0ab664b6aec7f3f1a5f55fbc72c9cf03e2e7f99a4bb22b9a0e568cd448d52f5b91f22cf4aff6a3a3e5ddc6e5c963b7 diff --git a/deps/checksums/utf8proc-0890a538bf8238cded9be0c81171f57e43f2c755.tar.gz/md5 b/deps/checksums/utf8proc-0890a538bf8238cded9be0c81171f57e43f2c755.tar.gz/md5 deleted file mode 100644 index d72cedb24a2ea..0000000000000 --- a/deps/checksums/utf8proc-0890a538bf8238cded9be0c81171f57e43f2c755.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -2e1fd70d1580d6a950bd30118c3cd1df diff --git a/deps/checksums/utf8proc-0890a538bf8238cded9be0c81171f57e43f2c755.tar.gz/sha512 b/deps/checksums/utf8proc-0890a538bf8238cded9be0c81171f57e43f2c755.tar.gz/sha512 deleted file mode 100644 index 07849bb64c5fe..0000000000000 --- a/deps/checksums/utf8proc-0890a538bf8238cded9be0c81171f57e43f2c755.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -95d6dba2bbdfc5003f6d21fd02c926c7db9661895010041aacee55fa11dc2524bcffaa90965e2a9a8f2a9e49e93ec7572d6a4de6d5d9f9e075b787537864ea20 diff --git a/deps/checksums/utf8proc-3203baa7374d67132384e2830b2183c92351bffc.tar.gz/md5 b/deps/checksums/utf8proc-3203baa7374d67132384e2830b2183c92351bffc.tar.gz/md5 new file mode 100644 index 0000000000000..5a7de0e78d4ca --- /dev/null +++ b/deps/checksums/utf8proc-3203baa7374d67132384e2830b2183c92351bffc.tar.gz/md5 @@ -0,0 +1 @@ +e17d35ec76892e79e3ce45bb5e39e680 diff --git a/deps/checksums/utf8proc-3203baa7374d67132384e2830b2183c92351bffc.tar.gz/sha512 b/deps/checksums/utf8proc-3203baa7374d67132384e2830b2183c92351bffc.tar.gz/sha512 new file mode 100644 index 0000000000000..ca2db788e7609 --- /dev/null +++ b/deps/checksums/utf8proc-3203baa7374d67132384e2830b2183c92351bffc.tar.gz/sha512 @@ -0,0 +1 @@ +912d51e5c2daf80865e862daba2971e3a77b224d40179225d5908385d2f7f543a92cd2d9b6cecacfab185d8bd8f2732cad7a9d217f25f1e10a77083fda74f0b5 diff --git a/deps/libuv.version b/deps/libuv.version index b410875f69ac9..138b4a93d899e 100644 --- a/deps/libuv.version +++ b/deps/libuv.version @@ -1,2 +1,2 @@ LIBUV_BRANCH=julia-uv2-1.29.1 -LIBUV_SHA1=1fcc6d66f9df74189c74d3d390f02202bb7db953 +LIBUV_SHA1=31141558c6c15ba2d9062dd5a148b653f29c244a diff --git a/deps/utf8proc.version b/deps/utf8proc.version index 32a970d0a12d1..1d9926933568e 100644 --- a/deps/utf8proc.version +++ b/deps/utf8proc.version @@ -1,2 +1,2 @@ -UTF8PROC_BRANCH=v2.5.0 -UTF8PROC_SHA1=0890a538bf8238cded9be0c81171f57e43f2c755 +UTF8PROC_BRANCH=v2.6.1 +UTF8PROC_SHA1=3203baa7374d67132384e2830b2183c92351bffc diff --git a/src/ast.c b/src/ast.c index 068d082f14aa6..b812e824fe041 100644 --- a/src/ast.c +++ b/src/ast.c @@ -584,7 +584,7 @@ static jl_value_t *scm_to_julia_(fl_context_t *fl_ctx, value_t e, jl_module_t *m else if (sym == thunk_sym) { ex = scm_to_julia_(fl_ctx, car_(e), mod); assert(jl_is_code_info(ex)); - jl_linenumber_to_lineinfo((jl_code_info_t*)ex, (jl_value_t*)jl_symbol("top-level scope")); + jl_linenumber_to_lineinfo((jl_code_info_t*)ex, mod, (jl_value_t*)jl_symbol("top-level scope")); temp = (jl_value_t*)jl_exprn(sym, 1); jl_exprargset(temp, 0, ex); } diff --git a/src/builtins.c b/src/builtins.c index f0bdb41ddb2ad..a1a66890a6d51 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -102,6 +102,16 @@ static int NOINLINE compare_fields(jl_value_t *a, jl_value_t *b, jl_datatype_t * return 0; ft = (jl_datatype_t*)jl_nth_union_component((jl_value_t*)ft, asel); } + else if (ft->layout->first_ptr >= 0) { + // If the field is a inline immutable that can be can be undef + // we need to check to check for undef first since undef struct + // may have fields that are different but should still be treated as equal. + jl_value_t *ptra = ((jl_value_t**)ao)[ft->layout->first_ptr]; + jl_value_t *ptrb = ((jl_value_t**)bo)[ft->layout->first_ptr]; + if (ptra == NULL && ptrb == NULL) { + return 1; + } + } if (!ft->layout->haspadding) { if (!bits_equal(ao, bo, ft->size)) return 0; @@ -316,7 +326,16 @@ static uintptr_t immut_id_(jl_datatype_t *dt, jl_value_t *v, uintptr_t h) JL_NOT fieldtype = (jl_datatype_t*)jl_nth_union_component((jl_value_t*)fieldtype, sel); } assert(jl_is_datatype(fieldtype) && !fieldtype->abstract && !fieldtype->mutabl); - u = immut_id_(fieldtype, (jl_value_t*)vo, 0); + int32_t first_ptr = fieldtype->layout->first_ptr; + if (first_ptr >= 0 && ((jl_value_t**)vo)[first_ptr] == NULL) { + // If the field is a inline immutable that can be can be undef + // we need to check to check for undef first since undef struct + // may have fields that are different but should still be treated as equal. + u = 0; + } + else { + u = immut_id_(fieldtype, (jl_value_t*)vo, 0); + } } h = bitmix(h, u); } diff --git a/src/ccall.cpp b/src/ccall.cpp index 31cfedb9bd03c..6275d7ec4d3f3 100644 --- a/src/ccall.cpp +++ b/src/ccall.cpp @@ -1619,6 +1619,28 @@ static jl_cgval_t emit_ccall(jl_codectx_t &ctx, jl_value_t **args, size_t nargs) tbaa_decorate(tbaa_const, ctx.builder.CreateLoad(ptid)), retboxed, rt, unionall, static_rt); } + else if (is_libjulia_func(jl_gc_disable_finalizers_internal) +#ifdef NDEBUG + || is_libjulia_func(jl_gc_enable_finalizers_internal) +#endif + ) { + JL_GC_POP(); + Value *ptls_i32 = emit_bitcast(ctx, ctx.ptlsStates, T_pint32); + const int finh_offset = offsetof(jl_tls_states_t, finalizers_inhibited); + Value *pfinh = ctx.builder.CreateInBoundsGEP(ptls_i32, ConstantInt::get(T_size, finh_offset / 4)); + LoadInst *finh = ctx.builder.CreateAlignedLoad(pfinh, Align(sizeof(int32_t))); + Value *newval; + if (is_libjulia_func(jl_gc_disable_finalizers_internal)) { + newval = ctx.builder.CreateAdd(finh, ConstantInt::get(T_int32, 1)); + } + else { + newval = ctx.builder.CreateSelect(ctx.builder.CreateICmpEQ(finh, ConstantInt::get(T_int32, 0)), + ConstantInt::get(T_int32, 0), + ctx.builder.CreateSub(finh, ConstantInt::get(T_int32, 1))); + } + ctx.builder.CreateStore(newval, pfinh); + return ghostValue(jl_nothing_type); + } else if (is_libjulia_func(jl_get_current_task)) { assert(lrt == T_prjlvalue); assert(!isVa && !llvmcall && nccallargs == 0); diff --git a/src/cgutils.cpp b/src/cgutils.cpp index 099a0b433b78b..431527bdbbef2 100644 --- a/src/cgutils.cpp +++ b/src/cgutils.cpp @@ -833,6 +833,12 @@ static bool for_each_uniontype_small( return false; } +static bool is_uniontype_allunboxed(jl_value_t *typ) +{ + unsigned counter = 0; + return for_each_uniontype_small([&](unsigned, jl_datatype_t*) {}, typ, counter); +} + static Value *emit_typeof_boxed(jl_codectx_t &ctx, const jl_cgval_t &p); static unsigned get_box_tindex(jl_datatype_t *jt, jl_value_t *ut) @@ -915,14 +921,10 @@ static jl_cgval_t emit_typeof(jl_codectx_t &ctx, const jl_cgval_t &p) } if (p.TIndex) { Value *tindex = ctx.builder.CreateAnd(p.TIndex, ConstantInt::get(T_int8, 0x7f)); - unsigned counter = 0; - bool allunboxed = for_each_uniontype_small( - [&](unsigned idx, jl_datatype_t *jt) { }, - p.typ, - counter); + bool allunboxed = is_uniontype_allunboxed(p.typ); Value *datatype_or_p = (imaging_mode ? Constant::getNullValue(T_ppjlvalue) : Constant::getNullValue(T_prjlvalue)); - counter = 0; + unsigned counter = 0; for_each_uniontype_small( [&](unsigned idx, jl_datatype_t *jt) { Value *cmp = ctx.builder.CreateICmpEQ(tindex, ConstantInt::get(T_int8, idx)); @@ -1145,10 +1147,20 @@ static void raise_exception_unless(jl_codectx_t &ctx, Value *cond, Value *exc) raise_exception(ctx, exc, passBB); } -static void null_pointer_check(jl_codectx_t &ctx, Value *v) +static Value *null_pointer_cmp(jl_codectx_t &ctx, Value *v) { - raise_exception_unless(ctx, - ctx.builder.CreateICmpNE(v, Constant::getNullValue(v->getType())), + return ctx.builder.CreateICmpNE(v, Constant::getNullValue(v->getType())); +} + +// If `nullcheck` is not NULL and a pointer NULL check is necessary +// store the pointer to be checked in `*nullcheck` instead of checking it +static void null_pointer_check(jl_codectx_t &ctx, Value *v, Value **nullcheck = nullptr) +{ + if (nullcheck) { + *nullcheck = v; + return; + } + raise_exception_unless(ctx, null_pointer_cmp(ctx, v), literal_pointer_val(ctx, jl_undefref_exception)); } @@ -1382,9 +1394,12 @@ Value *extract_first_ptr(jl_codectx_t &ctx, Value *V) return ctx.builder.CreateExtractValue(V, path); } +// If `nullcheck` is not NULL and a pointer NULL check is necessary +// store the pointer to be checked in `*nullcheck` instead of checking it static jl_cgval_t typed_load(jl_codectx_t &ctx, Value *ptr, Value *idx_0based, jl_value_t *jltype, MDNode *tbaa, MDNode *aliasscope, - bool maybe_null_if_boxed = true, unsigned alignment = 0) + bool maybe_null_if_boxed = true, unsigned alignment = 0, + Value **nullcheck = nullptr) { bool isboxed; Type *elty = julia_type_to_llvm(ctx, jltype, &isboxed); @@ -1416,7 +1431,7 @@ static jl_cgval_t typed_load(jl_codectx_t &ctx, Value *ptr, Value *idx_0based, j if (maybe_null_if_boxed) { Value *first_ptr = isboxed ? load : extract_first_ptr(ctx, load); if (first_ptr) - null_pointer_check(ctx, first_ptr); + null_pointer_check(ctx, first_ptr, nullcheck); } //} if (jltype == (jl_value_t*)jl_bool_type) { // "freeze" undef memory to a valid value @@ -1575,7 +1590,9 @@ static void emit_memcpy(jl_codectx_t &ctx, Value *dst, MDNode *tbaa_dst, const j -static jl_cgval_t emit_getfield_knownidx(jl_codectx_t &ctx, const jl_cgval_t &strct, unsigned idx, jl_datatype_t *jt); +static jl_cgval_t emit_getfield_knownidx(jl_codectx_t &ctx, const jl_cgval_t &strct, + unsigned idx, jl_datatype_t *jt, + Value **nullcheck = nullptr); static bool emit_getfield_unknownidx(jl_codectx_t &ctx, jl_cgval_t *ret, jl_cgval_t strct, @@ -1706,7 +1723,11 @@ static bool emit_getfield_unknownidx(jl_codectx_t &ctx, return false; } -static jl_cgval_t emit_getfield_knownidx(jl_codectx_t &ctx, const jl_cgval_t &strct, unsigned idx, jl_datatype_t *jt) +// If `nullcheck` is not NULL and a pointer NULL check is necessary +// store the pointer to be checked in `*nullcheck` instead of checking it +static jl_cgval_t emit_getfield_knownidx(jl_codectx_t &ctx, const jl_cgval_t &strct, + unsigned idx, jl_datatype_t *jt, + Value **nullcheck) { jl_value_t *jfty = jl_field_type(jt, idx); if (jfty == jl_bottom_type) { @@ -1751,7 +1772,7 @@ static jl_cgval_t emit_getfield_knownidx(jl_codectx_t &ctx, const jl_cgval_t &st maybe_null, jl_field_type(jt, idx)); Value *fldv = tbaa_decorate(strct.tbaa, Load); if (maybe_null) - null_pointer_check(ctx, fldv); + null_pointer_check(ctx, fldv, nullcheck); return mark_julia_type(ctx, fldv, true, jfty); } else if (jl_is_uniontype(jfty)) { @@ -1788,7 +1809,7 @@ static jl_cgval_t emit_getfield_knownidx(jl_codectx_t &ctx, const jl_cgval_t &st return mark_julia_slot(addr, jfty, NULL, strct.tbaa); } unsigned align = jl_field_align(jt, idx); - return typed_load(ctx, addr, NULL, jfty, strct.tbaa, nullptr, maybe_null, align); + return typed_load(ctx, addr, NULL, jfty, strct.tbaa, nullptr, maybe_null, align, nullcheck); } else if (isa(strct.V)) { return jl_cgval_t(); @@ -1850,7 +1871,7 @@ static jl_cgval_t emit_getfield_knownidx(jl_codectx_t &ctx, const jl_cgval_t &st if (maybe_null) { Value *first_ptr = jl_field_isptr(jt, idx) ? fldv : extract_first_ptr(ctx, fldv); if (first_ptr) - null_pointer_check(ctx, first_ptr); + null_pointer_check(ctx, first_ptr, nullcheck); } return mark_julia_type(ctx, fldv, jl_field_isptr(jt, idx), jfty); } diff --git a/src/codegen.cpp b/src/codegen.cpp index 3427fdfd352fc..56bbb69525d84 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -1729,7 +1729,51 @@ static jl_cgval_t emit_getfield(jl_codectx_t &ctx, const jl_cgval_t &strct, jl_s return mark_julia_type(ctx, result, true, jl_any_type); } -static Value *emit_box_compare(jl_codectx_t &ctx, const jl_cgval_t &arg1, const jl_cgval_t &arg2) +template +static Value *emit_guarded_test(jl_codectx_t &ctx, Value *ifnot, bool defval, Func &&func) +{ + BasicBlock *currBB = ctx.builder.GetInsertBlock(); + BasicBlock *passBB = BasicBlock::Create(jl_LLVMContext, "guard_pass", ctx.f); + BasicBlock *exitBB = BasicBlock::Create(jl_LLVMContext, "guard_exit", ctx.f); + ctx.builder.CreateCondBr(ifnot, passBB, exitBB); + ctx.builder.SetInsertPoint(passBB); + auto res = func(); + passBB = ctx.builder.GetInsertBlock(); + ctx.builder.CreateBr(exitBB); + ctx.builder.SetInsertPoint(exitBB); + PHINode *phi = ctx.builder.CreatePHI(T_int1, 2); + phi->addIncoming(ConstantInt::get(T_int1, defval), currBB); + phi->addIncoming(res, passBB); + return phi; +} + +template +static Value *emit_nullcheck_guard(jl_codectx_t &ctx, Value *nullcheck, Func &&func) +{ + if (!nullcheck) + return func(); + return emit_guarded_test(ctx, null_pointer_cmp(ctx, nullcheck), false, func); +} + +template +static Value *emit_nullcheck_guard2(jl_codectx_t &ctx, Value *nullcheck1, + Value *nullcheck2, Func &&func) +{ + if (!nullcheck1) + return emit_nullcheck_guard(ctx, nullcheck2, func); + if (!nullcheck2) + return emit_nullcheck_guard(ctx, nullcheck1, func); + nullcheck1 = null_pointer_cmp(ctx, nullcheck1); + nullcheck2 = null_pointer_cmp(ctx, nullcheck2); + // If both are NULL, return true. + return emit_guarded_test(ctx, ctx.builder.CreateOr(nullcheck1, nullcheck2), true, [&] { + return emit_guarded_test(ctx, ctx.builder.CreateAnd(nullcheck1, nullcheck2), + false, func); + }); +} + +static Value *emit_box_compare(jl_codectx_t &ctx, const jl_cgval_t &arg1, const jl_cgval_t &arg2, + Value *nullcheck1, Value *nullcheck2) { if (jl_pointer_egal(arg1.typ) || jl_pointer_egal(arg2.typ)) { Value *varg1 = arg1.constant ? literal_pointer_val(ctx, arg1.constant) : arg1.V; @@ -1746,16 +1790,21 @@ static Value *emit_box_compare(jl_codectx_t &ctx, const jl_cgval_t &arg1, const emit_bitcast(ctx, varg2, T_pint8)); } - Value *varg1 = mark_callee_rooted(boxed(ctx, arg1)); - Value *varg2 = mark_callee_rooted(boxed(ctx, arg2)); - return ctx.builder.CreateTrunc(ctx.builder.CreateCall(prepare_call(jlegal_func), {varg1, varg2}), T_int1); + return emit_nullcheck_guard2(ctx, nullcheck1, nullcheck2, [&] { + Value *varg1 = mark_callee_rooted(boxed(ctx, arg1)); + Value *varg2 = mark_callee_rooted(boxed(ctx, arg2)); + return ctx.builder.CreateTrunc(ctx.builder.CreateCall(prepare_call(jlegal_func), + {varg1, varg2}), T_int1); + }); } static Value *emit_bits_compare(jl_codectx_t &ctx, jl_cgval_t arg1, jl_cgval_t arg2); +static Value *emit_f_is(jl_codectx_t &ctx, const jl_cgval_t &arg1, const jl_cgval_t &arg2, + Value *nullcheck1 = nullptr, Value *nullcheck2 = nullptr); static Value *emit_bitsunion_compare(jl_codectx_t &ctx, const jl_cgval_t &arg1, const jl_cgval_t &arg2) { - assert(arg1.typ == arg2.typ && arg1.TIndex && arg2.TIndex && jl_is_uniontype(arg1.typ) && "unimplemented"); + assert(jl_egal(arg1.typ, arg2.typ) && arg1.TIndex && arg2.TIndex && jl_is_uniontype(arg1.typ) && "unimplemented"); Value *tindex = arg1.TIndex; BasicBlock *defaultBB = BasicBlock::Create(jl_LLVMContext, "unionbits_is_boxed", ctx.f); SwitchInst *switchInst = ctx.builder.CreateSwitch(tindex, defaultBB); @@ -1763,7 +1812,7 @@ static Value *emit_bitsunion_compare(jl_codectx_t &ctx, const jl_cgval_t &arg1, ctx.builder.SetInsertPoint(postBB); PHINode *phi = ctx.builder.CreatePHI(T_int1, 2); unsigned counter = 0; - for_each_uniontype_small( + bool allunboxed = for_each_uniontype_small( [&](unsigned idx, jl_datatype_t *jt) { BasicBlock *tempBB = BasicBlock::Create(jl_LLVMContext, "unionbits_is", ctx.f); ctx.builder.SetInsertPoint(tempBB); @@ -1777,6 +1826,7 @@ static Value *emit_bitsunion_compare(jl_codectx_t &ctx, const jl_cgval_t &arg1, }, arg1.typ, counter); + assert(allunboxed); (void)allunboxed; ctx.builder.SetInsertPoint(defaultBB); Function *trap_func = Intrinsic::getDeclaration( ctx.f->getParent(), @@ -1824,13 +1874,9 @@ static Value *emit_bits_compare(jl_codectx_t &ctx, jl_cgval_t arg1, jl_cgval_t a if (at->isAggregateType()) { // Struct or Array jl_datatype_t *sty = (jl_datatype_t*)arg1.typ; size_t sz = jl_datatype_size(sty); - Value *varg1 = arg1.ispointer() ? maybe_decay_tracked(data_pointer(ctx, arg1)) : arg1.V; - Value *varg2 = arg2.ispointer() ? maybe_decay_tracked(data_pointer(ctx, arg2)) : arg2.V; if (sz > 512 && !sty->layout->haspadding) { - if (!arg1.ispointer()) - varg1 = value_to_pointer(ctx, arg1).V; - if (!arg2.ispointer()) - varg2 = value_to_pointer(ctx, arg2).V; + Value *varg1 = arg1.ispointer() ? maybe_decay_tracked(data_pointer(ctx, arg1)) : arg1.V; + Value *varg2 = arg2.ispointer() ? maybe_decay_tracked(data_pointer(ctx, arg2)) : arg2.V; varg1 = emit_pointer_from_objref(ctx, varg1); varg2 = emit_pointer_from_objref(ctx, varg2); Value *gc_uses[2]; @@ -1848,68 +1894,26 @@ static Value *emit_bits_compare(jl_codectx_t &ctx, jl_cgval_t arg1, jl_cgval_t a return ctx.builder.CreateICmpEQ(answer, ConstantInt::get(T_int32, 0)); } else { - Type *atp = at->getPointerTo(); - if (arg1.ispointer()) - varg1 = maybe_bitcast(ctx, varg1, atp); - if (arg2.ispointer()) - varg2 = maybe_bitcast(ctx, varg2, atp); jl_svec_t *types = sty->types; Value *answer = ConstantInt::get(T_int1, 1); for (size_t i = 0, l = jl_svec_len(types); i < l; i++) { - // TODO: should we replace this with `subAns = emit_f_is(emit_getfield_knownidx(ctx, arg1, i, arg1.typ), emit_getfield_knownidx(ctx, arg2, i, arg2.typ))` - // or is there any value in all this extra effort?? jl_value_t *fldty = jl_svecref(types, i); if (type_is_ghost(julia_type_to_llvm(ctx, fldty))) continue; - unsigned byte_offset = jl_field_offset(sty, i); - Value *subAns, *fld1, *fld2; - unsigned llvm_idx = (i > 0 && isa(at)) ? convert_struct_offset(ctx, at, byte_offset) : i; - if (arg1.ispointer()) - fld1 = ctx.builder.CreateConstInBoundsGEP2_32(at, varg1, 0, llvm_idx); - else - fld1 = ctx.builder.CreateExtractValue(varg1, llvm_idx); - if (arg2.ispointer()) - fld2 = ctx.builder.CreateConstInBoundsGEP2_32(at, varg2, 0, llvm_idx); - else - fld2 = ctx.builder.CreateExtractValue(varg2, llvm_idx); - if (jl_field_isptr(sty, i)) { - if (arg1.ispointer()) - fld1 = ctx.builder.CreateLoad(T_prjlvalue, fld1); - if (arg2.ispointer()) - fld2 = ctx.builder.CreateLoad(T_prjlvalue, fld2); - subAns = emit_box_compare(ctx, - mark_julia_type(ctx, fld1, true, fldty), - mark_julia_type(ctx, fld2, true, fldty)); - } - else if (jl_is_uniontype(fldty)) { - unsigned tindex_offset = byte_offset + jl_field_size(sty, i) - 1; - jl_cgval_t fld1_info; - jl_cgval_t fld2_info; - if (arg1.ispointer()) { - Value *tindex1 = ctx.builder.CreateNUWAdd(ConstantInt::get(T_int8, 1), - ctx.builder.CreateLoad(T_int8, emit_struct_gep(ctx, at, varg1, tindex_offset))); - fld1_info = mark_julia_slot(fld1, fldty, tindex1, arg1.tbaa); - } - else { - fld1_info = emit_getfield_knownidx(ctx, arg1, i, sty); - } - if (arg2.ispointer()) { - Value *tindex2 = ctx.builder.CreateNUWAdd(ConstantInt::get(T_int8, 1), - ctx.builder.CreateLoad(T_int8, emit_struct_gep(ctx, at, varg2, tindex_offset))); - fld2_info = mark_julia_slot(fld2, fldty, tindex2, arg2.tbaa); - } - else { - fld2_info = emit_getfield_knownidx(ctx, arg2, i, sty); - } - subAns = emit_bitsunion_compare(ctx, fld1_info, fld2_info); + Value *nullcheck1 = nullptr; + Value *nullcheck2 = nullptr; + auto fld1 = emit_getfield_knownidx(ctx, arg1, i, sty, &nullcheck1); + auto fld2 = emit_getfield_knownidx(ctx, arg2, i, sty, &nullcheck2); + Value *fld_answer; + if (jl_field_isptr(sty, i) && jl_is_concrete_immutable(fldty)) { + // concrete immutables that are !isinlinealloc might be reference cycles + // issue #37872 + fld_answer = emit_box_compare(ctx, fld1, fld2, nullcheck1, nullcheck2); } else { - assert(jl_is_concrete_type(fldty)); - jl_cgval_t fld1_info = arg1.ispointer() ? mark_julia_slot(fld1, fldty, NULL, arg1.tbaa) : mark_julia_type(ctx, fld1, false, fldty); - jl_cgval_t fld2_info = arg2.ispointer() ? mark_julia_slot(fld2, fldty, NULL, arg2.tbaa) : mark_julia_type(ctx, fld2, false, fldty); - subAns = emit_bits_compare(ctx, fld1_info, fld2_info); + fld_answer = emit_f_is(ctx, fld1, fld2, nullcheck1, nullcheck2); } - answer = ctx.builder.CreateAnd(answer, subAns); + answer = ctx.builder.CreateAnd(answer, fld_answer); } return answer; } @@ -1919,7 +1923,12 @@ static Value *emit_bits_compare(jl_codectx_t &ctx, jl_cgval_t arg1, jl_cgval_t a } // emit code for is (===). -static Value *emit_f_is(jl_codectx_t &ctx, const jl_cgval_t &arg1, const jl_cgval_t &arg2) +// If either `nullcheck1` or `nullcheck2` are non-NULL, they are pointer values +// representing the undef-ness of `arg1` and `arg2`. +// This can only happen when comparing two fields of the same time and the result should be +// true if both are NULL +static Value *emit_f_is(jl_codectx_t &ctx, const jl_cgval_t &arg1, const jl_cgval_t &arg2, + Value *nullcheck1, Value *nullcheck2) { jl_value_t *rt1 = arg1.typ; jl_value_t *rt2 = arg2.typ; @@ -1931,9 +1940,13 @@ static Value *emit_f_is(jl_codectx_t &ctx, const jl_cgval_t &arg1, const jl_cgva if (arg1.isghost || arg2.isghost) { // comparing to a singleton object if (arg1.TIndex) - return emit_isa(ctx, arg1, rt2, NULL).first; // rt2 is a singleton type + return emit_nullcheck_guard(ctx, nullcheck1, [&] { + return emit_isa(ctx, arg1, rt2, NULL).first; // rt2 is a singleton type + }); if (arg2.TIndex) - return emit_isa(ctx, arg2, rt1, NULL).first; // rt1 is a singleton type + return emit_nullcheck_guard(ctx, nullcheck2, [&] { + return emit_isa(ctx, arg2, rt1, NULL).first; // rt1 is a singleton type + }); // rooting these values isn't needed since we won't load this pointer // and we know at least one of them is a unique Singleton // which is already enough to ensure pointer uniqueness for this test @@ -1949,31 +1962,38 @@ static Value *emit_f_is(jl_codectx_t &ctx, const jl_cgval_t &arg1, const jl_cgva bool justbits1 = jl_is_concrete_immutable(rt1); bool justbits2 = jl_is_concrete_immutable(rt2); if (justbits1 || justbits2) { // whether this type is unique'd by value - jl_value_t *typ = justbits1 ? rt1 : rt2; - if (rt1 == rt2) - return emit_bits_compare(ctx, arg1, arg2); - Value *same_type = (typ == rt2) ? emit_isa(ctx, arg1, typ, NULL).first : emit_isa(ctx, arg2, typ, NULL).first; - BasicBlock *currBB = ctx.builder.GetInsertBlock(); - BasicBlock *isaBB = BasicBlock::Create(jl_LLVMContext, "is", ctx.f); - BasicBlock *postBB = BasicBlock::Create(jl_LLVMContext, "post_is", ctx.f); - ctx.builder.CreateCondBr(same_type, isaBB, postBB); - ctx.builder.SetInsertPoint(isaBB); - Value *bitcmp = emit_bits_compare(ctx, - jl_cgval_t(arg1, typ, NULL), - jl_cgval_t(arg2, typ, NULL)); - isaBB = ctx.builder.GetInsertBlock(); // might have changed - ctx.builder.CreateBr(postBB); - ctx.builder.SetInsertPoint(postBB); - PHINode *cmp = ctx.builder.CreatePHI(T_int1, 2); - cmp->addIncoming(ConstantInt::get(T_int1, 0), currBB); - cmp->addIncoming(bitcmp, isaBB); - return cmp; - } - - // if (arg1.tindex || arg2.tindex) - // TODO: handle with emit_bitsunion_compare - - return emit_box_compare(ctx, arg1, arg2); + return emit_nullcheck_guard2(ctx, nullcheck1, nullcheck2, [&] () -> Value* { + jl_value_t *typ = justbits1 ? rt1 : rt2; + if (rt1 == rt2) + return emit_bits_compare(ctx, arg1, arg2); + Value *same_type = (typ == rt2) ? emit_isa(ctx, arg1, typ, NULL).first : + emit_isa(ctx, arg2, typ, NULL).first; + BasicBlock *currBB = ctx.builder.GetInsertBlock(); + BasicBlock *isaBB = BasicBlock::Create(jl_LLVMContext, "is", ctx.f); + BasicBlock *postBB = BasicBlock::Create(jl_LLVMContext, "post_is", ctx.f); + ctx.builder.CreateCondBr(same_type, isaBB, postBB); + ctx.builder.SetInsertPoint(isaBB); + Value *bitcmp = emit_bits_compare(ctx, jl_cgval_t(arg1, typ, NULL), + jl_cgval_t(arg2, typ, NULL)); + isaBB = ctx.builder.GetInsertBlock(); // might have changed + ctx.builder.CreateBr(postBB); + ctx.builder.SetInsertPoint(postBB); + PHINode *cmp = ctx.builder.CreatePHI(T_int1, 2); + cmp->addIncoming(ConstantInt::get(T_int1, 0), currBB); + cmp->addIncoming(bitcmp, isaBB); + return cmp; + }); + } + + // TODO: handle the case where arg1.typ != arg2.typ, or when one of these isn't union, + // or when the union can be pointer + if (arg1.TIndex && arg2.TIndex && jl_egal(arg1.typ, arg2.typ) && + jl_is_uniontype(arg1.typ) && is_uniontype_allunboxed(arg1.typ)) + return emit_nullcheck_guard2(ctx, nullcheck1, nullcheck2, [&] { + return emit_bitsunion_compare(ctx, arg1, arg2); + }); + + return emit_box_compare(ctx, arg1, arg2, nullcheck1, nullcheck2); } static bool emit_builtin_call(jl_codectx_t &ctx, jl_cgval_t *ret, jl_value_t *f, @@ -3933,7 +3953,7 @@ static Function *emit_tojlinvoke(jl_code_instance_t *codeinst, Module *M, jl_cod ctx.builder.SetInsertPoint(b0); FunctionCallee theFunc; Value *theFarg; - if (codeinst->invoke != NULL) { + if (params.cache && codeinst->invoke != NULL) { StringRef theFptrName = jl_ExecutionEngine->getFunctionAtAddress((uintptr_t)codeinst->invoke, codeinst); theFunc = M->getOrInsertFunction(theFptrName, jlinvoke_func->getFunctionType()); theFarg = literal_pointer_val(ctx, (jl_value_t*)codeinst); @@ -5080,8 +5100,8 @@ static std::pair, jl_llvm_functions_t> } else if (jl_array_len(src->linetable) > 0) { jl_value_t *locinfo = jl_array_ptr_ref(src->linetable, 0); - ctx.file = jl_symbol_name((jl_sym_t*)jl_fieldref_noalloc(locinfo, 1)); - toplineno = jl_unbox_long(jl_fieldref(locinfo, 2)); + ctx.file = jl_symbol_name((jl_sym_t*)jl_fieldref_noalloc(locinfo, 2)); + toplineno = jl_unbox_long(jl_fieldref(locinfo, 3)); } if (ctx.file.empty()) ctx.file = ""; @@ -5685,39 +5705,44 @@ static std::pair, jl_llvm_functions_t> ssize_t line; bool is_user_code; unsigned inlined_at; + bool operator ==(const DebugLineTable &other) const { + return other.loc == loc && other.file == file && other.line == line && other.is_user_code == is_user_code && other.inlined_at == inlined_at; + } }; std::vector linetable; - { + { // populate the linetable data format + assert(jl_is_array(src->linetable)); size_t nlocs = jl_array_len(src->linetable); std::map, DISubprogram*> subprograms; linetable.resize(nlocs + 1); + DebugLineTable &topinfo = linetable[0]; + topinfo.file = ctx.file; + topinfo.line = toplineno; + topinfo.is_user_code = mod_is_user_mod; + topinfo.inlined_at = 0; + topinfo.loc = topdebugloc; for (size_t i = 0; i < nlocs; i++) { // LineInfoNode(mod::Module, method::Any, file::Symbol, line::Int, inlined_at::Int) jl_value_t *locinfo = jl_array_ptr_ref(src->linetable, i); DebugLineTable &info = linetable[i + 1]; assert(jl_typeis(locinfo, jl_lineinfonode_type)); - jl_value_t *method = jl_fieldref_noalloc(locinfo, 0); - if (jl_is_method_instance(method)) - method = ((jl_method_instance_t*)method)->def.value; - jl_sym_t *filesym = (jl_sym_t*)jl_fieldref_noalloc(locinfo, 1); - info.line = jl_unbox_long(jl_fieldref(locinfo, 2)); - info.inlined_at = jl_unbox_long(jl_fieldref(locinfo, 3)); + jl_module_t *module = (jl_module_t*)jl_fieldref_noalloc(locinfo, 0); + jl_value_t *method = jl_fieldref_noalloc(locinfo, 1); + jl_sym_t *filesym = (jl_sym_t*)jl_fieldref_noalloc(locinfo, 2); + info.line = jl_unbox_long(jl_fieldref(locinfo, 3)); + info.inlined_at = jl_unbox_long(jl_fieldref(locinfo, 4)); assert(info.inlined_at <= i); - if (jl_is_method(method)) { - jl_module_t *module = ((jl_method_t*)method)->module; - if (module == ctx.module) - info.is_user_code = mod_is_user_mod; - else - info.is_user_code = in_user_mod(module); - } - else { - info.is_user_code = (info.inlined_at == 0) ? mod_is_user_mod : linetable.at(info.inlined_at).is_user_code; - } + if (module == ctx.module) + info.is_user_code = mod_is_user_mod; + else + info.is_user_code = in_user_mod(module); info.file = jl_symbol_name(filesym); if (info.file.empty()) info.file = ""; if (ctx.debug_enabled) { StringRef fname; + if (jl_is_method_instance(method)) + method = ((jl_method_instance_t*)method)->def.value; if (jl_is_method(method)) method = (jl_value_t*)((jl_method_t*)method)->name; if (jl_is_symbol(method)) @@ -5931,6 +5956,13 @@ static std::pair, jl_llvm_functions_t> Value *sync_bytes = nullptr; if (do_malloc_log(true)) sync_bytes = ctx.builder.CreateCall(prepare_call(diff_gc_total_bytes_func), {}); + { // coverage for the function definition line number + const auto &topinfo = linetable.at(0); + if (topinfo == linetable.at(1)) + current_lineinfo.push_back(1); + if (do_coverage(topinfo.is_user_code)) + coverageVisitLine(ctx, topinfo.file, topinfo.line); + } find_next_stmt(0); while (cursor != -1) { diff --git a/src/datatype.c b/src/datatype.c index 6f9358a2016ec..9bb5f78e2a1ee 100644 --- a/src/datatype.c +++ b/src/datatype.c @@ -359,7 +359,7 @@ void jl_compute_field_offsets(jl_datatype_t *st) st->layout = &opaque_byte_layout; return; } - else if (st == jl_simplevector_type || st->name == jl_array_typename) { + else if (st == jl_simplevector_type || st == jl_module_type || st->name == jl_array_typename) { static const jl_datatype_layout_t opaque_ptr_layout = {0, 1, -1, sizeof(void*), 0, 0}; st->layout = &opaque_ptr_layout; return; @@ -439,11 +439,18 @@ void jl_compute_field_offsets(jl_datatype_t *st) zeroinit = 1; } else { + uint32_t fld_npointers = ((jl_datatype_t*)fld)->layout->npointers; if (((jl_datatype_t*)fld)->layout->haspadding) haspadding = 1; + if (i >= st->ninitialized && fld_npointers && + fld_npointers * sizeof(void*) != fsz) { + // field may be undef (may be uninitialized and contains pointer), + // and contains non-pointer fields of non-zero sizes. + haspadding = 1; + } if (!zeroinit) zeroinit = ((jl_datatype_t*)fld)->zeroinit; - npointers += ((jl_datatype_t*)fld)->layout->npointers; + npointers += fld_npointers; } } else { diff --git a/src/gc.c b/src/gc.c index 530e8a95ee2a4..12b8bd3cb1c4e 100644 --- a/src/gc.c +++ b/src/gc.c @@ -181,6 +181,7 @@ bigval_t *big_objects_marked = NULL; // `to_finalize` should not have tagged pointers. arraylist_t finalizer_list_marked; arraylist_t to_finalize; +int jl_gc_have_pending_finalizers = 0; NOINLINE uintptr_t gc_get_stack_ptr(void) { @@ -262,6 +263,7 @@ static void schedule_finalization(void *o, void *f) JL_NOTSAFEPOINT { arraylist_push(&to_finalize, o); arraylist_push(&to_finalize, f); + jl_gc_have_pending_finalizers = 1; } static void run_finalizer(jl_ptls_t ptls, jl_value_t *o, jl_value_t *ff) @@ -386,12 +388,24 @@ static void run_finalizers(jl_ptls_t ptls) if (to_finalize.items == to_finalize._space) { copied_list.items = copied_list._space; } + jl_gc_have_pending_finalizers = 0; arraylist_new(&to_finalize, 0); // This releases the finalizers lock. jl_gc_run_finalizers_in_list(ptls, &copied_list); arraylist_free(&copied_list); } +JL_DLLEXPORT void jl_gc_run_pending_finalizers(jl_ptls_t ptls) +{ + if (ptls == NULL) + ptls = jl_get_ptls_states(); + if (!ptls->in_finalizer && ptls->current_task->locks.len == 0 && ptls->finalizers_inhibited == 0) { + ptls->in_finalizer = 1; + run_finalizers(ptls); + ptls->in_finalizer = 0; + } +} + JL_DLLEXPORT int jl_gc_get_finalizers_inhibited(jl_ptls_t ptls) { if (ptls == NULL) @@ -399,6 +413,22 @@ JL_DLLEXPORT int jl_gc_get_finalizers_inhibited(jl_ptls_t ptls) return ptls->finalizers_inhibited; } +JL_DLLEXPORT void jl_gc_disable_finalizers_internal(void) +{ + jl_ptls_t ptls = jl_get_ptls_states(); + ptls->finalizers_inhibited++; +} + +JL_DLLEXPORT void jl_gc_enable_finalizers_internal(void) +{ + jl_ptls_t ptls = jl_get_ptls_states(); +#ifdef NDEBUG + ptls->finalizers_inhibited--; +#else + jl_gc_enable_finalizers(ptls, 1); +#endif +} + JL_DLLEXPORT void jl_gc_enable_finalizers(jl_ptls_t ptls, int on) { if (ptls == NULL) @@ -421,10 +451,8 @@ JL_DLLEXPORT void jl_gc_enable_finalizers(jl_ptls_t ptls, int on) return; } ptls->finalizers_inhibited = new_val; - if (!new_val && old_val && !ptls->in_finalizer && ptls->current_task->locks.len == 0) { - ptls->in_finalizer = 1; - run_finalizers(ptls); - ptls->in_finalizer = 0; + if (jl_gc_have_pending_finalizers) { + jl_gc_run_pending_finalizers(ptls); } } diff --git a/src/intrinsics.cpp b/src/intrinsics.cpp index 9cff44db3190b..08270c17c5b4c 100644 --- a/src/intrinsics.cpp +++ b/src/intrinsics.cpp @@ -1186,25 +1186,45 @@ static Value *emit_untyped_intrinsic(jl_codectx_t &ctx, intrinsic f, Value **arg case or_int: return ctx.builder.CreateOr(x, y); case xor_int: return ctx.builder.CreateXor(x, y); - case shl_int: - return ctx.builder.CreateSelect( - ctx.builder.CreateICmpUGE(y, ConstantInt::get(y->getType(), - t->getPrimitiveSizeInBits())), - ConstantInt::get(t, 0), - ctx.builder.CreateShl(x, uint_cnvt(ctx, t, y))); - case lshr_int: - return ctx.builder.CreateSelect( - ctx.builder.CreateICmpUGE(y, ConstantInt::get(y->getType(), - t->getPrimitiveSizeInBits())), - ConstantInt::get(t, 0), - ctx.builder.CreateLShr(x, uint_cnvt(ctx, t, y))); - case ashr_int: - return ctx.builder.CreateSelect( - ctx.builder.CreateICmpUGE(y, ConstantInt::get(y->getType(), - t->getPrimitiveSizeInBits())), - ctx.builder.CreateAShr(x, ConstantInt::get(t, t->getPrimitiveSizeInBits() - 1)), - ctx.builder.CreateAShr(x, uint_cnvt(ctx, t, y))); - + case shl_int: { + Value *the_shl = ctx.builder.CreateShl(x, uint_cnvt(ctx, t, y)); + if (ConstantInt::isValueValidForType(y->getType(), (uint64_t)t->getPrimitiveSizeInBits())) { + return ctx.builder.CreateSelect( + ctx.builder.CreateICmpUGE(y, ConstantInt::get(y->getType(), + t->getPrimitiveSizeInBits())), + ConstantInt::get(t, 0), + the_shl); + } + else { + return the_shl; + } + } + case lshr_int: { + Value *the_shr = ctx.builder.CreateLShr(x, uint_cnvt(ctx, t, y)); + if (ConstantInt::isValueValidForType(y->getType(), (uint64_t)t->getPrimitiveSizeInBits())) { + return ctx.builder.CreateSelect( + ctx.builder.CreateICmpUGE(y, ConstantInt::get(y->getType(), + t->getPrimitiveSizeInBits())), + ConstantInt::get(t, 0), + the_shr); + } + else { + return the_shr; + } + } + case ashr_int: { + Value *the_shr = ctx.builder.CreateAShr(x, uint_cnvt(ctx, t, y)); + if (ConstantInt::isValueValidForType(y->getType(), (uint64_t)t->getPrimitiveSizeInBits())) { + return ctx.builder.CreateSelect( + ctx.builder.CreateICmpUGE(y, ConstantInt::get(y->getType(), + t->getPrimitiveSizeInBits())), + ctx.builder.CreateAShr(x, ConstantInt::get(t, t->getPrimitiveSizeInBits() - 1)), + the_shr); + } + else { + return the_shr; + } + } case bswap_int: { FunctionCallee bswapintr = Intrinsic::getDeclaration(jl_Module, Intrinsic::bswap, makeArrayRef(t)); return ctx.builder.CreateCall(bswapintr, x); diff --git a/src/jltypes.c b/src/jltypes.c index 4b14f4a4b26ee..824bbccc65fc0 100644 --- a/src/jltypes.c +++ b/src/jltypes.c @@ -2015,8 +2015,9 @@ void jl_init_types(void) JL_GC_DISABLED jl_module_type = jl_new_datatype(jl_symbol("Module"), core, jl_any_type, jl_emptysvec, - jl_perm_symsvec(2, "name", "parent"), - jl_svec(2, jl_symbol_type, jl_any_type), 0, 1, 2); + jl_emptysvec, jl_emptysvec, 0, 1, 0); + jl_module_type->instance = NULL; + jl_compute_field_offsets(jl_module_type); jl_value_t *symornothing[2] = { (jl_value_t*)jl_symbol_type, (jl_value_t*)jl_void_type }; jl_linenumbernode_type = @@ -2026,8 +2027,9 @@ void jl_init_types(void) JL_GC_DISABLED jl_lineinfonode_type = jl_new_datatype(jl_symbol("LineInfoNode"), core, jl_any_type, jl_emptysvec, - jl_perm_symsvec(4, "method", "file", "line", "inlined_at"), - jl_svec(4, jl_any_type, jl_symbol_type, jl_long_type, jl_long_type), 0, 0, 4); + jl_perm_symsvec(5, "module", "method", "file", "line", "inlined_at"), + jl_svec(5, jl_module_type, jl_any_type, jl_symbol_type, jl_long_type, jl_long_type), + 0, 0, 5); jl_gotonode_type = jl_new_datatype(jl_symbol("GotoNode"), core, jl_any_type, jl_emptysvec, diff --git a/src/julia.h b/src/julia.h index 64482226d1e70..b31515aa200f9 100644 --- a/src/julia.h +++ b/src/julia.h @@ -233,6 +233,7 @@ JL_EXTENSION typedef union { typedef struct _jl_method_instance_t jl_method_instance_t; typedef struct _jl_line_info_node_t { + struct _jl_module_t *module; jl_value_t *method; jl_sym_t *file; intptr_t line; diff --git a/src/julia_internal.h b/src/julia_internal.h index b917569b080a9..b117a4a1b2d0b 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -484,7 +484,7 @@ jl_value_t *jl_interpret_toplevel_expr_in(jl_module_t *m, jl_value_t *e, jl_svec_t *sparam_vals); int jl_is_toplevel_only_expr(jl_value_t *e) JL_NOTSAFEPOINT; jl_value_t *jl_call_scm_on_ast(const char *funcname, jl_value_t *expr, jl_module_t *inmodule); -void jl_linenumber_to_lineinfo(jl_code_info_t *ci, jl_value_t *name); +void jl_linenumber_to_lineinfo(jl_code_info_t *ci, jl_module_t *mod, jl_value_t *name); jl_method_instance_t *jl_method_lookup(jl_value_t **args, size_t nargs, int cache, size_t world); jl_value_t *jl_gf_invoke(jl_value_t *types, jl_value_t *f, jl_value_t **args, size_t nargs); diff --git a/src/julia_threads.h b/src/julia_threads.h index 6040a593300c1..9dad085151beb 100644 --- a/src/julia_threads.h +++ b/src/julia_threads.h @@ -313,6 +313,10 @@ int8_t jl_gc_safe_leave(jl_ptls_t ptls, int8_t state); // Can be a safepoint JL_DLLEXPORT void (jl_gc_safepoint)(void); JL_DLLEXPORT void jl_gc_enable_finalizers(jl_ptls_t ptls, int on); +JL_DLLEXPORT void jl_gc_disable_finalizers_internal(void); +JL_DLLEXPORT void jl_gc_enable_finalizers_internal(void); +JL_DLLEXPORT void jl_gc_run_pending_finalizers(jl_ptls_t ptls); +extern JL_DLLEXPORT int jl_gc_have_pending_finalizers; JL_DLLEXPORT void jl_wakeup_thread(int16_t tid); diff --git a/src/locks.h b/src/locks.h index 6e070d6bd4c8f..1636f5cfe2948 100644 --- a/src/locks.h +++ b/src/locks.h @@ -137,9 +137,8 @@ static inline void jl_mutex_unlock(jl_mutex_t *lock) jl_mutex_unlock_nogc(lock); jl_lock_frame_pop(); JL_SIGATOMIC_END(); - if (ptls->current_task && ptls->current_task->locks.len == 0 && ptls->finalizers_inhibited == 0) { - ptls->finalizers_inhibited = 1; - jl_gc_enable_finalizers(ptls, 1); // call run_finalizers (may GC) + if (jl_gc_have_pending_finalizers) { + jl_gc_run_pending_finalizers(ptls); // may GC } } diff --git a/src/macroexpand.scm b/src/macroexpand.scm index e6c4fde732611..882fe88a2e648 100644 --- a/src/macroexpand.scm +++ b/src/macroexpand.scm @@ -383,7 +383,7 @@ ,(resolve-expansion-vars-with-new-env (caddr e) env m parent-scope inarg))) ((= function) - (if (and (pair? (cadr e)) (function-def? e)) + (if (and (pair? (cadr e)) (function-def? e) (length> e 2)) ;; in (kw x 1) inside an arglist, the x isn't actually a kwarg `(,(car e) ,(resolve-in-function-lhs (cadr e) env m parent-scope inarg) ,(resolve-expansion-vars-with-new-env (caddr e) env m parent-scope inarg)) diff --git a/src/method.c b/src/method.c index 303fe34269a54..43a823dbe30c9 100644 --- a/src/method.c +++ b/src/method.c @@ -336,7 +336,7 @@ jl_code_info_t *jl_new_code_info_from_ir(jl_expr_t *ir) return src; } -void jl_linenumber_to_lineinfo(jl_code_info_t *ci, jl_value_t *name) +void jl_linenumber_to_lineinfo(jl_code_info_t *ci, jl_module_t *mod, jl_value_t *name) { jl_array_t *li = (jl_array_t*)ci->linetable; size_t i, n = jl_array_len(li); @@ -346,11 +346,11 @@ void jl_linenumber_to_lineinfo(jl_code_info_t *ci, jl_value_t *name) jl_value_t *ln = jl_array_ptr_ref(li, i); if (jl_is_linenode(ln)) { rt = jl_box_long(jl_linenode_line(ln)); - rt = jl_new_struct(jl_lineinfonode_type, name, jl_linenode_file(ln), rt, jl_box_long(0)); + rt = jl_new_struct(jl_lineinfonode_type, mod, name, jl_linenode_file(ln), rt, jl_box_long(0)); jl_array_ptr_set(li, i, rt); } else if (jl_is_expr(ln) && ((jl_expr_t*)ln)->head == line_sym && jl_expr_nargs(ln) == 3) { - rt = jl_new_struct(jl_lineinfonode_type, jl_symbol("macro expansion"), + rt = jl_new_struct(jl_lineinfonode_type, mod, jl_symbol("macro expansion"), jl_exprarg(ln, 1), jl_exprarg(ln, 0), jl_exprarg(ln, 2)); jl_array_ptr_set(li, i, rt); } @@ -441,7 +441,7 @@ JL_DLLEXPORT jl_code_info_t *jl_code_for_staged(jl_method_instance_t *linfo) ptls->in_pure_callback = last_in; jl_lineno = last_lineno; ptls->world_age = last_age; - jl_linenumber_to_lineinfo(func, (jl_value_t*)def->name); + jl_linenumber_to_lineinfo(func, def->module, (jl_value_t*)def->name); } JL_CATCH { ptls->in_pure_callback = last_in; @@ -494,7 +494,7 @@ static void jl_method_set_source(jl_method_t *m, jl_code_info_t *src) } m->called = called; m->pure = src->pure; - jl_linenumber_to_lineinfo(src, (jl_value_t*)m->name); + jl_linenumber_to_lineinfo(src, m->module, (jl_value_t*)m->name); jl_array_t *copy = NULL; jl_svec_t *sparam_vars = jl_outer_unionall_vars(m->sig); diff --git a/src/rtutils.c b/src/rtutils.c index 17cadf46574e9..02c203553ebfe 100644 --- a/src/rtutils.c +++ b/src/rtutils.c @@ -260,10 +260,8 @@ JL_DLLEXPORT void jl_eh_restore_state(jl_handler_t *eh) if (old_defer_signal && !eh->defer_signal) { jl_sigint_safepoint(ptls); } - if (unlocks && eh->locks_len == 0 && ptls->finalizers_inhibited == 0) { - // call run_finalizers - ptls->finalizers_inhibited = 1; - jl_gc_enable_finalizers(ptls, 1); + if (jl_gc_have_pending_finalizers && unlocks && eh->locks_len == 0) { + jl_gc_run_pending_finalizers(ptls); } } @@ -651,6 +649,30 @@ static size_t jl_static_show_x_sym_escaped(JL_STREAM *out, jl_sym_t *name) JL_NO return n; } +// `jl_static_show()` cannot call `jl_subtype()`, for the GC reasons +// explained in the comment on `jl_static_show_x_()`, below. +// This function checks if `vt <: Function` without triggering GC. +static int jl_static_is_function_(jl_datatype_t *vt) JL_NOTSAFEPOINT { + if (!jl_function_type) { // Make sure there's a Function type defined. + return 0; + } + int _iter_count = 0; // To prevent infinite loops from corrupt type objects. + while (vt != jl_any_type) { + if (vt == NULL) { + return 0; + } else if (_iter_count > 10000) { + // We are very likely stuck in a cyclic datastructure, so we assume this is + // _not_ a Function. + return 0; + } else if (vt == jl_function_type) { + return 1; + } + vt = vt->super; + _iter_count += 1; + } + return 0; +} + // `v` might be pointing to a field inlined in a structure therefore // `jl_typeof(v)` may not be the same with `vt` and only `vt` should be // used to determine the type of the value. @@ -1006,7 +1028,7 @@ static size_t jl_static_show_x_(JL_STREAM *out, jl_value_t *v, jl_datatype_t *vt n += jl_static_show_x(out, *(jl_value_t**)v, depth); n += jl_printf(out, ")"); } - else if (jl_function_type && jl_isa(v, (jl_value_t*)jl_function_type)) { + else if (jl_static_is_function_(vt)) { // v is function instance (an instance of a Function type). jl_datatype_t *dv = (jl_datatype_t*)vt; jl_sym_t *sym = dv->name->mt->name; diff --git a/src/stackwalk.c b/src/stackwalk.c index 95ecaff38462f..75e13ad375ee1 100644 --- a/src/stackwalk.c +++ b/src/stackwalk.c @@ -657,14 +657,14 @@ void jl_print_bt_entry_codeloc(jl_bt_element_t *bt_entry) JL_NOTSAFEPOINT jl_line_info_node_t *locinfo = (jl_line_info_node_t*) jl_array_ptr_ref(src->linetable, debuginfoloc - 1); assert(jl_typeis(locinfo, jl_lineinfonode_type)); + const char *func_name = "Unknown"; jl_value_t *method = locinfo->method; - if (jl_is_method_instance(method)) { + if (jl_is_method_instance(method)) method = ((jl_method_instance_t*)method)->def.value; - if (jl_is_method(method)) - method = (jl_value_t*)((jl_method_t*)method)->name; - } - const char *func_name = jl_is_symbol(method) ? - jl_symbol_name((jl_sym_t*)method) : "Unknown"; + if (jl_is_method(method)) + method = (jl_value_t*)((jl_method_t*)method)->name; + if (jl_is_symbol(method)) + func_name = jl_symbol_name((jl_sym_t*)method); jl_safe_print_codeloc(func_name, jl_symbol_name(locinfo->file), locinfo->line, locinfo->inlined_at); debuginfoloc = locinfo->inlined_at; diff --git a/src/task.c b/src/task.c index 5891b877b4b45..a2e4d7edc2329 100644 --- a/src/task.c +++ b/src/task.c @@ -462,6 +462,11 @@ JL_DLLEXPORT void jl_switchto(jl_task_t **pt) JL_DLLEXPORT JL_NORETURN void jl_no_exc_handler(jl_value_t *e) { + // NULL exception objects are used when rethrowing. we don't have a handler to process + // the exception stack, so at least report the exception at the top of the stack. + if (!e) + e = jl_current_exception(); + jl_printf(JL_STDERR, "fatal: error thrown and no exception handler available.\n"); jl_static_show(JL_STDERR, e); jl_printf(JL_STDERR, "\n"); diff --git a/stdlib/Serialization/src/Serialization.jl b/stdlib/Serialization/src/Serialization.jl index d1665a73b2fa8..9110fb78daa65 100644 --- a/stdlib/Serialization/src/Serialization.jl +++ b/stdlib/Serialization/src/Serialization.jl @@ -1037,12 +1037,15 @@ function deserialize(s::AbstractSerializer, ::Type{Core.MethodInstance}) end function deserialize(s::AbstractSerializer, ::Type{Core.LineInfoNode}) - _meth = deserialize(s) - if _meth isa Module - # pre v1.2, skip - _meth = deserialize(s) + mod = deserialize(s) + if mod isa Module + method = deserialize(s) + else + # files post v1.2 and pre v1.6 are broken + method = mod + mod = Main end - return Core.LineInfoNode(_meth::Symbol, deserialize(s)::Symbol, deserialize(s)::Int, deserialize(s)::Int) + return Core.LineInfoNode(mod, method, deserialize(s)::Symbol, deserialize(s)::Int, deserialize(s)::Int) end function deserialize(s::AbstractSerializer, ::Type{CodeInfo}) diff --git a/stdlib/Test/src/Test.jl b/stdlib/Test/src/Test.jl index 2081425563780..eaa3af9e701c9 100644 --- a/stdlib/Test/src/Test.jl +++ b/stdlib/Test/src/Test.jl @@ -455,6 +455,10 @@ function get_test_result(ex, source) push!(escaped_kwargs, Expr(:call, :(=>), QuoteNode(a.args[1]), esc(a.args[2]))) elseif isa(a, Expr) && a.head === :... push!(escaped_kwargs, Expr(:..., esc(a.args[1]))) + elseif isa(a, Expr) && a.head === :. + push!(escaped_kwargs, Expr(:call, :(=>), QuoteNode(a.args[2].value), esc(Expr(:., a.args[1], QuoteNode(a.args[2].value))))) + elseif isa(a, Symbol) + push!(escaped_kwargs, Expr(:call, :(=>), QuoteNode(a), esc(a))) end end end diff --git a/stdlib/Test/test/runtests.jl b/stdlib/Test/test/runtests.jl index 3307fd48e0d3c..46078b83cf400 100644 --- a/stdlib/Test/test/runtests.jl +++ b/stdlib/Test/test/runtests.jl @@ -6,6 +6,8 @@ using Test: guardseed import Logging: Debug, Info, Warn @testset "@test" begin + atol = 1 + a = (; atol=2) @test true @test 1 == 1 @test 1 != 2 @@ -18,11 +20,16 @@ import Logging: Debug, Info, Warn @test isapprox(1, 1, atol=0.1) @test isapprox(1, 1; atol=0.1) @test isapprox(1, 1; [(:atol, 0)]...) + @test isapprox(1, 2; atol) + @test isapprox(1, 3; a.atol) end @testset "@test keyword precedence" begin + atol = 2 # post-semicolon keyword, suffix keyword, pre-semicolon keyword @test isapprox(1, 2, atol=0) atol=1 @test isapprox(1, 3, atol=0; atol=2) atol=1 + @test isapprox(1, 2, atol=0; atol) + @test isapprox(1, 3, atol=0; atol) atol=1 end @testset "@test should only evaluate the arguments once" begin g = Int[] diff --git a/stdlib/Unicode/test/runtests.jl b/stdlib/Unicode/test/runtests.jl index aa4fe6e01e575..38412d199a529 100644 --- a/stdlib/Unicode/test/runtests.jl +++ b/stdlib/Unicode/test/runtests.jl @@ -260,6 +260,9 @@ end end end end + + @test Base.Unicode.isgraphemebreak('α', 'β') + @test !Base.Unicode.isgraphemebreak('α', '\u0302') end @testset "#3721, #6939 up-to-date character widths" begin @@ -330,6 +333,12 @@ end @test collect(g) == ["1","2","3","α","5"] end +@testset "#37680: initial graphemes" begin + @test collect(graphemes("🤦🏼‍♂️")) == ["🤦🏼‍♂️"] + @test collect(graphemes("👨🏻‍🤝‍👨🏽")) == ["👨🏻‍🤝‍👨🏽"] + @test collect(graphemes("🇸🇪🇸🇪")) == ["🇸🇪","🇸🇪"] +end + @testset "uppercasefirst/lowercasefirst" begin @test uppercasefirst("Hola")=="Hola" @test uppercasefirst("hola")=="Hola" diff --git a/test/cmdlineargs.jl b/test/cmdlineargs.jl index 5bb6ec3b9a8d9..6cacdee5d7348 100644 --- a/test/cmdlineargs.jl +++ b/test/cmdlineargs.jl @@ -256,7 +256,9 @@ let exename = `$(Base.julia_cmd()) --startup-file=no` mktempdir() do dir helperdir = joinpath(@__DIR__, "testhelpers") inputfile = joinpath(helperdir, "coverage_file.jl") - expected = replace(read(joinpath(helperdir, "coverage_file.info"), String), + expected = replace(read(joinpath(helperdir, "coverage_file.info.bad"), String), + "" => realpath(inputfile)) + expected_good = replace(read(joinpath(helperdir, "coverage_file.info"), String), "" => realpath(inputfile)) covfile = replace(joinpath(dir, "coverage.info"), "%" => "%%") @test !isfile(covfile) @@ -274,18 +276,21 @@ let exename = `$(Base.julia_cmd()) --startup-file=no` got = read(covfile, String) rm(covfile) @test occursin(expected, got) || (expected, got) + @test_broken occursin(expected_good, got) @test readchomp(`$exename -E "Base.JLOptions().code_coverage" -L $inputfile --code-coverage=$covfile --code-coverage=user`) == "1" @test isfile(covfile) got = read(covfile, String) rm(covfile) @test occursin(expected, got) || (expected, got) + @test_broken occursin(expected_good, got) @test readchomp(`$exename -E "Base.JLOptions().code_coverage" -L $inputfile --code-coverage=$covfile --code-coverage=all`) == "2" @test isfile(covfile) got = read(covfile, String) rm(covfile) @test occursin(expected, got) || (expected, got) + @test_broken occursin(expected_good, got) end # --track-allocation diff --git a/test/compiler/codegen.jl b/test/compiler/codegen.jl index f297142258fc4..eda3a95e30bda 100644 --- a/test/compiler/codegen.jl +++ b/test/compiler/codegen.jl @@ -463,3 +463,31 @@ end @testset "#37262" begin @test f37262(Base.inferencebarrier(true)) === nothing end + +# issue #37671 +let d = Dict((:a,) => 1, (:a, :b) => 2) + @test d[(:a,)] == 1 + @test d[(:a, :b)] == 2 +end + +# issue #37880 +primitive type Has256Bits 256 end +let x = reinterpret(Has256Bits, [0xfcdac822cac89d82de4f9b3326da8294, 0x6ebac4d5982880ca703c57e37657f1ee])[] + shifted = [0xeefcdac822cac89d82de4f9b3326da82, 0x006ebac4d5982880ca703c57e37657f1] + f(x) = Base.lshr_int(x, 0x8) + @test reinterpret(UInt128, [f(x)]) == shifted + @test reinterpret(UInt128, [Base.lshr_int(x, 0x8)]) == shifted + g(x) = Base.ashr_int(x, 0x8) + @test reinterpret(UInt128, [g(x)]) == shifted + @test reinterpret(UInt128, [Base.ashr_int(x, 0x8)]) == shifted + lshifted = [0xdac822cac89d82de4f9b3326da829400, 0xbac4d5982880ca703c57e37657f1eefc] + h(x) = Base.shl_int(x, 0x8) + @test reinterpret(UInt128, [h(x)]) == lshifted + @test reinterpret(UInt128, [Base.shl_int(x, 0x8)]) == lshifted +end + +# issue #37872 +let f(@nospecialize(x)) = x===Base.ImmutableDict(Int128=>:big) + @test !f(Dict(Int=>Int)) +end + diff --git a/test/compiler/ssair.jl b/test/compiler/ssair.jl index 116e099398b7b..f7504e7a9a29a 100644 --- a/test/compiler/ssair.jl +++ b/test/compiler/ssair.jl @@ -22,7 +22,7 @@ const Compiler = Core.Compiler # false, false, false, false # )) # -# NullLineInfo = Core.LineInfoNode(Symbol(""), Symbol(""), 0, 0) +# NullLineInfo = Core.LineInfoNode(Main, Symbol(""), Symbol(""), 0, 0) # Compiler.run_passes(ci, 1, [NullLineInfo]) # # XXX: missing @test #end diff --git a/test/core.jl b/test/core.jl index 8e12e4bc5bc97..56348e70b86b8 100644 --- a/test/core.jl +++ b/test/core.jl @@ -7333,3 +7333,83 @@ let v = NullableHomogeneousPointerImmutable(), @test getfield_knownindex_used3(r, v2) === 2 @test r[] == 3 end + +struct PointerNopadding{T} + a::Symbol + b::T +end +struct ContainsPointerNopadding{T} + a::PointerNopadding{T} + ContainsPointerNopadding{T}() where T = new{T}() + ContainsPointerNopadding{T}(a) where T = new{T}(a) +end + +@test !Base.datatype_haspadding(PointerNopadding{Symbol}) +@test !Base.datatype_haspadding(PointerNopadding{Int}) +# Sanity check to make sure the meaning of haspadding didn't change. +@test Base.datatype_haspadding(PointerNopadding{Any}) +@test !Base.datatype_haspadding(Tuple{PointerNopadding{Symbol}}) +@test !Base.datatype_haspadding(Tuple{PointerNopadding{Int}}) +@test !Base.datatype_haspadding(ContainsPointerNopadding{Symbol}) +@test Base.datatype_haspadding(ContainsPointerNopadding{Int}) + +# Test the codegen optimized version as well as the unoptimized version of `jl_egal` +@noinline unopt_jl_egal(@nospecialize(a), @nospecialize(b)) = + ccall(:jl_egal, Cint, (Any, Any), a, b) != 0 +@noinline opt_jl_egal(a, b) = a === b + +let aint = ContainsPointerNopadding{Int}(), asym = ContainsPointerNopadding{Symbol}(), + hint = objectid(aint), hsym = objectid(asym) + # Test that the uninitialized bits field doesn't affect the objectid or === + for i in 1:100 + local i + # Increase the chance one of the objects contains garbage int + local bint = ContainsPointerNopadding{Int}() + local bsym = ContainsPointerNopadding{Symbol}() + @test objectid(bint) === hint + @test objectid(bsym) === hsym + @test aint === bint + @test asym === bsym + @test unopt_jl_egal(aint, bint) + @test unopt_jl_egal(asym, bsym) + @test opt_jl_egal(aint, bint) + @test opt_jl_egal(asym, bsym) + aint = bint + asym = bsym + end +end + +# Check === for potentially NULL field +let vnull1 = NullableHomogeneousPointerImmutable(), + vnull2 = NullableHomogeneousPointerImmutable(), + v1 = NullableHomogeneousPointerImmutable(PointerImmutable(1, 2)), + v2 = NullableHomogeneousPointerImmutable(PointerImmutable(1, 2)) + + @test vnull1 === vnull2 + @test unopt_jl_egal(vnull1, vnull2) + @test opt_jl_egal(vnull1, vnull2) + @test v1 === v2 + @test unopt_jl_egal(v1, v2) + @test opt_jl_egal(v1, v2) + + @test vnull1 !== v1 + @test !unopt_jl_egal(vnull1, v1) + @test !opt_jl_egal(vnull1, v1) + @test vnull2 !== v2 + @test !unopt_jl_egal(vnull2, v2) + @test !opt_jl_egal(vnull2, v2) +end + +# Make sure non-allbits union is handled correctly +@noinline returns_union37557(r) = r[] +@noinline compare_union37557(r1, r2) = returns_union37557(r1) === returns_union37557(r2) +@test !compare_union37557(Ref{Union{Int,Vector{Int}}}(Int[]), Ref{Union{Int,Vector{Int}}}(Int[])) +@test !compare_union37557(Ref{Union{Int,Vector{Int}}}(1), Ref{Union{Int,Vector{Int}}}(Int[])) +@test !compare_union37557(Ref{Union{Int,Vector{Int}}}(1), + Ref{Union{Int,Vector{Int}}}(3)) +let array = Int[] + @test compare_union37557(Ref{Union{Int,Vector{Int}}}(array), + Ref{Union{Int,Vector{Int}}}(array)) +end +@test compare_union37557(Ref{Union{Int,Vector{Int}}}(1), + Ref{Union{Int,Vector{Int}}}(1)) diff --git a/test/misc.jl b/test/misc.jl index c4d26e3b223b9..ac78dcb7812b8 100644 --- a/test/misc.jl +++ b/test/misc.jl @@ -136,7 +136,10 @@ for l in (Threads.SpinLock(), ReentrantLock()) @test get_finalizers_inhibited() == 1 GC.enable_finalizers(true) @test get_finalizers_inhibited() == 0 - @test_warn "WARNING: GC finalizers already enabled on this thread." GC.enable_finalizers(true) + if ccall(:jl_is_debugbuild, Cint, ()) != 0 + # Note this warning only exists in debug builds + @test_warn "WARNING: GC finalizers already enabled on this thread." GC.enable_finalizers(true) + end @test lock(l) === nothing @test try unlock(l) finally end === nothing @@ -860,5 +863,5 @@ end end @testset "fieldtypes Module" begin - @test fieldtypes(Module) isa Tuple + @test fieldtypes(Module) === () end diff --git a/test/syntax.jl b/test/syntax.jl index 763d787f9fe06..4c8962a3c63e2 100644 --- a/test/syntax.jl +++ b/test/syntax.jl @@ -2324,3 +2324,11 @@ end @test (Int .<: [Integer] .<: [Real]) == [true] end + +# issue #38386 +macro m38386() + fname = :f38386 + :(function $(esc(fname)) end) +end +@m38386 +@test isempty(methods(f38386)) diff --git a/test/testhelpers/coverage_file.info b/test/testhelpers/coverage_file.info index 5b7b72789bf73..9b4b1c1f2f96e 100644 --- a/test/testhelpers/coverage_file.info +++ b/test/testhelpers/coverage_file.info @@ -1,4 +1,5 @@ SF: +DA:3,1 DA:4,1 DA:5,0 DA:7,1 @@ -8,6 +9,9 @@ DA:11,1 DA:12,1 DA:14,0 DA:17,1 -LH:7 -LF:9 +DA:19,1 +DA:20,1 +DA:22,1 +LH:10 +LF:13 end_of_record diff --git a/test/testhelpers/coverage_file.info.bad b/test/testhelpers/coverage_file.info.bad new file mode 100644 index 0000000000000..44e33a9df68c7 --- /dev/null +++ b/test/testhelpers/coverage_file.info.bad @@ -0,0 +1,19 @@ +SF: +DA:3,1 +DA:4,1 +DA:5,0 +DA:7,1 +DA:8,1 +DA:9,5 +DA:11,1 +DA:12,1 +DA:14,0 +DA:17,1 +DA:18,0 +DA:19,1 +DA:20,1 +DA:22,1 +DA:1234,0 +LH:11 +LF:15 +end_of_record diff --git a/test/testhelpers/coverage_file.jl b/test/testhelpers/coverage_file.jl index 986aaeec9f300..e8e0355952d80 100644 --- a/test/testhelpers/coverage_file.jl +++ b/test/testhelpers/coverage_file.jl @@ -14,7 +14,13 @@ function code_coverage_test() not_reached end -short_form_func_coverage_test(x) = x*x +@eval short_form_func_coverage_test(x) = begin + $(Expr(:line, 1234)) + y() = begin + x + end + x * y() +end success = code_coverage_test() == [1, 2, 3] && short_form_func_coverage_test(2) == 4