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 f685500cbea..65c9ce2333b 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 @@ -11666,6 +11666,11 @@ public class AST2CPPTests extends AST2CPPTestBase { parseAndCheckBindings(); } + // __attribute__((section(".example"))) alignas(4) static int waldo; + public void testAlignasAfterAttribute_538615() throws Exception { + parseAndCheckBindings(getAboveComment(), CPP, true /* use GNU extensions */); + } + // int operator "" _A(unsigned long long i) { return 1; } // int operator "" _B(long double d) { return 1; } // int operator "" _C(const char* s, unsigned int sz) { return sz; } 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 4ec263f939c..b330ed8b6f3 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 @@ -2604,7 +2604,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { */ @Override protected IASTDeclaration declaration(DeclarationOptions option) throws EndOfFileException, BacktrackException { - List attributes = attributeSpecifierSeq(); + // Allow GNU-style attributes both before standard attribute / alignment specifiers, and after. + List attributes = __attribute_decl_seq(supportAttributeSpecifiers, supportDeclspecSpecifiers); + attributes = CollectionUtils.merge(attributes, attributeSpecifierSeq()); attributes = CollectionUtils.merge(attributes, __attribute_decl_seq(supportAttributeSpecifiers, supportDeclspecSpecifiers)); switch (LT(1)) {