]> git.sur5r.net Git - cc65/commitdiff
Don't allow to call subroutines that aren't actual functions.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 4 Aug 2009 19:23:15 +0000 (19:23 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 4 Aug 2009 19:23:15 +0000 (19:23 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3994 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/codeseg.c

index b8466a492447e52a19fbac247507c5d6afd1e55d..f47e4dd5095d1ced0e32f495438edcd8858874ec 100644 (file)
@@ -337,13 +337,13 @@ static CodeEntry* ParseInsn (CodeSeg* S, LineInfo* LI, const char* L)
                if (*L == ',') {
                    L = SkipSpace (L+1);
                    if (toupper (*L) != 'Y') {
-                       Error ("ASM code error: `Y' expected");
+                       Error ("ASM code error: `Y' expected");
                        return 0;
                    }
                    L = SkipSpace (L+1);
                    if (*L != '\0') {
-                       Error ("ASM code error: syntax error");
-                       return 0;
+                       Error ("ASM code error: syntax error");
+                       return 0;
                    }
                    AM = AM65_ZP_INDY;
                } else if (*L == '\0') {
@@ -375,6 +375,12 @@ static CodeEntry* ParseInsn (CodeSeg* S, LineInfo* LI, const char* L)
                } else if (GetZPInfo(Arg) != 0) {
                    AM = AM65_ZP;
                } else {
+                    /* Check for subroutine call to local label */
+                    if ((OPC->Info & OF_CALL) && IsLocalLabelName (Arg)) {
+                        Error ("ASM code error: "
+                               "Cannot use local label `%s' in subroutine call",
+                               Arg);
+                    }
                    AM = AM65_ABS;
                }
            } else if (*L == ',') {
@@ -387,20 +393,20 @@ static CodeEntry* ParseInsn (CodeSeg* S, LineInfo* LI, const char* L)
                    Reg = toupper (*L);
                    L = SkipSpace (L+1);
                    if (Reg == 'X') {
-                       if (GetZPInfo(Arg) != 0) {
-                           AM = AM65_ZPX;
-                       } else {
-                           AM = AM65_ABSX;
-                       }
+                       if (GetZPInfo(Arg) != 0) {
+                           AM = AM65_ZPX;
+                       } else {
+                           AM = AM65_ABSX;
+                       }
                    } else if (Reg == 'Y') {
-                       AM = AM65_ABSY;
+                       AM = AM65_ABSY;
                    } else {
-                       Error ("ASM code error: syntax error");
-                       return 0;
+                       Error ("ASM code error: syntax error");
+                       return 0;
                    }
                    if (*L != '\0') {
-                       Error ("ASM code error: syntax error");
-                       return 0;
+                       Error ("ASM code error: syntax error");
+                       return 0;
                    }
                }
            }