Thanks to Fariborz suggestion that I write a unit test I discovered that clang was not emitting the type signature information for global blocks.
While there I renamed his “types” field internally to “signature” to reflect its more natural name which I will be using in the runtime.
More significantly, I realized that we can recover the unused-by-the-runtime (1<<29) bit now that unconditionally mark (1<<30). This will enable the compiler to (re)use that bit sometime in the future.
Test “blocksignature.c” attached.
clang-4.patch (11.2 KB)
blocksignature.c (2.55 KB)