]> git.sur5r.net Git - cc65/commitdiff
A label must always be followed by a statement. Check for this.
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 1 Aug 2008 20:00:23 +0000 (20:00 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 1 Aug 2008 20:00:23 +0000 (20:00 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3860 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/stmt.c

index 3e4787ecf2a64ce8bdedcfa8655878598fdac3c0..ef150fad598b49286196a4e6eb0318d09ba53ab6 100644 (file)
 
 
 
+static void CheckLabelWithoutStatement (void)
+/* Called from Statement() after a label definition. Will check for a
+ * following closing curly brace. This means that a label is not followed
+ * by a statement which is required by the standard. Output an error if so.
+ */
+{
+    if (CurTok.Tok == TOK_RCURLY) {
+        Error ("Label at end of compound statement");
+    }
+}
+
+
+
 static void CheckTok (token_t Tok, const char* Msg, int* PendingToken)
 /* Helper function for Statement. Will check for Tok and print Msg if not
  * found. If PendingToken is NULL, it will the skip the token, otherwise
@@ -534,6 +547,7 @@ int Statement (int* PendingToken)
 
        /* Special handling for a label */
        DoLabel ();
+        CheckLabelWithoutStatement ();
 
     } else {
 
@@ -595,10 +609,12 @@ int Statement (int* PendingToken)
 
             case TOK_CASE:
                 CaseLabel ();
+                CheckLabelWithoutStatement ();
                 break;
 
             case TOK_DEFAULT:
                 DefaultLabel ();
+                CheckLabelWithoutStatement ();
                 break;
 
            default: