[Bug c/29592] New: Unending loops
After compilation test1.c with -O2 program loops unending.. Yeah I know is possible cause -fstrict-aliasing and program works compilated with -O2 -fno-strict-aliasing It works too if it was compilated just only with -fstrict-aliasing so it loops when some other optimization was turned on. It works too (not loops unending) if in loop while (* ((char *) str)) we `printf(0x%x\n, str);` (maybe some other code which evaluate and use that exp works too, i don't really know) [test2.c] If it's not gcc bug, I'm really sorry inconvience.. (something code like that was used in ekg2 #v+ (functions: http://webcvs.ekg2.org/_checkout_/ekg2/plugins/ncurses/ecurses.c?rev=1.3 usage: while (__S(str, 0)) { /* while (*str) */ __SN(str, 1); /* str++ */ attr++; } loops unending, however if __SN() was declared not inline it works... for me it was really strange, in testcases keyword 'inline' doesn't change behavior. #v- If it's not gcc bug, but mine, once again i'm really sorry... Sorry for me English too. testcase tested with: gcc (GCC) 4.1.1 (Gentoo 4.1.1-r1) gcc (GCC) 4.0.3 (Ubuntu 4.0.3-1ubuntu5) gcc (GCC) 4.1.0 (SUSE Linux) -- Summary: Unending loops Product: gcc Version: 4.1.1 Status: UNCONFIRMED Severity: minor Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: darkjames at darkjames dot ath dot cx GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29592
[Bug c/29592] Unending loops
--- Comment #1 from darkjames at darkjames dot ath dot cx 2006-10-25 16:12 --- Created an attachment (id=12490) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=12490action=view) First testcase First testcase loops unending with -O2, not loops with -O2 -fno-strict-aliasing || -fstrict-aliasing -O1 -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29592
[Bug c/29592] Unending loops
--- Comment #2 from darkjames at darkjames dot ath dot cx 2006-10-25 16:13 --- Created an attachment (id=12491) -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=12491action=view) Second testcase test1.c + added printf() to loop, not loops with -O2 -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29592
[Bug c/29592] Unending loops
--- Comment #3 from darkjames at darkjames dot ath dot cx 2006-10-25 16:20 --- By the way, it's possible to fix the code in other way than using unions? It just need to work both for wchar_t strings and normal strings... If you have some ideas how, it'll be nice if you give me some hint... maybe use char * everywhere and use: real_char_index = index * (config_use_unicode * sizeof(wchar_t)) ? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29592
[Bug c/29592] Unending loops
--- Comment #5 from darkjames at darkjames dot ath dot cx 2006-10-25 17:11 --- Yeah, I know, but why gcc generate good code if we add that printf to test1.c (test2.c) ? It's still wchar * - char * still aliasing violation. or if we replace: __SN(str, 1); with str = (CHAR_T *) (((char *) str) + 1); it generate good code too. it's still aliasing violation? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29592
[Bug c/29592] Unending loops
--- Comment #7 from darkjames at darkjames dot ath dot cx 2006-10-25 17:24 --- Ok, one more question, is it possible to gcc print some warnings about code like that? Cause even with -Wall it doesn't ;( gcc4 is quite more verbose than gcc3 so I think It'll be better to print warning about situation which doesn't even generate invalid code... which actually -Wstrict-aliasing does (according to manpage), but neither -Wstrict-aliasing nor -Wstrict-aliasing=2 prints warning in that testcode... I hope it's possible, thx for all. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29592