From 8b8ceed8009ecde09887e3af17f6af0adb53ca39 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Sat, 8 Apr 2017 02:46:28 -0400 Subject: [PATCH] Bug 514821 - Attribute on enumerator Change-Id: Icb9ff49c16b049fecb33a55e1db11b61f1efc2d9 --- .../eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java | 8 ++++++++ .../cdt/core/dom/ast/IASTEnumerationSpecifier.java | 2 +- .../cdt/internal/core/dom/parser/ASTEnumerator.java | 2 +- .../core/dom/parser/AbstractGNUSourceCodeParser.java | 4 ++++ 4 files changed, 14 insertions(+), 2 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 d3cd6746235..74d4bf718b1 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 @@ -12252,4 +12252,12 @@ public class AST2CPPTests extends AST2TestBase { ICPPFunctionType logicalNotType = logicalNotOverload.getType(); isTypeEqual(logicalNotType, "bool (bool)"); } + + // enum enumDecl { + // el0 __attribute__((deprecated)), + // el1, + // }; + public void testEnumeratorAttribute_514821() throws Exception { + parseAndCheckBindings(getAboveComment(), CPP, true /* use GNU extensions */); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTEnumerationSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTEnumerationSpecifier.java index af7f0ac981d..7c9bc2ebc10 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTEnumerationSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTEnumerationSpecifier.java @@ -22,7 +22,7 @@ public interface IASTEnumerationSpecifier extends IASTDeclSpecifier, IASTNameOwn * * @noimplement This interface is not intended to be implemented by clients. */ - public interface IASTEnumerator extends IASTNode, IASTNameOwner { + public interface IASTEnumerator extends IASTNameOwner, IASTAttributeOwner { /** * Empty array (constant). */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEnumerator.java index 489c05e6cec..42ceb897792 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEnumerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEnumerator.java @@ -30,7 +30,7 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.SemanticUtil; /** * Base class for C and C++ enumerators. */ -public abstract class ASTEnumerator extends ASTNode implements IASTEnumerator, IASTAmbiguityParent { +public abstract class ASTEnumerator extends ASTAttributeOwner implements IASTEnumerator, IASTAmbiguityParent { private IASTName name; private IASTExpression value; private IValue integralValue; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java index eaa12dcc183..4c117a22481 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/AbstractGNUSourceCodeParser.java @@ -1565,6 +1565,10 @@ public abstract class AbstractGNUSourceCodeParser implements ISourceCodeParser { final IASTEnumerator enumerator= nodeFactory.newEnumerator(etorName, null); endOffset= calculateEndOffset(etorName); setRange(enumerator, problemOffset, endOffset); + + List attributes = __attribute_decl_seq(supportAttributeSpecifiers, supportDeclspecSpecifiers); + addAttributeSpecifiers(attributes, enumerator); + result.addEnumerator(enumerator); if (LTcatchEOF(1) == IToken.tASSIGN) { problemOffset= consume().getOffset();