Reduce GiveUps in data_to_word
Some of the GiveUps in data_to_word could be compiler failures rather than generating code that aborts at runtime. This is better for the user since the failure is caught earlier. However, it requires making the compiler able to fail (CompileError) at data_to_word. For example, Cons tag becomes GiveUp if tag < dimword (:'a) DIV 16 which is decidable at compile time.
(An alternative hack, maybe, is to produce code that will produce an encoding error in asm (i.e., a jump that's too big). Probably too hard and hacky.)
One option: add a special NoCode to the AST (with same semantics as GiveUp), which is used to mark compile-time-checkable giveups.
Then have a pass that checks for such give ups and collects warnings (or refuses to continue).