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 2e622a0cfc3..322e601260a 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 @@ -3780,8 +3780,27 @@ public class AST2TemplateTests extends AST2BaseTest { // int* iptr; // any(CT(iptr)); // } - public void testConstructorTemplateInClassTemplate() throws Exception { + public void testConstructorTemplateInClassTemplate_264314() throws Exception { String code= getAboveComment(); parseAndCheckBindings(code, ParserLanguage.CPP); } + + // template class XT {}; + // template void func(T t, XT a) {} + // template void func(S s, XT a, T t) {} + // + // class X {typedef int A;}; + // class Y {typedef X A;}; + // + // void test() { + // X x; Y y; + // XT xint; XT xy; + // func(x, xint); + // func(y, xy, xint); + // } + public void testDistinctDeferredInstances_264367() throws Exception { + String code= getAboveComment(); + parseAndCheckBindings(code, ParserLanguage.CPP); + } + } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java index d13b7b906ce..274597bbc43 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java @@ -5821,8 +5821,8 @@ public class AST2Tests extends AST2BaseTest { } } - private long memoryUsed() { - System.gc();System.gc();System.gc();System.gc();System.gc(); + private long memoryUsed() throws InterruptedException { + System.gc();Thread.sleep(200);System.gc(); final Runtime runtime = Runtime.getRuntime(); return runtime.totalMemory()-runtime.freeMemory(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java index 3f74586791d..3ae3afc4cd9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java @@ -356,7 +356,7 @@ public class ASTTypeUtil { // 101114 fix, do not display class, and for consistency don't display struct/union as well if (type instanceof ICPPClassType) { try { - String qn = CPPVisitor.renderQualifiedName(getQualifiedNameForAnonymous((ICPPClassType) type)); + String qn = CPPVisitor.renderQualifiedName(getQualifiedNameForAnonymous((ICPPClassType) type, normalize)); result.append(qn); } catch (DOMException e) { result.append(getNameForAnonymous((ICompositeType) type)); @@ -651,13 +651,12 @@ public class ASTTypeUtil { } } - - private static String[] getQualifiedNameForAnonymous(ICPPBinding binding) throws DOMException { + private static String[] getQualifiedNameForAnonymous(ICPPBinding binding, boolean normalize) throws DOMException { LinkedList result= new LinkedList(); result.addFirst(getNameForAnonymous(binding)); IBinding owner= binding.getOwner(); - while(owner instanceof ICPPNamespace || owner instanceof ICPPClassType) { + while(owner instanceof ICPPNamespace || owner instanceof IType) { char[] name= owner.getNameCharArray(); if (name == null || name.length == 0) { if (!(binding instanceof ICPPNamespace)) { @@ -667,7 +666,11 @@ public class ASTTypeUtil { } } } else { - result.addFirst(new String(name)); + if (normalize && owner instanceof IType) { + result.addFirst(getType((IType) owner, normalize)); + } else { + result.addFirst(new String(name)); + } } owner= owner.getOwner(); }