type: Make an assert()ion independent of the last entry of an enum.
[cparser] / jump_target.c
index 6781d67..ebdf102 100644 (file)
@@ -1,3 +1,7 @@
+/*
+ * This file is part of cparser.
+ * Copyright (C) 2012 Christoph Mallon <christoph.mallon@gmx.de>
+ */
 #include "adt/util.h"
 #include "jump_target.h"
 
@@ -45,3 +49,21 @@ ir_node *enter_jump_target(jump_target *const tgt)
        set_cur_block(block);
        return block;
 }
+
+void enter_immature_jump_target(jump_target *const tgt)
+{
+       ir_node *jmp;
+       ir_node *block = tgt->block;
+       if (!block) {
+               /* Avoid unreachable loops by adding a Bad entry. */
+               jmp = new_Bad(mode_X);
+               goto new_block;
+       } else if (tgt->first) {
+               tgt->first = false;
+               jmp = new_r_Jmp(block);
+new_block:
+               tgt->block = block = new_immBlock();
+               add_immBlock_pred(block, jmp);
+       }
+       set_cur_block(block);
+}