From c68190a67c294597289762543edb8bcd91c2e8a7 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Sun, 25 Aug 2013 23:18:15 -0400 Subject: [PATCH] Bug 394048 - parser confusion about octal double Change-Id: I4184acdeb4909022a2e2b30830530bd33a4897f3 Signed-off-by: Nathan Ridge Reviewed-on: https://git.eclipse.org/r/15839 Reviewed-by: Sergey Prigogin IP-Clean: Sergey Prigogin Tested-by: Sergey Prigogin --- .../eclipse/cdt/core/parser/tests/ast2/AST2Tests.java | 5 +++++ .../internal/core/parser/scanner/CPreprocessor.java | 11 ++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java index b88622d8481..816f687659d 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java @@ -7461,4 +7461,9 @@ public class AST2Tests extends AST2TestBase { public void testFunctionReturningFunctionPointer_413204() throws Exception { parseAndCheckBindings(getAboveComment(), CPP); } + + // double d = 00.9; + public void testOctalFloatingPointLiteral_394048() throws Exception { + parseAndCheckBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java index f6197357289..2ebdb5a3d09 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java @@ -976,12 +976,17 @@ public class CPreprocessor implements ILexerLog, IScanner, IAdaptable { ++pos; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': - isOctal = true; + if (!isFloat) + isOctal = true; ++pos; break; case '8': case '9': - handleProblem(IProblem.SCANNER_BAD_OCTAL_FORMAT, image, number.getOffset(), number.getEndOffset()); - return; + if (!isFloat) { + handleProblem(IProblem.SCANNER_BAD_OCTAL_FORMAT, image, number.getOffset(), number.getEndOffset()); + return; + } + ++pos; + break; } } }