From: <no...@so...> - 2002-08-06 11:23:45
|
Bugs item #591309, was opened at 2002-08-05 23:32 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=104664&aid=591309&group_id=4664 Category: C lexer/parser Group: None Status: Open Resolution: None Priority: 5 Submitted By: Mark Eklund (meklund) Assigned to: Hans-Bernhard Broeker (broeker) >Summary: Line ends inside string constant may confuse scanner Initial Comment: Cscope does not recognize bar() as a function in the below code. It does consider it to be a function called by fu(). There *is* a carriage return after the first quote below. This also doesn't work with version 12.9. $ cat test1.c fu () { char s[]={" "}; } bar () { } iwan-view7[cscope]$ ./cscope -d -q -L -1 fu test1.c fu 1 fu () iwan-view7[cscope]$ ./cscope -d -q -L -1 bar iwan-view7[cscope]$ ./cscope -d -q -L -0 fu test1.c fu 1 fu () iwan-view7[cscope]$ ./cscope -d -q -L -0 bar test1.c fu 8 bar () iwan-view7[cscope]$ ./cscope -V ./cscope: version 15.3 ---------------------------------------------------------------------- >Comment By: Hans-Bernhard Broeker (broeker) Date: 2002-08-06 13:23 Message: Logged In: YES user_id=27517 We're really caught between a rock and a hard place, here. There are two C syntax of roughly equal strength to take care of: *) An unterminated string or character constant (i.e. a dangling " or ' character). *) A string with an illegal literal newline in it. To the scanner, they both look exactly the same: a " not closed by another " within the same (or continued) line. Or the same for ' instead of ". It can't know which of the two it is facing. Unlike GCC, it can't delay the choice until the end-of-file, either. Currently, it interprets this case as a dangling quote character using an explicit lex rule. The real root of the problem is elsewhere, anyway: it's the superfluous pair of {} around the string constant. The second of these won't be seen, and that throws off the brace count which is needed to detect that a function has ended and a new one may thus be defined now. ---------------------------------------------------------------------- Comment By: Mark Eklund (meklund) Date: 2002-08-06 00:18 Message: Logged In: YES user_id=464051 FYI, it is a violation of ANSI C to have a newline character within a string constant. GCC doesn't complain about it unless you have -pedantic enabled. So you can close this if it is difficult. It would be nice if you fixed it though. iwan-view7[cscope]$ gcc -o test.o -c test1.c -Wall -pedantic test1.c:3: warning: string constant runs past end of line test1.c:2: warning: return-type defaults to `int' test1.c: In function `fu': test1.c:3: warning: ANSI C forbids newline in string constant test1.c:3: warning: unused variable `s' test1.c:6: warning: control reaches end of non-void function test1.c: At top level: test1.c:9: warning: return-type defaults to `int' test1.c: In function `bar': test1.c:10: warning: control reaches end of non-void function ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=104664&aid=591309&group_id=4664 |
From: SourceForge.net <no...@so...> - 2004-01-21 22:11:06
|
Bugs item #591309, was opened at 2002-08-05 23:32 Message generated for change (Comment added) made by broeker You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=104664&aid=591309&group_id=4664 Category: C lexer/parser Group: None >Status: Closed >Resolution: Wont Fix Priority: 5 Submitted By: Mark Eklund (meklund) Assigned to: Hans-Bernhard Broeker (broeker) Summary: Line ends inside string constant may confuse scanner Initial Comment: Cscope does not recognize bar() as a function in the below code. It does consider it to be a function called by fu(). There *is* a carriage return after the first quote below. This also doesn't work with version 12.9. $ cat test1.c fu () { char s[]={" "}; } bar () { } iwan-view7[cscope]$ ./cscope -d -q -L -1 fu test1.c fu 1 fu () iwan-view7[cscope]$ ./cscope -d -q -L -1 bar iwan-view7[cscope]$ ./cscope -d -q -L -0 fu test1.c fu 1 fu () iwan-view7[cscope]$ ./cscope -d -q -L -0 bar test1.c fu 8 bar () iwan-view7[cscope]$ ./cscope -V ./cscope: version 15.3 ---------------------------------------------------------------------- >Comment By: Hans-Bernhard Broeker (broeker) Date: 2004-01-21 20:03 Message: Logged In: YES user_id=27517 Closed as "won't fix". ---------------------------------------------------------------------- Comment By: Hans-Bernhard Broeker (broeker) Date: 2002-08-06 13:23 Message: Logged In: YES user_id=27517 We're really caught between a rock and a hard place, here. There are two C syntax of roughly equal strength to take care of: *) An unterminated string or character constant (i.e. a dangling " or ' character). *) A string with an illegal literal newline in it. To the scanner, they both look exactly the same: a " not closed by another " within the same (or continued) line. Or the same for ' instead of ". It can't know which of the two it is facing. Unlike GCC, it can't delay the choice until the end-of-file, either. Currently, it interprets this case as a dangling quote character using an explicit lex rule. The real root of the problem is elsewhere, anyway: it's the superfluous pair of {} around the string constant. The second of these won't be seen, and that throws off the brace count which is needed to detect that a function has ended and a new one may thus be defined now. ---------------------------------------------------------------------- Comment By: Mark Eklund (meklund) Date: 2002-08-06 00:18 Message: Logged In: YES user_id=464051 FYI, it is a violation of ANSI C to have a newline character within a string constant. GCC doesn't complain about it unless you have -pedantic enabled. So you can close this if it is difficult. It would be nice if you fixed it though. iwan-view7[cscope]$ gcc -o test.o -c test1.c -Wall -pedantic test1.c:3: warning: string constant runs past end of line test1.c:2: warning: return-type defaults to `int' test1.c: In function `fu': test1.c:3: warning: ANSI C forbids newline in string constant test1.c:3: warning: unused variable `s' test1.c:6: warning: control reaches end of non-void function test1.c: At top level: test1.c:9: warning: return-type defaults to `int' test1.c: In function `bar': test1.c:10: warning: control reaches end of non-void function ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=104664&aid=591309&group_id=4664 |