Skip to content

Commit b53cd8b

Browse files
martinholtersstevengj
authored andcommitted
Make broadcast return BitArray even if it cannot be inferred (#19854)
* Make broadcast return BitArray even if it cannot be inferred
1 parent 7a80fc9 commit b53cd8b

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

base/broadcast.jl

+5-1
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,11 @@ function broadcast_t(f, ::Type{Any}, shape, iter, As...)
244244
st = start(iter)
245245
I, st = next(iter, st)
246246
val = f([ _broadcast_getindex(As[i], newindex(I, keeps[i], Idefaults[i])) for i=1:nargs ]...)
247-
B = similar(Array{typeof(val)}, shape)
247+
if val isa Bool
248+
B = similar(BitArray, shape)
249+
else
250+
B = similar(Array{typeof(val)}, shape)
251+
end
248252
B[I] = val
249253
return _broadcast!(f, B, keeps, Idefaults, As, Val{nargs}, iter, st, 1)
250254
end

test/broadcast.jl

+12
Original file line numberDiff line numberDiff line change
@@ -424,3 +424,15 @@ end
424424
let f() = (a = 1; Base.Broadcast._broadcast_eltype((x, y) -> x + y + a, 1.0, 1.0))
425425
@test @inferred(f()) == Float64
426426
end
427+
428+
@testset "broadcast resulting in BitArray" begin
429+
let f(x) = x ? true : "false"
430+
ba = f.([true])
431+
@test ba isa BitArray
432+
@test ba == [true]
433+
a = f.([false])
434+
@test a isa Array{String}
435+
@test a == ["false"]
436+
@test f.([true, false]) == [true, "false"]
437+
end
438+
end

0 commit comments

Comments
 (0)