### KrK's blog

By KrK, 7 years ago,

Hello,

I want to share my a bit weird experience with you guys. I was solving Tavas in Kansas and had some serious problems with debugging my solution. In the end, it was clear that the idea was correct, I just needed to focus on the implementation. I rewrote a small chunk of code and was astonished by the fact that it was equivalent, but it got accepted. I tried to play with my implementations a little. And guess what? I found out that assert() on an obvious condition can make your code work!

Proof: the failed submission and the accepted submission (only with the assert added, where k should be 1).

I generally do not have great knowledge of compilators and stuff like that. But maybe someone has the idea what the hell happened? :D

• +86

 » 7 years ago, # |   +40 Your code get AC with VC++ compiler. volatile int k = 0; also get AC. So problem is in G++ optimising.
 » 7 years ago, # |   +78 Seems like optimization bug. It is funny that -O2 replaced with -O3 makes your code correct.It is not the first time codeforcers found a g++ bug, try to google like "codeforces g++ bug".It will be really good to minimize your code and to file an issue in gcc bug-tracker. Good idea is to check your code with tools like valgrind to be sure that it is not an undefined behaviour.
 » 7 years ago, # |   0 fprintf(stderr, "%d", k); helps. or write something else to STDERR also helps.link1
 » 7 years ago, # |   +11 Can't repeat with g++ (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6) and this test case.
 » 7 years ago, # |   -83 Never met any bugs in VC++. What's the purpose of using G++?
•  » » 7 years ago, # ^ |   +48 It has bits\stdc++.h and tree_order_statistics_tree. Also ios::sync_with_stdio works on G++ but not on VC++
•  » » 7 years ago, # ^ | ← Rev. 2 →   +65 It has __gcdit works on linuxit's available on almost every contest
•  » » 7 years ago, # ^ |   +40 I have never any bugs in VC++ because I avoid using it ^^
•  » » 7 years ago, # ^ |   -47 Well, downvoters, you will remember it when you face another g++ bug during the contest.
•  » » 7 years ago, # ^ |   +14 Nothing is perfect: http://codeforces.com/blog/entry/7854
 » 7 years ago, # |   +8 Damn, feel so unsecure now. IOI uses g++ and most probably with -O2. And it is at least the 2nd g++ bug found by Codeforces. :/
•  » » 7 years ago, # ^ |   +10 On IOI they will most likely use the Linux distribution's default GCC, which Was tested to build the numerous distribution's packages Carries a distribution-specific set of patches to fix known problems and regressions So you shouldn't worry about it too much.
•  » » » 7 years ago, # ^ |   0 Oh, I see. That makes me feel better. Thanks ;P
 » 7 years ago, # |   +11 Added one more ticket to gcc issue-tracker: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66096Can someone try it on other build of g++ 4.9.2 32-bit?
•  » » 7 years ago, # ^ |   +3 Also posted it in mingw-tdm issue tracker: http://sourceforge.net/p/tdm-gcc/bugs/264/ It has been accepted by maintainer.
•  » » 7 years ago, # ^ |   +8 Looks like you haven't attached the testcase to the issue.
•  » » » 7 years ago, # ^ |   +3 Yep. Fixed.I've got comment from the tdragon (tdm maintainer): Thanks for the report. This bug was also reported on the MinGW-w64 mailing list recently, and it seems to apply to all winpthreads-based builds. Once a fix is created, the next TDM release will certainly include it.
•  » » » » 7 years ago, # ^ |   +40 I've just came up with smaller example on g++ 4.9.2 with tdm-gcc-32: #define _GLIBCXX_DEBUG #include std::set a; int main() { std::set b; return 0; } 
 » 3 years ago, # |   0 Similar experience:54145878 gives WA On test case 1 and just adding an assert makes it pass the first test case 54146095