From 99e842bc6e0fa2c77308b6e75ee97f0843e2e924 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Tue, 6 Feb 2018 02:31:34 -0500 Subject: [PATCH] Bug 530729 - Accept C++11 attribute specifier before parameter declaration Change-Id: I425d1b351c10976392ecdf1e4b33f486938e0a04 --- .../eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java | 6 ++++++ .../internal/core/dom/parser/cpp/GNUCPPSourceParser.java | 4 ++++ 2 files changed, 10 insertions(+) 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 e7c1c2b670f..98a18631337 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 @@ -12552,6 +12552,12 @@ public class AST2CPPTests extends AST2CPPTestBase { parseAndCheckBindings(getAboveComment(), CPP, true /* use GNU extensions */); } + // void foo([[maybe_unused]] int a); + public void testCxx11AttributeBeforeParameterDeclaration_530729() throws Exception { + parseAndCheckBindings(); + } + + // struct CType { // char m_Array[4]; // }; 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 4ff13c545f0..8dbe4c4a689 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 @@ -3062,6 +3062,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { protected ICPPASTParameterDeclaration parameterDeclaration() throws BacktrackException, EndOfFileException { final int startOffset= LA(1).getOffset(); + List attributes = attributeSpecifierSeq(); + if (LT(1) == IToken.tLBRACKET && supportParameterInfoBlock) { skipBrackets(IToken.tLBRACKET, IToken.tRBRACKET, 0); } @@ -3076,6 +3078,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { declSpec= lie.fDeclSpec; declarator= addInitializer(lie, DeclarationOptions.PARAMETER); } + + addAttributeSpecifiers(attributes, (ICPPASTDeclSpecifier) declSpec); final ICPPASTParameterDeclaration parm = getNodeFactory().newParameterDeclaration(declSpec, declarator); final int endOffset = figureEndOffset(declSpec, declarator);