[llvm-c] LLVMAttribute possible bug

While writing bindings to LLVM for another language via the c api I noticed that
LLVMAlignment and LLVMStackAlignment do not use 1<<x like all the others,
but 31<<x and 7<x respectively (see below, or here: ). It’s likely this is as it is intended, but it does look out-of-place enough that I thought it might be a typo and I would like to know. Also, 1<<27 and 1<<28 get skipped over from LLVMStackAlignment to LLVMReturnsTwice:

While writing bindings to LLVM for another language via the c api I noticed that
LLVMAlignment and LLVMStackAlignment do not use 1<<x like all the others,
but 31<<x and 7<x respectively (see below, or here: http://llvm.org/docs/doxygen/html/Core_8h_source.html#l00148).
It's likely this is as it is intended, but it does look out-of-place enough that
I thought it might be a typo and I would like to know. Also, 1<<27 and 1<<28
get skipped over from LLVMStackAlignment to LLVMReturnsTwice:

This is intentional. LLVMAlignment is not just a bit, it's a 5 bit value so we reserve 5 bits for it. Same for the 3 bits LLVMStackAlignment uses.

- Ben

Hello

This is fine and intended. All this stuff works like bitmasks.

Thank you guys for the fast replies (!), now I can continue without worrying
about it.

-- Moritz