diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTDeclSpecifier.java index 6980d6d89bb..4124fb6b5e6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTDeclSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTDeclSpecifier.java @@ -17,7 +17,7 @@ package org.eclipse.cdt.core.dom.ast; * @noextend This interface is not intended to be extended by clients. * @noimplement This interface is not intended to be implemented by clients. */ -public interface IASTDeclSpecifier extends IASTNode { +public interface IASTDeclSpecifier extends IASTAttributeOwner { /** * No storage class specified. */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTDeclSpecifier.java index 0f94581b1bd..407aebe235e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTDeclSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTDeclSpecifier.java @@ -12,7 +12,6 @@ *******************************************************************************/ package org.eclipse.cdt.core.dom.ast.cpp; -import org.eclipse.cdt.core.dom.ast.IASTAttributeOwner; import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; /** @@ -21,7 +20,7 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; * @noextend This interface is not intended to be extended by clients. * @noimplement This interface is not intended to be implemented by clients. */ -public interface ICPPASTDeclSpecifier extends IASTDeclSpecifier, IASTAttributeOwner { +public interface ICPPASTDeclSpecifier extends IASTDeclSpecifier { // A declaration in C++ can be a friend declaration /** * Is this a friend declaration? diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBaseDeclSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBaseDeclSpecifier.java index 62ce1aef62d..43df78ffaa7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBaseDeclSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CASTBaseDeclSpecifier.java @@ -14,14 +14,14 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTAlignmentSpecifier; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.c.ICASTDeclSpecifier; -import org.eclipse.cdt.internal.core.dom.parser.ASTNode; +import org.eclipse.cdt.internal.core.dom.parser.ASTAttributeOwner; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; /** * @author jcamelon */ -public abstract class CASTBaseDeclSpecifier extends ASTNode +public abstract class CASTBaseDeclSpecifier extends ASTAttributeOwner implements ICASTDeclSpecifier, IASTAmbiguityParent { protected int storageClass; 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 515c6ee5d60..7d5aeac2c05 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 @@ -922,6 +922,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { ICASTDeclSpecifier result= null; ICASTDeclSpecifier altResult= null; IASTAlignmentSpecifier[] alignmentSpecifiers = IASTAlignmentSpecifier.EMPTY_ALIGNMENT_SPECIFIER_ARRAY; + List attributes = null; try { IASTName identifier= null; IASTExpression typeofExpression= null; @@ -1151,7 +1152,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { case IGCCToken.t__attribute__: // if __attribute__ is after the declSpec if (!supportAttributeSpecifiers) throwBacktrack(LA(1)); - __attribute_decl_seq(true, false); + attributes = CollectionUtils.merge(attributes, __attribute_decl_seq(true, false)); break; case IGCCToken.t__declspec: // __declspec precedes the identifier if (identifier != null || !supportDeclspecSpecifiers) @@ -1212,6 +1213,7 @@ public class GNUCSourceParser extends AbstractGNUSourceCodeParser { result= buildSimpleDeclSpec(storageClass, simpleType, options, isLong, typeofExpression, offset, endOffset); } result.setAlignmentSpecifiers(ArrayUtil.trim(alignmentSpecifiers)); + addAttributeSpecifiers(attributes, result); } catch (BacktrackException e) { if (returnToken != null) { backup(returnToken); 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 cbb9a201dbe..a4614670d45 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 @@ -3065,7 +3065,7 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { declarator= addInitializer(lie, DeclarationOptions.PARAMETER); } - addAttributeSpecifiers(attributes, (ICPPASTDeclSpecifier) declSpec); + addAttributeSpecifiers(attributes, declSpec); final ICPPASTParameterDeclaration parm = getNodeFactory().newParameterDeclaration(declSpec, declarator); final int endOffset = figureEndOffset(declSpec, declarator);