diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java index 60173f7d583..bc967101b7e 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java @@ -2416,5 +2416,22 @@ public class CompleteParseASTTest extends CompleteParseBaseTest assertEquals(ip.getSourceLineNumber(), 4); } } + + public void testBug77097() throws Exception { + Writer writer = new StringWriter(); + writer.write("#define SOME_MACRO() { \\\r\n"); //$NON-NLS-1$ + writer.write("printf(\"Hello World\"); \\\r\n"); //$NON-NLS-1$ + writer.write("printf(\"Good morning\"); \\\r\n"); //$NON-NLS-1$ + parse(writer.toString()); + } + + public void testBug77276() throws Exception { + Writer writer = new StringWriter(); + writer.write("#if (!defined(OS_LIBMODE_R) && !defined(OS_LIBMODE_RP) && \\\r\n"); //$NON-NLS-1$ + writer.write("!defined(OS_LIBMODE_T))\r\n"); //$NON-NLS-1$ + writer.write("#define OS_LIBMODE_DP\r\n"); //$NON-NLS-1$ + writer.write("#endif\r\n"); //$NON-NLS-1$ + parse(writer.toString()); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java index f724918bc79..c6648253fc1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/Scanner2.java @@ -2541,8 +2541,10 @@ public class Scanner2 implements IScanner, IScannerData { case '\r': if (escaped && bufferPos[bufferStackPos] < limit && buffer[bufferPos[bufferStackPos] + 1] == '\n') { escaped = false; + bufferPos[bufferStackPos]++; break; } else if (!escaped && bufferPos[bufferStackPos] < limit && buffer[bufferPos[bufferStackPos] + 1] == '\n') { + bufferPos[bufferStackPos]++; return; } break;