BugFix: a break from a case label does not leave a loop
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Sun, 25 Nov 2007 19:34:41 +0000 (19:34 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Sun, 25 Nov 2007 19:34:41 +0000 (19:34 +0000)
[r18529]

lexer.c

diff --git a/lexer.c b/lexer.c
index bfc8875..9fa306d 100644 (file)
--- a/lexer.c
+++ b/lexer.c
@@ -356,7 +356,7 @@ static unsigned long long parse_int_string(const char *s, const char **endptr, i
                        case 'e': v <<= 4; v |= 0xe; break;
                        case 'f': v <<= 4; v |= 0xf; break;
                        default:
-                               break;
+                               goto end;
                        }
                }
                break;
@@ -375,7 +375,7 @@ static unsigned long long parse_int_string(const char *s, const char **endptr, i
                        case '6': v <<= 3; v |= 6; break;
                        case '7': v <<= 3; v |= 7; break;
                        default:
-                               break;
+                               goto end;
                        }
                }
                break;
@@ -396,7 +396,7 @@ static unsigned long long parse_int_string(const char *s, const char **endptr, i
                        case '8': v *= 10; v += 8; break;
                        case '9': v *= 10; v += 9; break;
                        default:
-                               break;
+                               goto end;
                        }
                }
                break;
@@ -404,6 +404,7 @@ static unsigned long long parse_int_string(const char *s, const char **endptr, i
                assert(0);
                break;
        }
+end:
        *endptr = s;
        return v;
 }