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; } }