]> git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
Merge branch 'master' of github.com:graphitemaster/gmqcc
authorDale Weiler <killfieldengine@gmail.com>
Mon, 7 Jan 2013 12:40:03 +0000 (12:40 +0000)
committerDale Weiler <killfieldengine@gmail.com>
Mon, 7 Jan 2013 12:40:03 +0000 (12:40 +0000)
Makefile
ir.c
opts.def
parser.c

index 876bdd965c0685f7cb37d778b7f42350fd91db97..52e7270fd66a705fe4e8c9b87f89791c4406a55d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,7 @@ CYGWIN  = $(findstring CYGWIN,  $(UNAME))
 MINGW   = $(findstring MINGW32, $(UNAME))
 
 CC     ?= clang
-CFLAGS += -Wall -Wextra -I. -fno-strict-aliasing -fsigned-char -O2
+CFLAGS += -Wall -Wextra -I. -fno-strict-aliasing -fsigned-char
 CFLAGS += -DGMQCC_GITINFO="`git describe`"
 #turn on tons of warnings if clang is present
 # but also turn off the STUPID ONES
diff --git a/ir.c b/ir.c
index afe4a40d1d5258988dac2e665f43c75a37faca21..6ac74e868c5a8f0610a08d310d05499a87d4495d 100644 (file)
--- a/ir.c
+++ b/ir.c
@@ -2884,7 +2884,7 @@ tailcall:
             if (onfalse->generated) {
                 /* fixup the jump address */
                 code_statements[stidx].o2.s1 = (onfalse->code_start) - (stidx);
-                if (code_statements[stidx].o2.s1 == 1) {
+                if (stidx+2 == vec_size(code_statements) && code_statements[stidx].o2.s1 == 1) {
                     code_statements[stidx] = code_statements[stidx+1];
                     if (code_statements[stidx].o1.s1 < 0)
                         code_statements[stidx].o1.s1++;
@@ -2909,7 +2909,7 @@ tailcall:
                     code_push_statement(&stmt, instr->context.line);
                 return true;
             }
-            else if (code_statements[stidx].o2.s1 == 1) {
+            else if (stidx+2 == vec_size(code_statements) && code_statements[stidx].o2.s1 == 1) {
                 code_statements[stidx] = code_statements[stidx+1];
                 if (code_statements[stidx].o1.s1 < 0)
                     code_statements[stidx].o1.s1++;
index 22e2dab4b984c912d7dfb7805e5b21a8f30d8a1c..3c83420f787145d23f727aa638901b7e0626e192 100644 (file)
--- a/opts.def
+++ b/opts.def
@@ -91,7 +91,7 @@
 
 #ifdef GMQCC_TYPE_OPTIMIZATIONS
     GMQCC_DEFINE_FLAG(PEEPHOLE,             1)
-    GMQCC_DEFINE_FLAG(LOCAL_TEMPS,          3)
+    GMQCC_DEFINE_FLAG(LOCAL_TEMPS,          4)
     GMQCC_DEFINE_FLAG(GLOBAL_TEMPS,         3)
     GMQCC_DEFINE_FLAG(TAIL_RECURSION,       1)
     GMQCC_DEFINE_FLAG(TAIL_CALLS,           2)
index aa3c38e5ae6d7eb434b6b6b591d2adef9832a814..d374af7329a2a272ddc1cc3a0ce31e1a2fe305ee 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -2165,6 +2165,8 @@ static bool parse_if(parser_t *parser, ast_block *block, ast_expression **out)
         ast_delete(cond);
         return false;
     }
+    if (!ontrue)
+        ontrue = (ast_expression*)ast_block_new(parser_ctx(parser));
     /* check for an else */
     if (!strcmp(parser_tokval(parser), "else")) {
         /* parse into the 'else' branch */