Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
de85ebb
🤖 [backports-release-1.12] Bump NetworkOptions stdlib 532992f → 7034c…
DilumAluthgeBot Dec 29, 2025
a198393
Docs: mention cmd line option for App Installer on Windows
davidanthoff Dec 23, 2025
5ae7e55
REPL: fix completion overwriting input after cursor (#60472)
IanButterworth Dec 25, 2025
eb2afda
Clarify that `cpu_info` times are expressed in milliseconds (#60480)
BioTurboNick Dec 27, 2025
387dd93
Fix `@allocated 1 .+ 1` (#60494)
N5N3 Dec 29, 2025
1ed5bdf
Fix JET warning by avoiding recursion in `getproperty(::DirEntry)` (#…
fingolfin Dec 29, 2025
89dc101
Fix JET warning in `artifact_meta` (#60507)
fingolfin Dec 29, 2025
e7b2b23
[backports-release-1.12] Fix build with USE_SYSTEM_P7ZIP=1 for 1.12 (…
nhz2 Jan 12, 2026
a6c2a27
1.12: add getter for global variable pointer matching jlvalue (#60685)
wsmoses Jan 14, 2026
ab6dd0a
Backport `@fastmath x^2` inlining regression to 1.12 (#60686)
oscardssmith Jan 14, 2026
634170e
Fix build with USE_SYSTEM_P7ZIP=1 (#60623)
nhz2 Jan 11, 2026
e1e955a
Don't set the owner of the string needlessly. (#60601)
gbaraldi Jan 14, 2026
b2bc423
add wb_back on all task switch paths (#60617)
vtjnash Jan 15, 2026
3c92c84
[LLVMAllocOpt] Preserve metadata lowering an alloca
wsmoses Jan 15, 2026
03eeb80
🤖 [backports-release-1.12] Bump SparseArrays stdlib f81a30d → 2376bf8…
DilumAluthgeBot Jan 16, 2026
d6a0cd2
Remove potential unitialized memory in the GC stack (#60651)
gbaraldi Jan 16, 2026
a7ec7a2
Print `full_name` after precompiling extension (#60456)
DilumAluthge Jan 16, 2026
30e745e
Add heap sized based full gc heuristic (#60376)
gbaraldi Dec 16, 2025
951ca46
[release-1.12] Fix JET warnings in `show(::IOBuffer, ::StackFrame)` (…
lgoettgens Jan 19, 2026
3484631
[JuliaSyntax] Bump version for 1.12 (#60641)
JamesWrigley Jan 19, 2026
b8fbf49
[1.12] Reland "Add getter for get llvm codeinstances" (#60738)
gbaraldi Jan 19, 2026
10ccaaf
[1.12] Reland "Enable getting non-boxed LLVM type from Julia Type" (#…
wsmoses Jan 20, 2026
e2ff74f
[1.12] LateLowerGCFrame: More relevant diagnostic information on non-…
wsmoses Jan 20, 2026
ce066ed
Preserve the scope across the exception handler (#60647)
vchuravy Jan 14, 2026
bf91f30
[1.12] Backport #60718+#60746: Fix and test `jl_method_lookup_by_tt` …
maleadt Jan 20, 2026
13b377a
[1.12] Don't skip CIs from external absints (#60741)
gbaraldi Jan 20, 2026
0d0c031
codegen: Use `emit_static_roots` for "allroots" case (#60656)
topolarity Jan 14, 2026
b8e84ae
[1.12] Fix `codeinfo_for_const` missing `nargs` and `isva` fields (#6…
maleadt Jan 24, 2026
3d40701
llvm: Fix alloca alignment and type selection in AllocOpt (#60699)
gbaraldi Jan 21, 2026
0f21d93
bindings: Define behavior of `using` an ambiguous binding (#60804)
Keno Jan 24, 2026
164ac88
Temporarily reintroduce a global type inference lock (#60689)
xal-0 Jan 20, 2026
a1391e5
bump Pkg to latest release-1.12
KristofferC Jan 28, 2026
422f456
Make `jl_reinit_foreign_type` idempotent even with asserts (#60827)
fingolfin Jan 27, 2026
fc45339
`deps/checksums`: Remove old Pkg checksums, and add new Pkg checksums
DilumAluthge Jan 29, 2026
0429a63
compiler/ssair: preserve negative NewSSAValue (#60688)
KristofferC Jan 29, 2026
eaba5ed
Fix typo in partially_inline! (#60854)
oscardssmith Jan 29, 2026
be1545c
ssair: fix phi edge cleanup for current block (#60697)
KristofferC Jan 29, 2026
f575438
inference: fix union split handling for custom lattices (#60857)
aviatesk Jan 29, 2026
4938a3e
Merge pull request #60834 from rokke-git/patch-5
rokke-git Jan 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 23 additions & 8 deletions Compiler/src/ssair/ir.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1373,8 +1373,19 @@ function kill_edge!(ir::IRCode, from::Int, to::Int, callback=nothing)
kill_edge!(ir.cfg.blocks, from, to, callback)
end

# N.B.: from and to are non-renamed indices
function kill_edge!(compact::IncrementalCompact, active_bb::Int, from::Int, to::Int)
@inline function compacted_stmt_range(compact::IncrementalCompact, bb::BasicBlock, active_bb::Int, to::Int)
to == active_bb && return StmtRange(first(bb.stmts), compact.result_idx - 1)
return bb.stmts
end

"""
kill_edge_terminator!(compact::IncrementalCompact, active_bb::Int, from::Int, to::Int)
Kill a CFG edge while compacting a terminator in `active_bb`. Assumes all PhiNode
block statements in `to` have already been processed, so the active BB may only
scan the compacted prefix when `to == active_bb`. `from` and `to` are non-renamed indices.
"""
function kill_edge_terminator!(compact::IncrementalCompact, active_bb::Int, from::Int, to::Int)
# Note: We recursively kill as many edges as are obviously dead.
(; bb_rename_pred, bb_rename_succ, result_bbs, domtree) = compact.cfg_transform
preds = result_bbs[bb_rename_succ[to]].preds
Expand All @@ -1390,7 +1401,7 @@ function kill_edge!(compact::IncrementalCompact, active_bb::Int, from::Int, to::
for succ in copy(to_succs)
new_succ = findfirst(x::Int->x==succ, bb_rename_pred)
new_succ === nothing && continue
kill_edge!(compact, active_bb, to, new_succ)
kill_edge_terminator!(compact, active_bb, to, new_succ)
end
empty!(preds)
empty!(to_succs)
Expand All @@ -1412,8 +1423,9 @@ function kill_edge!(compact::IncrementalCompact, active_bb::Int, from::Int, to::
# Remove this edge from all phi nodes in `to` block
# NOTE: It is possible for `to` to contain only `nothing` statements,
# so we must be careful to stop at its last statement
if to < active_bb
stmts = result_bbs[bb_rename_succ[to]].stmts
if to <= active_bb
bb = result_bbs[bb_rename_succ[to]]
stmts = compacted_stmt_range(compact, bb, active_bb, to)
idx = first(stmts)
while idx <= last(stmts)
stmt = compact.result[idx][:stmt]
Expand Down Expand Up @@ -1493,14 +1505,14 @@ function process_node!(compact::IncrementalCompact, result_idx::Int, inst::Instr
if cond
ssa_rename[idx] = nothing
result[result_idx][:stmt] = nothing
kill_edge!(compact, active_bb, active_bb, stmt.dest)
kill_edge_terminator!(compact, active_bb, active_bb, stmt.dest)
# Don't increment result_idx => Drop this statement
else
label = bb_rename_succ[stmt.dest]
@assert label > 0
ssa_rename[idx] = SSAValue(result_idx)
result[result_idx][:stmt] = GotoNode(label)
kill_edge!(compact, active_bb, active_bb, active_bb+1)
kill_edge_terminator!(compact, active_bb, active_bb, active_bb+1)
result_idx += 1
end
else
Expand Down Expand Up @@ -1675,7 +1687,10 @@ function process_node!(compact::IncrementalCompact, result_idx::Int, inst::Instr
stmt = ssa_rename[stmt.id]
end
elseif isa(stmt, NewSSAValue)
stmt = SSAValue(stmt.id)
if stmt.id > 0
# Negative ids reference new_new_nodes and must remain NewSSAValue.
stmt = SSAValue(stmt.id)
end
else
# Constant assign, replace uses of this ssa value with its result
end
Expand Down
2 changes: 2 additions & 0 deletions Compiler/src/typeinfer.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1052,6 +1052,8 @@ function codeinfo_for_const(interp::AbstractInterpreter, mi::MethodInstance, @no
tree.ssaflags = [IR_FLAG_NULL]
tree.rettype = Core.Typeof(val)
tree.edges = Core.svec()
tree.nargs = UInt(nargs)
tree.isva = method.isva
set_inlineable!(tree, true)
tree.parent = mi
return tree
Expand Down
5 changes: 3 additions & 2 deletions Compiler/src/typeutils.jl
Original file line number Diff line number Diff line change
Expand Up @@ -277,8 +277,9 @@ function _switchtupleunion(𝕃::AbstractLattice, t::Vector{Any}, i::Int, tunion
_switchtupleunion(𝕃, t, i - 1, tunion, origt)
end
t[i] = origti
elseif has_extended_unionsplit(𝕃) && !isa(ti, Const) && !isvarargtype(ti) && isa(widenconst(ti), Union)
for ty in uniontypes(ti)
elseif (has_extended_unionsplit(𝕃) && !isa(ti, Const) && !isvarargtype(ti) &&
(wty = widenconst(ti); isa(wty, Union)))
for ty in uniontypes(wty)
t[i] = ty
_switchtupleunion(𝕃, t, i - 1, tunion, origt)
end
Expand Down
9 changes: 9 additions & 0 deletions Compiler/test/inference.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2591,6 +2591,15 @@ end == Integer
Val(isdefined(xxx.value, :x))
end == Val{true}

# Test union splitting for MustAlias
struct GetSomethingA; x::Union{Nothing,Int}; end
struct GetSomethingB; x::Int; end
getsomethingx(a::GetSomethingA) = something(a.x, 0)
getsomethingx(b::GetSomethingB) = b.x
@test Base.infer_return_type((Union{GetSomethingA,GetSomethingB},); interp=MustAliasInterpreter()) do x
getsomethingx(x)
end == Int

@testset "issue #56913: `BoundsError` in type inference" begin
R = UnitRange{Int}
@test Type{AbstractVector} == Base.infer_return_type(Base.promote_typeof, Tuple{R, R, Vector{Any}, Vararg{R}})
Expand Down
16 changes: 16 additions & 0 deletions Compiler/test/irpasses.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2059,3 +2059,19 @@ let src = code_typed1((Vector{Any},)) do xs
end
@test count(iscall((src, Core.svec)), src.code) == 1
end

# Negative NewSSAValue ids must be preserved during compaction
function f_57827(op, init, x)
v = op(init, x)
i = 0
while i < 1
v = op(v, x)
i += 1
end
return v
end
let rf = (acc, x) -> ifelse(x > acc[1], (x,), (acc[1],))
@test f_57827(rf, (0.0,), 1) === (1,)
ir = first(only(Base.code_ircode(f_57827, (typeof(rf), Tuple{Float64}, Int64); optimize_until="CC: SROA")))
@test ir isa Compiler.IRCode
end
43 changes: 43 additions & 0 deletions Compiler/test/ssair.jl
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,21 @@ let cfg = CFG(BasicBlock[
@test length(compact.cfg_transform.result_bbs) == 4 && 0 in compact.cfg_transform.result_bbs[3].preds
end

# Test that removing a self-edge during compaction only scans compacted phi statements.
let code = Any[
# Block 1
Compiler.GotoNode(2),
# Block 2
Core.PhiNode(Int32[1, 3], Any[1, 2]),
Compiler.GotoIfNot(true, 2),
# Block 3
Compiler.ReturnNode(0),
]
ir = make_ircode(code)
ir = Compiler.compact!(ir, true)
@test Compiler.verify_ir(ir) === nothing
end

# Issue #32579 - Optimizer bug involving type constraints
function f32579(x::Int, b::Bool)
if b
Expand Down Expand Up @@ -838,3 +853,31 @@ end
let ir = Base.code_ircode(_worker_task57153, (), optimize_until="CC: COMPACT_2")[1].first
@test findfirst(x->x==0, ir.cfg.blocks[1].preds) !== nothing
end

# codeinfo_for_const should set nargs and isva
let
_const_return_func(@nospecialize(x)) = 42
mi = Compiler.specialize_method(only(methods(_const_return_func)), Tuple{typeof(_const_return_func), Int}, Core.svec())
ci = Compiler.codeinfo_for_const(Compiler.NativeInterpreter(), mi, 42)
@test ci.nargs == 2
@test ci.isva == false
# inflate_ir! should succeed now that nargs/isva are set
ir = Compiler.inflate_ir!(ci, mi)
@test ir isa Compiler.IRCode
end

# Tests that CFG edge cleanup during compaction doesn't corrupt iteration codegen.
Trips_60660 = let
Ts = (Float64, Float32)
[(Ta, Tb, Tc) for Ta in Ts for Tb in Ts for Tc in Ts]
end
@test Trips_60660 == [
(Float64, Float64, Float64),
(Float64, Float64, Float32),
(Float64, Float32, Float64),
(Float64, Float32, Float32),
(Float32, Float64, Float64),
(Float32, Float64, Float32),
(Float32, Float32, Float64),
(Float32, Float32, Float32),
]
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ default: $(JULIA_BUILD_MODE) # contains either "debug" or "release"
all: debug release

# sort is used to remove potential duplicates
DIRS := $(sort $(build_bindir) $(build_depsbindir) $(build_libdir) $(build_private_libdir) $(build_libexecdir) $(build_includedir) $(build_includedir)/julia $(build_sysconfdir)/julia $(build_datarootdir)/julia $(build_datarootdir)/julia/stdlib $(build_man1dir))
DIRS := $(sort $(build_bindir) $(build_depsbindir) $(build_libdir) $(build_private_libdir) $(build_private_libexecdir) $(build_libexecdir) $(build_includedir) $(build_includedir)/julia $(build_sysconfdir)/julia $(build_datarootdir)/julia $(build_datarootdir)/julia/stdlib $(build_man1dir))
ifneq ($(BUILDROOT),$(JULIAHOME))
BUILDDIRS := $(BUILDROOT) $(addprefix $(BUILDROOT)/,base src src/flisp src/support src/clangsa cli doc deps stdlib test test/clangsa test/embedding test/gcext test/llvmpasses)
BUILDDIRMAKE := $(addsuffix /Makefile,$(BUILDDIRS)) $(BUILDROOT)/sysimage.mk $(BUILDROOT)/pkgimage.mk
Expand Down
4 changes: 2 additions & 2 deletions base/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -183,14 +183,14 @@ endif
endef

# libexec executables
symlink_p7zip: $(build_bindir)/7z$(EXE)
symlink_p7zip: $(build_private_libexecdir)/7z$(EXE)

ifneq ($(USE_SYSTEM_P7ZIP),0)
SYMLINK_SYSTEM_LIBRARIES += symlink_p7zip
7Z_PATH := $(shell which 7z$(EXE))
endif

$(build_bindir)/7z$(EXE):
$(build_private_libexecdir)/7z$(EXE):
[ -e "$(7Z_PATH)" ] && \
rm -f "$@" && \
ln -sf "$(7Z_PATH)" "$@"
Expand Down
7 changes: 4 additions & 3 deletions base/fastmath.jl
Original file line number Diff line number Diff line change
Expand Up @@ -297,12 +297,13 @@ exp10_fast(x::Union{Float32,Float64}) = Base.Math.exp10_fast(x)

# builtins

@inline function pow_fast(x::Float64, y::Integer)
@inline function pow_fast(x::Union{Float32, Float64}, y::Integer)
z = y % Int32
z == y ? pow_fast(x, z) : x^y
end
pow_fast(x::Float32, y::Integer) = x^y
pow_fast(x::Float64, y::Int32) = ccall("llvm.powi.f64.i32", llvmcall, Float64, (Float64, Int32), x, y)
@inline pow_fast(x::Float16, y::Integer) = Float16(pow_fast(Float32(x), y))
pow_fast(x::Float64, y::Int32) = ccall("llvm.powi", llvmcall, Float64, (Float64, Int32), x, y)
pow_fast(x::Float32, y::Int32) = ccall("llvm.powi", llvmcall, Float32, (Float32, Int32), x, y)
pow_fast(x::FloatTypes, ::Val{p}) where {p} = pow_fast(x, p) # inlines already via llvm.powi
@inline pow_fast(x, v::Val) = Base.literal_pow(^, x, v)

Expand Down
2 changes: 1 addition & 1 deletion base/file.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1059,7 +1059,7 @@ struct DirEntry
end
function Base.getproperty(obj::DirEntry, p::Symbol)
if p === :path
return joinpath(obj.dir, obj.name)
return joinpath(getfield(obj, :dir), getfield(obj, :name))
else
return getfield(obj, p)
end
Expand Down
2 changes: 1 addition & 1 deletion base/meta.jl
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ function _partially_inline!(@nospecialize(x), slot_replacements::Vector{Any},
end
return x
elseif head === :cfunction
@assert !isa(type_signature, UnionAll) || !isempty(spvals)
@assert !isa(type_signature, UnionAll) || !isempty(static_param_values)
if !isa(x.args[2], QuoteNode) # very common no-op
x.args[2] = _partially_inline!(x.args[2], slot_replacements, type_signature,
static_param_values, slot_offset,
Expand Down
13 changes: 7 additions & 6 deletions base/precompilation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -845,7 +845,7 @@ function _precompilepkgs(pkgs::Union{Vector{String}, Vector{PkgId}},
write(get!(IOBuffer, std_outputs, pkg_config), str)
if !in(pkg_config, taskwaiting) && occursin("waiting for IO to finish", str)
!fancyprint && @lock print_lock begin
println(io, pkg.name, color_string(" Waiting for background task / IO / timer.", Base.warn_color()))
println(io, full_name(ext_to_parent, pkg), color_string(" Waiting for background task / IO / timer.", Base.warn_color()))
end
push!(taskwaiting, pkg_config)
end
Expand Down Expand Up @@ -1015,7 +1015,8 @@ function _precompilepkgs(pkgs::Union{Vector{String}, Vector{PkgId}},
try
# allows processes to wait if another process is precompiling a given package to
# a functionally identical package cache (except for preferences, which may differ)
t = @elapsed ret = precompile_pkgs_maybe_cachefile_lock(io, print_lock, fancyprint, pkg_config, pkgspidlocked, hascolor, parallel_limiter, ignore_loaded) do
fullname = full_name(ext_to_parent, pkg)
t = @elapsed ret = precompile_pkgs_maybe_cachefile_lock(io, print_lock, fancyprint, pkg_config, pkgspidlocked, hascolor, parallel_limiter, ignore_loaded, fullname) do
Base.with_logger(Base.NullLogger()) do
# whether to respect already loaded dependency versions
keep_loaded_modules = !ignore_loaded
Expand Down Expand Up @@ -1094,7 +1095,7 @@ function _precompilepkgs(pkgs::Union{Vector{String}, Vector{PkgId}},
str = sprint(context=io) do iostr
if !quick_exit
if fancyprint # replace the progress bar
what = isempty(requested_pkgids) ? "packages finished." : "$(join((p.name for p in requested_pkgids), ", ", " and ")) finished."
what = isempty(requested_pkgids) ? "packages finished." : "$(join((full_name(ext_to_parent, p) for p in requested_pkgids), ", ", " and ")) finished."
printpkgstyle(iostr, :Precompiling, what)
end
plural = length(configs) > 1 ? "dependency configurations" : ndeps == 1 ? "dependency" : "dependencies"
Expand Down Expand Up @@ -1157,7 +1158,7 @@ function _precompilepkgs(pkgs::Union{Vector{String}, Vector{PkgId}},
for (pkg_config, err) in failed_deps
dep, config = pkg_config
if strict || (dep in project_deps)
print(err_str, "\n", dep.name, " ")
print(err_str, "\n", full_name(ext_to_parent, dep), " ")
for cfg in config[1]
print(err_str, cfg, " ")
end
Expand Down Expand Up @@ -1205,7 +1206,7 @@ function _color_string(cstr::String, col::Union{Int64, Symbol}, hascolor)
end

# Can be merged with `maybe_cachefile_lock` in loading?
function precompile_pkgs_maybe_cachefile_lock(f, io::IO, print_lock::ReentrantLock, fancyprint::Bool, pkg_config, pkgspidlocked, hascolor, parallel_limiter::Base.Semaphore, ignore_loaded::Bool)
function precompile_pkgs_maybe_cachefile_lock(f, io::IO, print_lock::ReentrantLock, fancyprint::Bool, pkg_config, pkgspidlocked, hascolor, parallel_limiter::Base.Semaphore, ignore_loaded::Bool, fullname)
if !(isdefined(Base, :mkpidlock_hook) && isdefined(Base, :trymkpidlock_hook) && Base.isdefined(Base, :parse_pidfile_hook))
return f()
end
Expand All @@ -1226,7 +1227,7 @@ function precompile_pkgs_maybe_cachefile_lock(f, io::IO, print_lock::ReentrantLo
"another machine (hostname: $hostname, pid: $pid, pidfile: $pidfile)"
end
!fancyprint && @lock print_lock begin
println(io, " ", pkg.name, _color_string(" Being precompiled by $(pkgspidlocked[pkg_config])", Base.info_color(), hascolor))
println(io, " ", fullname, _color_string(" Being precompiled by $(pkgspidlocked[pkg_config])", Base.info_color(), hascolor))
end
Base.release(parallel_limiter) # release so other work can be done while waiting
try
Expand Down
5 changes: 3 additions & 2 deletions base/stacktraces.jl
Original file line number Diff line number Diff line change
Expand Up @@ -273,9 +273,10 @@ function show_spec_linfo(io::IO, frame::StackFrame)
if linfo isa Union{MethodInstance, CodeInstance}
def = frame_method_or_module(frame)
if def isa Module
Base.show_mi(io, linfo, #=from_stackframe=#true)
Base.show_mi(io, linfo::MethodInstance, #=from_stackframe=#true)
else
show_spec_sig(io, def, frame_mi(frame).specTypes)
mi = frame_mi(frame)::MethodInstance
show_spec_sig(io, def::Method, mi.specTypes)
end
else
m = linfo::Method
Expand Down
17 changes: 5 additions & 12 deletions base/sysinfo.jl
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,6 @@ const WORD_SIZE = Core.sizeof(Int) * 8
The number of system "clock ticks" per second, corresponding to `sysconf(_SC_CLK_TCK)` on
POSIX systems, or `0` if it is unknown.
CPU times, e.g. as returned by `Sys.cpu_info()`, are in units of ticks, i.e. units of `1 / Sys.SC_CLK_TCK` seconds if `Sys.SC_CLK_TCK > 0`.
"""
global SC_CLK_TCK::Clong

Expand Down Expand Up @@ -202,8 +200,7 @@ The `CPUinfo` type is a mutable struct with the following fields:
- `cpu_times!idle::UInt64`: Time spent in idle mode. CPU state shows the CPU time that's not actively being used.
- `cpu_times!irq::UInt64`: Time spent handling interrupts. CPU state shows the amount of time the CPU has been servicing hardware interrupts.
The times are in units of `1/Sys.SC_CLK_TCK` seconds if `Sys.SC_CLK_TCK > 0`; otherwise they are in
unknown units.
The times are in units of milliseconds.
Note: Included in the detailed system information via `versioninfo(verbose=true)`.
"""
Expand All @@ -224,24 +221,20 @@ CPUinfo(info::UV_cpu_info_t) = CPUinfo(unsafe_string(info.model), info.speed,
public CPUinfo

function _show_cpuinfo(io::IO, info::Sys.CPUinfo, header::Bool=true, prefix::AbstractString=" ")
tck = SC_CLK_TCK
if header
println(io, info.model, ": ")
print(io, " "^length(prefix))
println(io, " ", lpad("speed", 5), " ", lpad("user", 9), " ", lpad("nice", 9), " ",
lpad("sys", 9), " ", lpad("idle", 9), " ", lpad("irq", 9))
end
print(io, prefix)
unit = tck > 0 ? " s " : " "
tc = max(tck, 1)
ms_per_s = 1000
unit = " s "
d(i, unit=unit) = lpad(string(round(Int64,i)), 9) * unit
print(io,
lpad(string(info.speed), 5), " MHz ",
d(info.cpu_times!user / tc), d(info.cpu_times!nice / tc), d(info.cpu_times!sys / tc),
d(info.cpu_times!idle / tc), d(info.cpu_times!irq / tc, tck > 0 ? " s" : " "))
if tck <= 0
print(io, "ticks")
end
d(info.cpu_times!user / ms_per_s), d(info.cpu_times!nice / ms_per_s), d(info.cpu_times!sys / ms_per_s),
d(info.cpu_times!idle / ms_per_s), d(info.cpu_times!irq / ms_per_s))
end

show(io::IO, ::MIME"text/plain", info::CPUinfo) = _show_cpuinfo(io, info, true, " ")
Expand Down
10 changes: 9 additions & 1 deletion base/timing.jl
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ end
@static if Base.USING_STOCK_GC
# must be kept in sync with `src/gc-stock.h``
const FULL_SWEEP_REASONS = [:FULL_SWEEP_REASON_SWEEP_ALWAYS_FULL, :FULL_SWEEP_REASON_FORCED_FULL_SWEEP,
:FULL_SWEEP_REASON_USER_MAX_EXCEEDED, :FULL_SWEEP_REASON_LARGE_PROMOTION_RATE]
:FULL_SWEEP_REASON_USER_MAX_EXCEEDED, :FULL_SWEEP_REASON_LARGE_PROMOTION_RATE, :FULL_SWEEP_REASON_LARGE_HEAP_GROWTH]
end

"""
Expand Down Expand Up @@ -498,6 +498,14 @@ function is_simply_call(@nospecialize ex)
Meta.isexpr(a, :..., 1) && is_simple_atom(a.args[1]) && continue
return false
end
# Ensure Expr(:call, .+, ...) get wrapped
if ex.args[1] isa Symbol
sa = String(ex.args[1]::Symbol)
startswith(sa, ".") &&
!endswith(sa, ".") &&
isoperator(Symbol(sa[2:end])) &&
return false
end
return true
end

Expand Down
4 changes: 2 additions & 2 deletions deps/JuliaSyntax.version
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
JULIASYNTAX_BRANCH = main
JULIASYNTAX_SHA1 = 46723f071d5b2efcb21ca6757788028afb91cc13
JULIASYNTAX_BRANCH = backports-julialang-1.12
JULIASYNTAX_SHA1 = de4d1cd21cf13501c65b91c68c2fd5c9aa704e97
JULIASYNTAX_GIT_URL := https://github.com/JuliaLang/JuliaSyntax.jl.git
JULIASYNTAX_TAR_URL = https://api.github.com/repos/JuliaLang/JuliaSyntax.jl/tarball/$1

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
420f41ff75161d7ee4e3a564228de206
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fbc2cc1b2dd1903c15e33d86a4f1f84807cd7988cd169c62fea58a71af06694deb5d3882a772ab9599ee878bdaa51e069e5a399e565f03b0eb2c99c2b5ec4759
Loading