From c18d5df1fdba448fbb818ea25730381878fcc766 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 24 Nov 2010 08:17:34 +0000 Subject: [PATCH] Bug 330747: Octal char constants in preprocessing condition. --- .../tests/scanner/PreprocessorBugsTests.java | 19 +++++++++++++++++++ .../parser/scanner/ExpressionEvaluator.java | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/PreprocessorBugsTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/PreprocessorBugsTests.java index bf6fca6bf61..16fdff1d319 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/PreprocessorBugsTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/PreprocessorBugsTests.java @@ -308,4 +308,23 @@ public class PreprocessorBugsTests extends PreprocessorTestsBase { validateString("unsignedint f();"); validateEOF(); } + + // #if '\0' + // no + // #else + // yes + // #endif + // #if '\1' + // yes + // #else + // no + // #endif + public void testOcatalCharConstant_Bug330747() throws Exception { + initializeScanner(); + validateIdentifier("yes"); + validateIdentifier("yes"); + validateEOF(); + validateProblemCount(0); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ExpressionEvaluator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ExpressionEvaluator.java index f031cc3fed0..fba757060a2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ExpressionEvaluator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ExpressionEvaluator.java @@ -408,7 +408,7 @@ public class ExpressionEvaluator { case 'v': return 0xb; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': - return getNumber(tokenImage, i+1, tokenImage.length-1, 8, IProblem.SCANNER_BAD_OCTAL_FORMAT); + return getNumber(tokenImage, i, tokenImage.length-1, 8, IProblem.SCANNER_BAD_OCTAL_FORMAT); case 'x': case 'u': case 'U': return getNumber(tokenImage, i+1, tokenImage.length-1, 16, IProblem.SCANNER_BAD_HEX_FORMAT);