From 9e772f1ad65fe832ac4fb92e768bdbd7108033aa Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Tue, 10 Jul 2007 12:06:35 +0000 Subject: [PATCH] Fix for 195701, failure to parse visibility attribute for namespaces. --- .../cdt/core/parser/tests/ast2/AST2CPPTests.java | 12 ++++++++++++ .../core/dom/parser/cpp/GNUCPPSourceParser.java | 3 +++ 2 files changed, 15 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 9ae1e0512cc..4ac2331ac42 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 @@ -5481,4 +5481,16 @@ public class AST2CPPTests extends AST2BaseTest { assertTrue(binding instanceof IFunction); assertFalse(binding instanceof IProblemBinding); } + + + + + // #define _GLIBCXX_VISIBILITY(V) __attribute__ ((__visibility__ (#V))) + // #define _GLIBCXX_BEGIN_NAMESPACE(X) namespace X _GLIBCXX_VISIBILITY(default) { + // _GLIBCXX_BEGIN_NAMESPACE(std) + // } // end the namespace + public void testBug195701() throws Exception { + StringBuffer buffer = getContents(1)[0]; + parse( buffer.toString(), ParserLanguage.CPP, true, true ); + } } 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 e5e8bff284e..ae95906461d 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 @@ -2650,6 +2650,9 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } else name = createName(); + // bug 195701, gcc 4.2 allows visibility attribute for namespaces. + __attribute_decl_seq(true, false); + if (LT(1) == IToken.tLBRACE) { consume(); ICPPASTNamespaceDefinition namespaceDefinition = createNamespaceDefinition();