From 15dbbb8304ce86c9ee01f566885e9cc0000387cf Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Fri, 23 Aug 2019 22:35:30 -0400 Subject: [PATCH] Bug 550397 - Fix a logic error in instantiateConversionTemplates() Change-Id: If4cb26e3b392e65ffbcb53514db67c1065aa9c79 --- .../parser/tests/ast2/AST2TemplateTests.java | 18 ++++++++++++++++++ .../dom/parser/cpp/semantics/CPPTemplates.java | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) 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 c42ac4dd8cd..242b5ed5eb5 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 @@ -4653,6 +4653,24 @@ public class AST2TemplateTests extends AST2CPPTestBase { parseAndCheckBindings(); } + // class Mat {}; + // + // template + // class Mat_ {}; + // + // class MatExpr { + // public: + // operator Mat(); + // + // template + // operator Mat_(); + // }; + // + // Mat x = MatExpr(); + public void testOverloadedConversionOperators_550397() throws Exception { + parseAndCheckImplicitNameBindings(); + } + // template struct ST{}; // template class T> class CT {}; // typedef CT TDef; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java index 07e27e0a235..96e1d2c47d4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java @@ -2455,8 +2455,9 @@ public class CPPTemplates { result = new ICPPFunction[functions.length]; System.arraycopy(functions, 0, result, 0, i); } - result[i++] = inst; + result[i] = inst; } + i++; if (done) break; }