From 1dcc3613f70f01db1c506ff311054c31be31fdf8 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Sat, 11 Mar 2017 18:18:04 -0500 Subject: [PATCH] Bug 513430 - sizeof() with dependent type in default template argument Change-Id: I01b21afb076b29e418a4d9eece2ac8eff3dafbb6 --- .../core/parser/tests/ast2/AST2TemplateTests.java | 15 ++++++++++++++- .../parser/cpp/semantics/EvalBinaryTypeId.java | 2 +- .../dom/parser/cpp/semantics/EvalUnaryTypeID.java | 2 +- 3 files changed, 16 insertions(+), 3 deletions(-) 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 4c4ac69fa2a..1985379bfa0 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 @@ -10160,7 +10160,6 @@ public class AST2TemplateTests extends AST2TestBase { public void testNoexceptSpecifierInTypeTemplateArgument_511186() throws Exception { parseAndCheckBindings(); } - // namespace ns { // // template @@ -10180,4 +10179,18 @@ public class AST2TemplateTests extends AST2TestBase { public void testFriendFunctionDeclarationInNamespace_513681() throws Exception { parseAndCheckBindings(); } + + // template + // class foobar {}; + // + // template + // void waldo(foobar) {} + // + // void bar() { + // foobar obj; + // waldo(obj); // Error: Invalid arguments + // } + public void testDependentSizeofInDefaultArgument_513430() throws Exception { + parseAndCheckBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinaryTypeId.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinaryTypeId.java index 35b8d2e1a5e..86b23e9f7c4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinaryTypeId.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalBinaryTypeId.java @@ -153,6 +153,6 @@ public class EvalBinaryTypeId extends CPPDependentEvaluation { @Override public boolean referencesTemplateParameter() { - return false; + return CPPTemplates.isDependentType(fType1) || CPPTemplates.isDependentType(fType2); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnaryTypeID.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnaryTypeID.java index 93f0ad62977..6492ea83476 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnaryTypeID.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalUnaryTypeID.java @@ -234,6 +234,6 @@ public class EvalUnaryTypeID extends CPPDependentEvaluation { @Override public boolean referencesTemplateParameter() { - return false; + return CPPTemplates.isDependentType(fOrigType); } }