From: Ulya Trofimovich Date: Fri, 26 Sep 2014 21:35:28 +0000 (+0100) Subject: Added test for bug #46. X-Git-Tag: 0.14~18 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c41a3c3352dbbb7a590040d6d76058a1efb33bc3;p=re2c Added test for bug #46. --- diff --git a/re2c/test/bug46_infinite_loop.c b/re2c/test/bug46_infinite_loop.c new file mode 100644 index 00000000..9fff8ea0 --- /dev/null +++ b/re2c/test/bug46_infinite_loop.c @@ -0,0 +1,55 @@ +/* Generated by re2c */ +#line 1 "bug46_infinite_loop.re" +#include +#include + +int main(int argc, char** argv) +{ + char* YYCURSOR = argv[1]; + char* YYLIMIT = YYCURSOR + strlen(YYCURSOR); + #define YYFILL(n) do { } while(0) + + +#line 14 "" +{ + unsigned char yych; + +#line 13 "bug46_infinite_loop.re" + { } +#line 20 "" +} +#line 14 "bug46_infinite_loop.re" + + +/* BUG BEGINS HERE */ + +#line 27 "" +{ + unsigned char yych; + goto yy3; +yy4: + ++YYCURSOR; +yy3: + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + switch (yych) { + case 'a': goto yy7; + case 'b': + case 'c': goto yy6; + default: goto yy4; + } +yy6: +#line 18 "bug46_infinite_loop.re" + { printf("exit 0\n"); return 0; } +#line 45 "" +yy7: + ++YYCURSOR; + yych = *YYCURSOR; + goto yy6; +} +#line 19 "bug46_infinite_loop.re" + + + printf("exit 1\n"); + return 0; +} diff --git a/re2c/test/bug46_infinite_loop.re b/re2c/test/bug46_infinite_loop.re new file mode 100644 index 00000000..b32c46bc --- /dev/null +++ b/re2c/test/bug46_infinite_loop.re @@ -0,0 +1,23 @@ +#include +#include + +int main(int argc, char** argv) +{ + char* YYCURSOR = argv[1]; + char* YYLIMIT = YYCURSOR + strlen(YYCURSOR); + #define YYFILL(n) do { } while(0) + +/*!re2c +re2c:define:YYCTYPE = "unsigned char"; + +"" { } /* dummy rule, must exist for the bug to occur; actual rule is not important */ +*/ + +/* BUG BEGINS HERE */ +/*!re2c +[^abc]* "a"? { printf("exit 0\n"); return 0; } +*/ + + printf("exit 1\n"); + return 0; +}