https://github.com/JuliaLang/julia

sort by:
Revision Author Date Message Commit Date
1535e29 WIP: Fast 1-d in-place circshift! I thought I needed this, but turns out I probably don't. I still think it could be useful in the future, so I'm putting it here, in case somebody (maybe me in the future) ever needs this. There are three algorithms implemented here, as well as a selection heuristic for switching between them. The three algorithms are: 1. Out-of-place with a stack buffer 2. Batched Cycle-chasing in place 3. The Knuth Triple-Reverse trick Of these, the cycle chasing algorithm has optimal memory complexity (by doing `N` loads and stores), but conventional wisdom is that it is slower than triple-reverse (which does 2N memory operations) because of cache inefficiencies. I found this to be true for non-batched cycle chasing, but not for batched cycle chasing once the batching factor was about a cache line or so. As such, the polyalgorithm does the following: a. For small arrays, use the on-stack copy b. Then, compute the GCD. If the problem admits large batching factors, do the batched cycle chasing algorithm. c. If not, use the triple reverse trick, which is less memory efficent, but has consistent performance (unlike cycle chasing whose performance depends on the batching factor). There are additional algorithms listed at https://github.com/scandum/rotate that could be investigated to replace the reversal fallback. There are variations that compute the GCD from the first cycle, but I found that to be unnecessary. For arrays small enough for the GCD computation cost to matter, we're using the on-stack copy anyway, and for anything larger, the GCD is negligible and we use it to make the polyalgorithm decision anyway. I think to finish this, all we'd need is - [] Some tests to make sure all the cases are covered (and fix cases that may be broken, I did some refactoring, without retesting those) - [] Ideally, a little more benchmarking to more carefully select the algorithmic cutovers. 18 October 2021, 00:07:01 UTC
4805d54 Merge pull request #42167 from krynju/kr/distributed-ref-count-race [Distributed] increment RRef ID counter atomically 12 September 2021, 21:19:43 UTC
211ed19 🤖 Bump the Tar stdlib from ffb3dd5 to 67f004d (#41909) Co-authored-by: Dilum Aluthge <dilum@aluthge.com> 12 September 2021, 03:18:51 UTC
0eba66c 🤖 Bump the Downloads stdlib from 848d374 to 5f1509d (#42129) Co-authored-by: Dilum Aluthge <dilum@aluthge.com> 12 September 2021, 03:18:35 UTC
45ad13b fix typos in Xoshiro RNG implementation (#42201) * fix typos in Xoshiro RNG implementation 11 September 2021, 19:37:34 UTC
5047920 CI (Buildkite, GHA): Allow any user with triage or commit permissions to retry all failed Buildkite jobs (#42138) 11 September 2021, 05:11:16 UTC
46453cd don't show limit warning during __init__ (#42214) 11 September 2021, 05:10:41 UTC
e65296f CI (Buildkite, code coverage): Fail the code coverage job is the coverage is suspiciously low (#42213) 11 September 2021, 04:29:12 UTC
ffac475 improve the inferrability of `isequal(::Any, ::Any)` (#42195) Currently, the return type of `isequal(::Any, ::Any)` is inferred as `Union{Bool,Missing}` because it takes the possibilities of e.g. `==(::Any, ::Missing)` into account. But actually `isequal` already handles every `missing` case by dispatch: <https://github.com/JuliaLang/julia/blob/2f00c5f6e2211ed1588976dbbe7b022148716d95/base/missing.jl#L80-L82> , and we can improve the inferrability by type annotation. 11 September 2021, 03:20:07 UTC
d7028da Merge pull request #42041 from JuliaLang/vc/llvm_13 Allow Julia to build on LLVM 13 10 September 2021, 19:21:40 UTC
1709f79 CI (Buildkite, code coverage): increase the value of `JULIA_WORKER_TIMEOUT` on the code coverage job (#42193) 10 September 2021, 18:40:45 UTC
c4f0d8b bugfix: properly import Base.cis into LinearAlgebra (#42164) Certain methods, e.g., `cis(::Union{RealHermSymComplexHerm,SymTridiagonal{<:Real}})`, were not imported properly. 10 September 2021, 16:28:04 UTC
77572bc Allow constant-propagation to be disabled (#42125) Our heuristics for constant propagation are imperfect (and probably never will be perfect), and I've now seen many examples of methods that no developer would ask to have const-propped get that treatment. In some cases the cost for latency/precompilation is very large. This renames `@aggressive_constprop` to `@constprop` and allows two settings, `:aggressive` and `:none`. Closes #38983 Co-authored-by: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Co-authored-by: Martin Holters <martin.holters@hsu-hh.de> 10 September 2021, 11:00:43 UTC
50ab3a9 Add full stops to doc strings for int128/uint128_str macros (#42196) 10 September 2021, 07:04:48 UTC
2f00c5f Fix some links in HISTORY.md (#42178) 10 September 2021, 02:11:33 UTC
5405994 Add a `@compile` directive to disable interpreter (#42128) We currently use a `while false; end` hack to disable to interpreter, and this is getting more widely used outside of base. Unfortunately, improvements to the interpreter that would allow us to interpret loops would defeat the intention. This allows developers to annotate blocks with `@compile` to specify that they want to force the compiler to run on this block. 10 September 2021, 00:09:25 UTC
f6b38a6 `Base.julia_cmd()`: correctly forward the `--sysimage-native-code=no` flag if it is provided (#42185) 09 September 2021, 22:29:43 UTC
655a1a4 Fix ⊊, ⊋ on non-Set arguments (#42155) 09 September 2021, 21:22:58 UTC
819c45b Merge pull request #40723 from thofma/patch-1 Documentation: Rebuild sysimage/julia with generic target for use with valgrind 09 September 2021, 19:47:44 UTC
9e0d8e9 [LLVM] Update patch list for LLVM 13 09 September 2021, 17:39:11 UTC
677ce6d [LLVM] Adapt to LLVM 13 changes 09 September 2021, 17:09:28 UTC
bf5ac8c [Serializer] make sure to set `CodeInfo.ssaflags` correctly (#42177) Makes sure the length of `ssaflags` matches that of `code`, so that the latest inference doesn't throw on IRs serialized from old versions. Ref: <https://github.com/JuliaLang/julia/pull/42149#issuecomment-915585946> 09 September 2021, 16:54:42 UTC
bea33d6 Bump LLVM version to fix x86 stackprobe issue (#42171) 09 September 2021, 13:45:40 UTC
1326e4b Revert "Update testenv.jl" This reverts commit edf54862b22a2e2704676b7738da0d88c2cfcb1d. 09 September 2021, 01:26:40 UTC
edf5486 Update testenv.jl 09 September 2021, 01:24:23 UTC
867d80d Use `unwrapva` in MethodError candidates (#42161) I found an example of a method declaration with an argument typed as `a::Vararg`, and this triggered an error in showing method candidates. It's always bad when there's an error triggered when handling an error. This PR makes the code more robust against such problems. It's worth noting that this type of method declaration shouldn't be used: it is better as `a...`. The only time you should explicitly use `Vararg` is when you are specifying both `T` and `N` in `Vararg{T,N}`. 08 September 2021, 21:27:58 UTC
3a775cf Add a hint about `exit()` to the help message when the user types `?` and presses enter (#41997) Co-authored-by: Jeff Bezanson <jeff.bezanson@gmail.com> Co-authored-by: Jeff Bezanson <jeff.bezanson@gmail.com> 08 September 2021, 17:51:04 UTC
df137dd fix 08 September 2021, 17:04:28 UTC
dba8a08 add `eachsplit` for iterative splitting (#39245) This moves the existing splitting implementation into an iterator named `eachsplit` and changes the definition of `split(...)` to `collect(eachsplit(...))`, plus a few edge cases. 08 September 2021, 16:21:41 UTC
ed3691f inference: run `find_throw_blocks` once before inference (#42149) With this commit, we mark `src.ssaflags` before inference, and optimizer will just observe them. Fixes #42148 08 September 2021, 15:54:35 UTC
15b9851 Eagerly do boundscheck when indexing into CartesianIndices (#42119) 08 September 2021, 13:25:58 UTC
9d5de6c Fix build failure from `WITH_DTRACE` on Darwin (#42146) 08 September 2021, 12:19:31 UTC
47797a1 (#42139) Fixes _is_mailto in resolution of autolink in Markdown module (#42140) 08 September 2021, 10:16:36 UTC
9e99af6 improve minor inferrabilities (#42141) 08 September 2021, 08:30:22 UTC
3a4198e inference: bail from const-prop if const-prop fails (#42112) Otherwise we can end up in an infinite cycle of attempting const-prop, and that failing. Also handle `Varargs` in method-lookup matching, which was the cause for which we could not compute the const-prop signature. Fixes #42097 08 September 2021, 06:32:49 UTC
62f0ccd InteractiveUtils: add `minsize` option to `varinfo` (#42116) 08 September 2021, 02:14:21 UTC
3aea11e Fix overflow when rounding (#42033) 07 September 2021, 14:51:23 UTC
d0d895e jl_cpu_threads: exclude big.LITTLE efficency cores (#42099) * jl_cpu_threads: exclude big.LITTLE efficency cores On big.LITTLE systems, we generally only want to spawn as many threads/tasks as there are performance cores. By default, we want to leave the efficiency cores alone, as they may end up choking on the heavy workloads we are likely to schedule. Even something as simple as starting `julia` and initializing OpenBLAS on each thread can cause a system-wide latency spike as the efficiency cores struggle to chew through the momentary workload. To fix this, we attempt to identify when we are running on a big.LITTLE system (the only one currently widely supported is the Apple M1), and we subtract out the known number of efficiency cores. Once macOS 12 is released, we will be able to use the official API for enumerating the perflevels of the available cores, demonstrated in this PR to pytorch's cpuinfo repository [0]. [0] https://github.com/pytorch/cpuinfo/blob/8ab2db2d405436f1014ed603021545b3b6b6f1ae/src/arm/mach/init.c#L161-L163 * whitespace 07 September 2021, 04:44:39 UTC
4541922 Fix typo in isapprox doc string (#41987) 06 September 2021, 23:29:28 UTC
d1fd016 🤖 Bump the Pkg stdlib from 7a35bbe9 to 252e8950 (#42130) Co-authored-by: Dilum Aluthge <dilum@aluthge.com> 06 September 2021, 23:29:11 UTC
e1669b6 Fix the `cmdlineargs` tests on Buildkite (#42118) 06 September 2021, 23:28:17 UTC
f2d03be filter out duplicate modules in auto-install search, fixes #42133 (#42134) 06 September 2021, 07:45:27 UTC
8812c5c Profile: Use two null block terminators (#42106) 04 September 2021, 13:28:52 UTC
876df79 fix #42078, improve the idempotency of callsite inlining (#42082) After #41328, inference can observe statement flags and try to re-infer a discarded source if it's going to be inlined. The re-inferred source will only be cached into the inference-local cache, and won't be cached globally. 04 September 2021, 06:36:41 UTC
c3d2903 remove `InteractiveUtils.dumptype` (#42093) It was broken (`TypeName.abstract`) is not defined anymore, so clearly has no users nor tests and can simply be deleted at this point. 04 September 2021, 06:35:45 UTC
027071f Fix small typo in performance-tips.md (#42103) 03 September 2021, 10:31:38 UTC
a163e37 InteractiveUtils: recursive correctly in varinfo, et al. (#42061) * InteractiveUtils: recursive correctly in varinfo, et al. Fixes #42045 03 September 2021, 09:18:26 UTC
3041991 typos: modifed -> modified (#42101) 03 September 2021, 07:00:42 UTC
e83b317 inference: propagate variable changes to all exception frames (#42081) * inference: propagate variable changes to all exception frames Fix #42022 * Update test/compiler/inference.jl * Update test/compiler/inference.jl Co-authored-by: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> * fixup! inference: propagate variable changes to all exception frames Co-authored-by: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> 03 September 2021, 01:21:33 UTC
03e7b23 inference: fix #42090, make sure not to wrap `Conditional` in `PartialStruct` (#42091) 02 September 2021, 21:41:29 UTC
bada80c Fix `sum()` and `prod()` for tuples (#41510) This PR aims to fix #39182 and #39183 by using the universal implementation of `prod` and `sum` from https://github.com/JuliaLang/julia/blob/97f817a379b0c3c5f9bb803427fe88a018ebfe18/base/reduce.jl#L588 However, the file `abstractarray.jl` is included way sooner, and it is crucial to have already a simplified version of `prod` function. We can specify a simplified version or `prod` only for a system-wide `Int` type that is sufficient to compile `Base`. ``` julia prod(x::Tuple{}) = 1 # This is consistent with the regular prod because there is no need for size promotion # if all elements in the tuple are of system size. prod(x::Tuple{Int, Vararg{Int}}) = *(x...) ``` Although the implementations are different, they lead to the same binary code for tuples containing ~~`UInt` and~~ `Int`. ``` julia julia> a = (1,2,3) (1, 2, 3) # Simplified version for tuples containing Int only julia> prod_simplified(x::Tuple{Int, Vararg{Int}}) = *(x...) julia> @code_native prod_simplified(a) .text ; ┌ @ REPL[1]:1 within `prod_simplified' ; │┌ @ operators.jl:560 within `*' @ int.jl:88 movq 8(%rdi), %rax imulq (%rdi), %rax imulq 16(%rdi), %rax ; │└ retq nop ; └ ``` ``` julia # Regular prod without the simplification julia> @code_native prod(a) .text ; ┌ @ reduce.jl:588 within `prod` ; │┌ @ reduce.jl:588 within `#prod#247` ; ││┌ @ reduce.jl:289 within `mapreduce` ; │││┌ @ reduce.jl:289 within `#mapreduce#240` ; ││││┌ @ reduce.jl:162 within `mapfoldl` ; │││││┌ @ reduce.jl:162 within `#mapfoldl#236` ; ││││││┌ @ reduce.jl:44 within `mapfoldl_impl` ; │││││││┌ @ reduce.jl:48 within `foldl_impl` ; ││││││││┌ @ tuple.jl:276 within `_foldl_impl` ; │││││││││┌ @ operators.jl:613 within `afoldl` ; ││││││││││┌ @ reduce.jl:81 within `BottomRF` ; │││││││││││┌ @ reduce.jl:38 within `mul_prod` ; ││││││││││││┌ @ int.jl:88 within `*` movq 8(%rdi), %rax imulq (%rdi), %rax ; │││││││││└└└└ ; │││││││││┌ @ operators.jl:614 within `afoldl` ; ││││││││││┌ @ reduce.jl:81 within `BottomRF` ; │││││││││││┌ @ reduce.jl:38 within `mul_prod` ; ││││││││││││┌ @ int.jl:88 within `*` imulq 16(%rdi), %rax ; │└└└└└└└└└└└└ retq nop ; └ ``` 02 September 2021, 19:44:01 UTC
1b80634 Merge pull request #42017 from JuliaLang/jn/optimize-atomics-3 atomics: optimize atomic modify operations (mostly) 02 September 2021, 19:03:58 UTC
c53669f avoid loading duplicate libraries (#42058) We will not use the duplicate, so best to try to avoid loading it. 02 September 2021, 18:20:59 UTC
c5af061 Profile: Thread and task-specific profiling (#41742) - Adds thread and task ids to profile samples - Implements thread and task selection for Profile.print() - Implements thread and task groupby options for Profile.print() - Add include_meta to Profile.fetch() which defaults to false to ensure backwards compat with external profiling tooling - store time of each profile sample (cycleclock) - add sleep_check_state to metadata and show % utilization 02 September 2021, 16:48:23 UTC
3aada59 Reland "change setup_stdio default method to support any IO (#40780)" (#40971) (#40973) This reverts commit 7edd1904b9be0088c65dfd4e8520a976db6ee5a3, and fixes a method type signature error, which caused TTY to get shutdown. 01 September 2021, 19:46:28 UTC
85518c8 atomics: optimize atomic modify operations (mostly) Lacking inlining, but now expressing the direct invoke: this gets us within about 2x of a primitive atomicrmw add. 01 September 2021, 17:55:11 UTC
aa421ff threads: fix semantic error in old Threads.Atomic 01 September 2021, 17:53:55 UTC
4598966 GMP: fix warning in init (#42062) 01 September 2021, 17:53:28 UTC
d8a8db2 [AllocOpt] fix iterator invalidation (#42059) We might previously accidentally visit this use after deletion, if the orig_inst ended up back in the workqueue. Fixes #41916 01 September 2021, 17:53:16 UTC
b5b0684 Avoid impossible unionall normalization (#42003) If the unionall bounds are inconsistent with the wrapper's bound, avoid throwing due to an impossible type instantiation. 01 September 2021, 17:43:37 UTC
b21d2de [REPL] doc: add context on how search mode works (#41988) 01 September 2021, 17:43:08 UTC
9954aaa Mention REPL help mode in getting started doc (#41663) 01 September 2021, 17:41:54 UTC
27a2266 Add `copy(::KeySet)` method and specialized `Set{T}(::KeySet)` method (#41836) 01 September 2021, 17:22:32 UTC
dd8d3c7 Improve getdict performance (#42057) Co-authored-by: Ian Butterworth <i.r.butterworth@gmail.com> 01 September 2021, 11:33:32 UTC
49e3aec Make return type of map inferrable with heterogeneous arrays (#42046) Inference is not able to detect the element type automatically, but we can do it manually since we know promote_typejoin is used for widening. This is similar to the approach used for `broadcast` at #30485. 01 September 2021, 08:20:44 UTC
2a0ab37 optimizer: supports callsite annotations of inlining, fixes #18773 (#41328) * optimizer: supports callsite annotations of inlining, fixes #18773 Enable `@inline`/`@noinline` annotations on function callsites. From #40754. Now `@inline` and `@noinline` can be applied to a code block and then the compiler will try to (not) inline calls within the block: ```julia @inline f(...) # The compiler will try to inline `f` @inline f(...) + g(...) # The compiler will try to inline `f`, `g` and `+` @inline f(args...) = ... # Of course annotations on a definition is still allowed ``` Here are couple of notes on how those callsite annotations will work: - callsite annotation always has the precedence over the annotation applied to the definition of the called function, whichever we use `@inline`/`@noinline`: ```julia @inline function explicit_inline(args...) # body end let @noinline explicit_inline(args...) # this call will not be inlined end ``` - when callsite annotations are nested, the innermost annotations has the precedence ```julia @noinline let a0, b0 = ... a = @inline f(a0) # the compiler will try to inline this call b = notinlined(b0) # the compiler will NOT try to inline this call return a, b end ``` They're both tested and included in documentations. * set ssaflags on `CodeInfo` construction * try to keep source if it will be force-inlined * give inlining when source isn't available * style nits * Update base/compiler/ssair/inlining.jl Co-authored-by: Jameson Nash <vtjnash@gmail.com> * Update src/method.c Co-authored-by: Jameson Nash <vtjnash@gmail.com> * fixup - remove preprocessed flags from `jl_code_info_set_ir` - fix duplicated definition warning - add and fix comments * more clean up * add caveat about the recursive call limitation * update NEWS.md Co-authored-by: Jameson Nash <vtjnash@gmail.com> 01 September 2021, 05:17:07 UTC
457764f inference: make getfield_tfunc more robust for abstract PartialStruct (#34541) We're currently careful never to make these. But good to be careful? refs #34513 31 August 2021, 17:15:04 UTC
613eea9 make failure to precompile a method return a value instead of a unconditionally warn (#41447) 31 August 2021, 15:34:01 UTC
bc4d49a Fix depwarn grammar (#42069) 31 August 2021, 14:30:02 UTC
92337b5 Fix a precision issue in `abstract_iteration` (#41839) If the first loop exits in the first iteration, the `statetype` is still `Bottom`. In that case, the new `stateordonet` needs to be determined with the two-arg version of `iterate` again. Explicitly test that inference produces a sound (and reasonably precise) result when splatting an iterator (in this case a long range) that allows constant-propagation up to the `MAX_TUPLE_SPLAT` limit. Fixes #41022 Co-authored-by: Jameson Nash <vtjnash@gmail.com> 30 August 2021, 20:44:44 UTC
915a212 Silence compiler warnings (#42056) 30 August 2021, 15:37:01 UTC
c914062 handle the condition in `in` when `step(r::AbstractRange)` equals 0 (#41974) * handle the condition in `in` when `step` equals 0 Using `in` when `step(r::AbstractRange) == 0` results in an error. Handle this case by using boolean logic for both the definitions to which this case applies (`x::Real` and `x::AbstractChar`). First, check if the step equals zero and if `x` (the value) equals the reference value before performing the invalid `mod` operation. Signed-off-by: Anant Thazhemadam <anant.thazhemadam@gmail.com> * add tests for `StepRangeLen` when step equals 0 Add two tests (one which passes and another which fails) each, for `in` with `StepRangeLen` that has step = 0, where `x` is of type `Real` and `AbstractChar`. Signed-off-by: Anant Thazhemadam <anant.thazhemadam@gmail.com> 30 August 2021, 05:12:28 UTC
11fabf1 Fix Sys.which test when running a debug build of Julia (#42050) The debug Julia executable is called `julia-debug`, so the test for `Sys.which("julia")` being the path to the current executable fails. 30 August 2021, 01:50:17 UTC
897c8e6 Add `intersect(::AbstractRange, ::AbstractVector)` (#41769) 29 August 2021, 18:44:42 UTC
d241297 allow vectors for indexing in getindex(::UniformScaling, ...) (#42032) 29 August 2021, 16:06:44 UTC
3ff8f86 infer eltype explicitly in LinRange (#42039) 28 August 2021, 20:23:29 UTC
6e91085 Add FreeBSD support to jl_get_rsp_from_ctx (#42038) This was a TODO item in a comment. 28 August 2021, 17:21:27 UTC
88a6376 doc: add missing `# Examples` headers to the docstrings in regex.jl (#34608) 28 August 2021, 11:03:23 UTC
10755f7 fix missing layout allocation (#42035) Fixes #41503 28 August 2021, 09:55:19 UTC
c2071a2 Reduced number of allocations for dense matrix exp (#42026) 28 August 2021, 08:56:46 UTC
f916b94 improve atomic docs (#42024) * improve atomic docs * Update base/docs/basedocs.jl Co-authored-by: Jameson Nash <vtjnash@gmail.com> * Update base/docs/basedocs.jl Co-authored-by: Jameson Nash <vtjnash@gmail.com> Co-authored-by: Jameson Nash <vtjnash@gmail.com> 28 August 2021, 05:36:12 UTC
f540501 minor refactor `try_compute_fieldidx_expr` (#42025) 28 August 2021, 05:34:57 UTC
6341fa5 inference: add missing `LimitedAccuracy` handlings (#42034) I found we need to handle `LimitedAccuracy` (i.e. collect its limitations into the current frame and unwrap its type) whenever we do inter-procedural inference. Especially, we need to handle it where we use `abstract_call_method` and `abstract_call_method_with_const_args`. Otherwise we may encounter nested `LimitedAccuracy`, which is really not expected. So this commit also adds the assertion that checks we never form nested `LimitedAccuracy`. I encountered errors due to this when analyzing JET itself by JET, probably because its codebase makes heavy use of `invoke`. I couldn't pack them up as simple test cases though. 28 August 2021, 05:33:10 UTC
6814f2b Mention doctest revise=true in CONTRIBUTING (#42027) xref #38258 27 August 2021, 14:01:30 UTC
1bbba21 Merge pull request #41795 from JuliaLang/jb/simpler_intersection simplify and improve type intersection algorithm a bit 26 August 2021, 18:43:30 UTC
690eae2 atomics: optimize modify operation (partially) (#41859) Optimize the load/store portion of the operations, but not yet the invoke part. 26 August 2021, 16:08:48 UTC
aa5ab4a Make section on returned function pointer say to use ccall (#41962) 26 August 2021, 15:53:03 UTC
c298e4e Rename shutdown() to closewrite() (#41995) This name was suggested in #24526 and * Has a good analogy to close(), so people are likely to be able to guess what it means. * Is more specific to IO (conversely, it's easy to imagine shutdown() being wanted for any number of things unrelated to closing the write side of an IO stream). 26 August 2021, 15:44:48 UTC
08f3422 codegen: parameter attributes on CFunction closures sticks (#41827) When CFunction closures are created an extra argument is added to the function signature for holding the closure. Make sure that the parameter attributes on already existing parameters are not shifted when adding that parameter. 26 August 2021, 15:44:27 UTC
8464929 REPL: tab completion for non-struct types (#41679) 26 August 2021, 15:42:53 UTC
82c4a27 fix ptrhash_remove (#42009) Same bug as 5e57c214f872083ccacafa0f753e794ec654a21a (#26833), same fix. 26 August 2021, 15:42:14 UTC
24876b7 streams: disable half-duplex operation support (#42005) A stream can continue to be read after closewrite, but cannot continue to be written to after seeing EOF. Replaces #42004 Replaces #41983 Fixes #41942 Refs #40783 26 August 2021, 15:41:16 UTC
f7506aa export `jl_resolve_globals_in_ir` (#42013) This would be very useful for external `AbstractInterpreter`s to infer (and possibly even optimize) toplevel thunks. 26 August 2021, 15:41:03 UTC
f1b5abc Improve performance of Symbol concatenation (#41992) 26 August 2021, 15:24:51 UTC
2445000 Fix #41975 - Dropped typecheck in GotoIfNot (#42010) Recall the reproducer from the issue: ``` julia> f() = (if nothing; end; unsafe_load(Ptr{Int}(0))) f (generic function with 1 method) julia> f() Unreachable reached at 0x7fb33bb50090 signal (4): Illegal instruction in expression starting at REPL[13]:1 unsafe_load at ./pointer.jl:105 [inlined] unsafe_load at ./pointer.jl:105 [inlined] ``` There were actually two places where we were dropping the GotoIfNot, one in type annotation after inference, one in SSA conversion. The one in SSA conversion was structural: When both branches target the same jump destination, the GotoIfNot would be dropped. This was fine in general, except that as shown above, GotoIfNot can actually itself have a side effect, namely throwing a type error if the condition is not a boolean. Thus in order to actually drop the node we need to prove that the error check does not fire. The reason we want to drop the GotoIfNot node here is that IRCode has an invariant that every basic block is in the predecessor list only once (otherwise PhiNodes would have to carry extra state regarding which branch they refer to). To fix this, insert an `Expr(:call, typecheck, _, Bool)` when dropping the GotoIfNot. We do lose the ability to distinguish the GotoIfNot from literal typechecks as a result, but at the moment they generate identical errors. If we ever wanted to dinstinguish them, we could create another typecheck intrinsic that throws a different error or use an approach like #41994. 26 August 2021, 05:40:22 UTC
afc504b Docstring for `;` Uses (#41952) 25 August 2021, 21:47:23 UTC
71757cd give wider/safer intersection result for vars used in both invariant and covariant position fixes #41738 25 August 2021, 18:44:15 UTC
13bcdf1 simplify and improve type intersection algorithm a bit This removes some code and makes a class of results more conservative, fixing some potential cases of unsoundness. 25 August 2021, 18:44:15 UTC
a11de31 debuginfo: store location of loop boundary (#41857) Since lowering always inserts gotos and other instructions after loop bodies, this allows debuggers to give a more useful location for these instructions. fixes JuliaDebug/JuliaInterpreter.jl#485 25 August 2021, 16:19:27 UTC
6b5bc3b Update LLVM libunwind to 12.0.1 (#41993) 25 August 2021, 15:07:23 UTC
back to top