]> git.sur5r.net Git - cc65/commitdiff
Applied fix contributed by Greg King.
authorOliver Schmidt <ol.sc@web.de>
Tue, 8 Oct 2013 21:03:53 +0000 (23:03 +0200)
committerOliver Schmidt <ol.sc@web.de>
Tue, 8 Oct 2013 21:04:41 +0000 (23:04 +0200)
The code
  void foo(void)
  {
    int i;
    long l = 1L * i;
  }
triggered an
  Internal compiler error:
  Code generation messed up: StackPtr is -4, should be -2

Greg King: "We are lucky that the bug is simple -- a missing "else".  The result is that the compiler thinks that it does the opposite of what it actually does:  It thinks that it pushes the non-constant expression onto the stack. It doesn't; so, cc65's stack pointer is wrong."

src/cc65/expr.c

index 558967aa2719a3402e57b022e00dc317c52509c0..2125eb43026abad94a9ab743fa3c6b61e265d1bf 100644 (file)
@@ -1952,6 +1952,7 @@ static void hie_internal (const GenDesc* Ops,   /* List of generators */
             type = CF_CONST;
             if ((Gen->Flags & GEN_NOPUSH) == 0) {
                 g_push (ltype, 0);
+            } else {
                 ltype |= CF_REG;        /* Value is in register */
             }