I added #if 0 around blocks of code to find which piece of code triggers
the bug.

By trial an error, I found out that 'gcc -O2' compile successfully if I
comment the following lines:

96297 #if 0
96298         parse_info<iterator_type> info = parse(first, last, l);
96299 
96300         if (info.hit || ignore_docinfo)
96301         {
96302             pre(actor.out, actor, ignore_docinfo);
96303 
96304             block_grammar<actions> g(actor);
96305             info = parse(info.hit ? info.stop : first, last, g);
96306             if (info.full)
96307             {
96308                 post(actor.out, actor, ignore_docinfo);
96309             }
96310         }
96311 
96312         if (!info.full)
96313         {
96314             file_position const pos = info.stop.get_position();
96315             detail::outerr(pos.file,pos.line)
96316                 << "Syntax Error near column " << pos.column << ".\n";
96317             return 1;
96318         }
96319 #endif

[EMAIL PROTECTED]:/tmp$ time g++ -O2 -c -o quickbook.o quickbook.cpp

real    0m5.072s
user    0m4.880s
sys     0m0.192s


But if I move the '#if 0' only one line below (as follows) then 'gcc -O2' loops 
forever:

96297         parse_info<iterator_type> info = parse(first, last, l);
96298 #if 0
96299 
96300         if (info.hit || ignore_docinfo)
96301         {
96302             pre(actor.out, actor, ignore_docinfo);
96303 
96304             block_grammar<actions> g(actor);
96305             info = parse(info.hit ? info.stop : first, last, g);
96306             if (info.full)
96307             {
96308                 post(actor.out, actor, ignore_docinfo);
96309             }
96310         }
96311 
96312         if (!info.full)
96313         {
96314             file_position const pos = info.stop.get_position();
96315             detail::outerr(pos.file,pos.line)
96316                 << "Syntax Error near column " << pos.column << ".\n";
96317             return 1;
96318         }
96319 #endif

So it seems to be the template...

96297         parse_info<iterator_type> info = parse(first, last, l);

... which is triggering the bug.

-- 
g++: infinite loop with -O3 while compiling Boost.Quickbook from Boost CVS
https://bugs.launchpad.net/bugs/82404
You received this bug notification because you are a member of Ubuntu
Bugs, which is the bug contact for Ubuntu.

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to