From 8e72b07f594bfbd9de645c9530f69f011ac156b7 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 3 Sep 2008 09:49:53 +0000 Subject: [PATCH] Syntax error with constructor initializer, bug 245070. --- .../core/parser/tests/ast2/AST2CPPTests.java | 10 ++++++++++ .../dom/parser/cpp/GNUCPPSourceParser.java | 18 ++++++++++++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index bc079920ddb..100869ea675 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -215,6 +215,16 @@ public class AST2CPPTests extends AST2BaseTest { parseAndCheckBindings( getAboveComment() ); } + // signed int si(0); + // unsigned u(10U); + // signed s(-1); + // short sh(0); + // long l(0L); + // long long ll(0LL); + public void testInitializeUnsigned_Bug245070() throws Exception { + parseAndCheckBindings(getAboveComment(), ParserLanguage.CPP, true); + } + public void testBug43579() throws Exception { parseAndCheckBindings("class A { int m; }; \n A * a; int A::*pm; \n int f(){} \n int f(int); \n int x = f(a->*pm);"); //$NON-NLS-1$ parseAndCheckBindings("class A { int m; }; \n A * a; int A::*pm; \n int f(){} \n int f(int); \n int x = f(a->*pm);"); //$NON-NLS-1$ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index 3e47d2fc354..4560187d2df 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -3110,16 +3110,26 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { private boolean canHaveConstructorInitializer(IASTDeclSpecifier declspec) { if (declspec instanceof ICPPASTSimpleDeclSpecifier) { - ICPPASTSimpleDeclSpecifier simpleSpecifier= (ICPPASTSimpleDeclSpecifier) declspec; - switch(simpleSpecifier.getType()) { + ICPPASTSimpleDeclSpecifier sspec= (ICPPASTSimpleDeclSpecifier) declspec; + switch(sspec.getType()) { case IASTSimpleDeclSpecifier.t_unspecified: + if (sspec.isLong() || sspec.isShort() || sspec.isSigned() || sspec.isUnsigned()) + return true; + if (sspec instanceof IGPPASTSimpleDeclSpecifier) { + final IGPPASTSimpleDeclSpecifier gspec = (IGPPASTSimpleDeclSpecifier) sspec; + if (gspec.isLongLong()) + return true; + } + return false; + case IASTSimpleDeclSpecifier.t_void: return false; } - if (simpleSpecifier.isFriend()) { + + if (sspec.isFriend()) { return false; } - if (simpleSpecifier.getStorageClass() == IASTDeclSpecifier.sc_typedef) { + if (sspec.getStorageClass() == IASTDeclSpecifier.sc_typedef) { return false; } }