diff --git a/src/preprocessor.h b/src/preprocessor.h
index 32b4c9155f8c424e58d10b0a2a5e84ef2056e7c7..3775535bf3ecf1ea3d02c5164cabc52500653b30 100644
--- a/src/preprocessor.h
+++ b/src/preprocessor.h
@@ -1074,11 +1074,12 @@ static ptrdiff_t lower_cpp(struct cpp *this,
   
   for(pos=0; pos<len;)
   {
-      ptrdiff_t old_pos = pos;
+    ptrdiff_t old_pos = pos;
+    int c;
 /*    fprintf(stderr,"%c",data[pos]);
     fflush(stderr); */
 
-    switch(data[pos++])
+    switch(c = data[pos++])
     {
     case '\n':
       if(flags & CPP_END_AT_NEWLINE) return pos-1;
@@ -1120,20 +1121,26 @@ static ptrdiff_t lower_cpp(struct cpp *this,
       break;
 
       /* Minor optimization */
-      case '<':
-	if(data[pos]=='<'  &&
-	   data[pos+1]=='<'  &&
-	   data[pos+2]=='<'  &&
-	   data[pos+3]=='<'  &&
-	   data[pos+4]=='<'  &&
-	   data[pos+5]=='<')
+      case '<': case '=': case '>':
+	if(data[pos]==c  &&
+	   data[pos+1]==c  &&
+	   data[pos+2]==c  &&
+	   data[pos+3]==c  &&
+	   data[pos+4]==c  &&
+	   data[pos+5]==c) {
 	  cpp_error(this, "Merge conflict detected.");
-	
+	  PUTC(c);
+	  do {
+	    PUTC(c);
+	  } while (data[++pos] == c);
+	  continue;
+	}
+	/* FALL_THROUGH */
+
       case '!': case '@': case '$': case '%': case '^': case '&':
-      case '*': case '(': case ')': case '-': case '=': case '+':
+      case '*': case '(': case ')': case '-': case '+':
       case '{': case '}': case ':': case '?': case '`': case ';':
-      case '>': case ',': case '.': case '~': case '[':
-      case ']': case '|':
+      case ',': case '.': case '~': case '[': case ']': case '|':
 	PUTC(data[pos-1]);
       break;