1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00

Syntax error with constructor initializer, bug 245070.

This commit is contained in:
Markus Schorn 2008-09-03 09:49:53 +00:00
parent f39d829c21
commit 8e72b07f59
2 changed files with 24 additions and 4 deletions

View file

@ -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$

View file

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