# Is the "isbits union" optimization enabled in Julia 1.1?

**URL:** https://discourse.julialang.org/t/is-the-isbits-union-optimization-enabled-in-julia-1-1/27130
**Category:** General Usage
**Created:** [August 3, 2019, 3:01pm UTC](https://discourse.julialang.org/t/is-the-isbits-union-optimization-enabled-in-julia-1-1/27130 "2019-08-03T15:01:16Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![jonathan-laurent](https://avatars.discourse-cdn.com/v4/letter/j/ecae2f/32.png) [@jonathan-laurent](https://discourse.julialang.org/u/jonathan-laurent)
#### Post date: [August 3, 2019, 3:01pm UTC](https://discourse.julialang.org/t/is-the-isbits-union-optimization-enabled-in-julia-1-1/27130/1 "2019-08-03T15:01:16Z")

</div>

According to the [documentation](https://pkg.julialang.org/docs/julia/THl1k/1.1.1/devdocs/isbitsunionarrays.html), the so-called _“isbits Union optimization”_ should apply to the following type definition:

```julia
struct S
  x :: Union{UInt8, Int16}
end

```

Therefore, I would expect `isbitstype(S)` to be `true`. However, using Julia 1.1, I get:

```julia-repl
julia> isbitstype(S)
false

```

Does it mean that the isbits union type optimization does not apply in this case or am I misunderstanding the semantics of `isbitstype`? (I am using Julia 1.1)

---

<div class="post-metadata">

### Author: ![quinnj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/quinnj/32/11_2.png) [@quinnj](https://discourse.julialang.org/u/quinnj)
#### Post date: [August 3, 2019, 3:44pm UTC](https://discourse.julialang.org/t/is-the-isbits-union-optimization-enabled-in-julia-1-1/27130/2 "2019-08-03T15:44:47Z")

</div>

So the isbits Union optimizations didn’t affect the query of `isbitstype` directly; it’s a more internal optimization to _ **treat** _ these types of Unions as isbits in places where they can be optimized like Array and struct storage. Base defines internally a `Base.isbitsunion` function that returns if a specific Union type contains all `isbitstype` components.

---

<div class="post-metadata">

### Author: ![jonathan-laurent](https://avatars.discourse-cdn.com/v4/letter/j/ecae2f/32.png) [@jonathan-laurent](https://discourse.julialang.org/u/jonathan-laurent)
#### Post date: [August 3, 2019, 3:54pm UTC](https://discourse.julialang.org/t/is-the-isbits-union-optimization-enabled-in-julia-1-1/27130/3 "2019-08-03T15:54:35Z")

</div>

I see. In practice, is there any easy way to check whether or not the layout of a type features heap-allocated boxed values?

---

<div class="post-metadata">

### Author: ![quinnj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/quinnj/32/11_2.png) [@quinnj](https://discourse.julialang.org/u/quinnj)
#### Post date: [August 3, 2019, 4:21pm UTC](https://discourse.julialang.org/t/is-the-isbits-union-optimization-enabled-in-julia-1-1/27130/4 "2019-08-03T16:21:59Z")

</div>

Can you clarify what you’re trying to do?

---

<div class="post-metadata">

### Author: ![quinnj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/quinnj/32/11_2.png) [@quinnj](https://discourse.julialang.org/u/quinnj)
#### Post date: [August 3, 2019, 4:26pm UTC](https://discourse.julialang.org/t/is-the-isbits-union-optimization-enabled-in-julia-1-1/27130/5 "2019-08-03T16:26:09Z")

</div>

Oh, I see you edited your message. So there’s an open [PR](https://github.com/JuliaLang/julia/pull/32448) that will simplify things by having a single property of a DataType that indicates if it can be stored inline. Currently, you would just check if each field of a struct is `isbitstype` or `Base.isbitsunion`.

---

<div class="post-metadata">

### Author: ![jonathan-laurent](https://avatars.discourse-cdn.com/v4/letter/j/ecae2f/32.png) [@jonathan-laurent](https://discourse.julialang.org/u/jonathan-laurent)
#### Post date: [August 3, 2019, 4:48pm UTC](https://discourse.julialang.org/t/is-the-isbits-union-optimization-enabled-in-julia-1-1/27130/6 "2019-08-03T16:48:25Z")

</div>

Thanks!

---

<div class="post-metadata">

### Author: ![jameson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jameson/32/23_2.png) [@jameson](https://discourse.julialang.org/u/jameson)
#### Post date: [August 4, 2019, 2:10am UTC](https://discourse.julialang.org/t/is-the-isbits-union-optimization-enabled-in-julia-1-1/27130/7 "2019-08-04T02:10:15Z")

</div>

Yeah, that might be helpful, although it doesn’t address the Union case for the fields. That can be queried with datatype\_pointerfree (although as you might guess from the long name, it’s not something we usually expect user code to care about frequently)
