From 8dd3aa2e3b841ca43f7643565c16f3cfa6e11ccf Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Thu, 26 Jan 2017 15:24:11 -0800 Subject: [PATCH] Bug 511143 - Const qualifier confuses __is_class built-in type trait Change-Id: Iff01dd7e7fe6a4fec0b783275d7a5d4babd07d25 --- .../parser/tests/ast2/AST2TemplateTests.java | 17 +++++++++++++++++ .../internal/core/dom/parser/ValueFactory.java | 5 +++++ 2 files changed, 22 insertions(+) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index 07a97332041..e58afe96b7f 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -4133,6 +4133,23 @@ public class AST2TemplateTests extends AST2TestBase { assertEquals("string", ASTTypeUtil.getType(s.getType(), false)); } + // template + // class A {}; + // + // template + // class A { + // void waldo(); + // }; + // + // class B {}; + // + // void test(A p) { + // p.waldo(); + // } + public void testTypeTraitWithQualifier_511143() throws Exception { + parseAndCheckBindings(getAboveComment(), CPP, true); + } + // template // struct A { // template struct C { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ValueFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ValueFactory.java index 51404e2308a..211b41d3f9d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ValueFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ValueFactory.java @@ -51,6 +51,7 @@ import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.ICompositeType; import org.eclipse.cdt.core.dom.ast.IEnumeration; import org.eclipse.cdt.core.dom.ast.IEnumerator; +import org.eclipse.cdt.core.dom.ast.IQualifierType; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IValue; import org.eclipse.cdt.core.dom.ast.IVariable; @@ -387,6 +388,10 @@ public class ValueFactory { } private static IValue applyUnaryTypeIdOperator(int operator, IType type, IASTNode point) { + while (type instanceof IQualifierType) { + type = ((IQualifierType) type).getType(); + } + switch (operator) { case op_sizeof: return getSize(type, point);