From 3ce7717bd2264afe490e928874864e7cb36d0f9c Mon Sep 17 00:00:00 2001 From: uz Date: Tue, 4 Aug 2009 19:23:15 +0000 Subject: [PATCH] Don't allow to call subroutines that aren't actual functions. git-svn-id: svn://svn.cc65.org/cc65/trunk@3994 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/cc65/codeseg.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/cc65/codeseg.c b/src/cc65/codeseg.c index b8466a492..f47e4dd50 100644 --- a/src/cc65/codeseg.c +++ b/src/cc65/codeseg.c @@ -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; } } }