From 51f43ad2c5fbc221325da1867538d06d2979bb78 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Tue, 15 Apr 2008 07:58:54 +0000 Subject: [PATCH] Attributes in elaborated type specifiers, bug 227085. --- .../org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java | 7 +++++++ .../cdt/internal/core/dom/parser/c/GNUCSourceParser.java | 3 +++ .../internal/core/dom/parser/cpp/GNUCPPSourceParser.java | 3 +++ 3 files changed, 13 insertions(+) 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 e5acde4170c..2b4bb14e2b2 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 @@ -4524,4 +4524,11 @@ public class AST2Tests extends AST2BaseTest { parseAndCheckBindings(code, ParserLanguage.CPP); } + // struct __attribute__((declspec)) bla; + public void testAttributeInElaboratedTypeSpecifier_Bug227085() throws Exception { + final String code = getAboveComment(); + parseAndCheckBindings(code, ParserLanguage.C, true); + parseAndCheckBindings(code, ParserLanguage.CPP, true); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java index 3aec4eb220e..b98e4566222 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/GNUCSourceParser.java @@ -1528,6 +1528,9 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { backup(t); throwBacktrack(t.getOffset(), t.getLength()); } + + // if __attribute__ or __declspec occurs after struct/union/class and before the identifier + __attribute_decl_seq(supportAttributeSpecifiers, supportDeclspecSpecifiers); IToken identifier = identifier(); IASTName name = createName(identifier); 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 9480aa20675..c6881faa3b4 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 @@ -3285,6 +3285,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { throwBacktrack(t.getOffset(), t.getLength()); } + // if __attribute__ or __declspec occurs after struct/union/class and before the identifier + __attribute_decl_seq(supportAttributeSpecifiers, supportDeclspecSpecifiers); + IASTName name = createName(name()); ICPPASTElaboratedTypeSpecifier elaboratedTypeSpec = createElaboratedTypeSpecifier();