minimal reproduction: let a = 0: const int + 0: !int;
this happens because we have an invariant that type_promote must always return one of the input types, and that's not really possible in this case. we should probably investigate if that invariant is actually necessary
alternatively, this problem should go away once mutability overhaul happens and we only have one type flag