diff --git a/tccgen.c b/tccgen.c
index 5eabc702..5e52f29c 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -4522,9 +4522,13 @@ static void expr_cond(void)
     SValue sv;
     CType type, type1, type2;
 
-    if (const_wanted) {
+    if (const_wanted)
         expr_lor_const();
-        if (tok == '?') {
+    else
+        expr_lor();
+    if (tok == '?') {
+        next();
+        if ((vtop->r & (VT_VALMASK | VT_LVAL | VT_SYM)) == VT_CONST) {
             CType boolean;
             int c;
             boolean.t = VT_BOOL;
@@ -4532,7 +4536,6 @@ static void expr_cond(void)
             gen_cast(&boolean);
             c = vtop->c.i;
             vpop();
-            next();
             if (tok != ':' || !gnu_ext) {
                 vpop();
                 gexpr();
@@ -4544,10 +4547,7 @@ static void expr_cond(void)
             if (c)
                 vpop();
         }
-    } else {
-        expr_lor();
-        if (tok == '?') {
-            next();
+        else {
             if (vtop != vstack) {
                 /* needed to avoid having different registers saved in
                    each branch */
diff --git a/tests/tests2/78_vla_label.c b/tests/tests2/78_vla_label.c
index 0908e1bb..93a8b089 100644
--- a/tests/tests2/78_vla_label.c
+++ b/tests/tests2/78_vla_label.c
@@ -1,8 +1,7 @@
 #include <stdio.h>
 
 /* This test segfaults as of April 27, 2015. */
-
-void f(int argc)
+void f1(int argc)
 {
   char test[argc];
   if(0)
@@ -13,9 +12,21 @@ void f(int argc)
   goto label;
 }
 
+/* This segfaulted on 2015-11-19. */
+void f2(void)
+{
+    goto start;
+    {
+        int a[1 ? 1 : 1]; /* not a variable-length array */
+    start:
+        a[0] = 0;
+    }
+}
+
 int main()
 {
-  f(2);
+  f1(2);
+  f2();
 
   return 0;
 }