Am 07.04.2010 01:16, schrieb Aristotle Pagaltzis:
Hi Larry (mostly) et al,

this sounds like something STD could try to steal:

*<http://blog.llvm.org/2010/04/amazing-feats-of-clang-error-recovery.html>
Okay, this may be going a bit far, but how else are you going
to fall completely in love with a compiler?

   $ cat t.c
   void f0() {
   <<<<<<<  HEAD
       int x;
   =======
       int y;
   >>>>>>>  whatever
   }
   $ clang t.c
   t.c:2:1: error: version control conflict marker in file
   <<<<<<<  HEAD
   ^
   $ gcc t.c
   t.c: In function ‘f0’:
   t.c:2: error: expected expression before ‘<<’ token
   t.c:4: error: expected expression before ‘==’ token
   t.c:6: error: expected expression before ‘>>’ token

Yep, clang actually detects the merge conflict and parses one
side of the conflict. You don't want to get tons of nonsense
from your compiler on such a simple error, do you?

As I understood it from a YAPC keynote a year or two ago, STD
already has the speculative parse machinery in place. It seems
like this should be implementable with reasonable effort?

I hope this patch implements this:

http://moritz.faui2k3.org/tmp/version-control-markers.patch

but I can't test it currently (wrong $location).
It looks for version control markers in infix and term position, which is most likely to catch such things at line boundaries. It could be factored out into a subrule that's called by both term:something and infix:something to avoid code duplication.

Cheers,
Moritz

Reply via email to