1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 365981: Detect syntax error replacing pointer to member.

This commit is contained in:
Markus Schorn 2012-01-02 14:05:58 +01:00
parent 934ea4b7b8
commit 282daa7a8e
2 changed files with 12 additions and 2 deletions

View file

@ -5644,7 +5644,16 @@ public class AST2TemplateTests extends AST2BaseTest {
// int main() { // int main() {
// foo(0); // foo(0);
// } // }
public void testSyntaxFailureInstantiatingFunctionTemplate_365981() throws Exception { public void testSyntaxFailureInstantiatingFunctionTemplate_365981a() throws Exception {
parseAndCheckBindings();
}
// template <typename T> bool bar(T);
// template <typename T> bool bar(T, void(T::*)() = 0);
// void test() {
// bar(0);
// }
public void testSyntaxFailureInstantiatingFunctionTemplate_365981b() throws Exception {
parseAndCheckBindings(); parseAndCheckBindings();
} }

View file

@ -98,6 +98,7 @@ import org.eclipse.cdt.internal.core.dom.parser.ASTQueries;
import org.eclipse.cdt.internal.core.dom.parser.IASTInternalScope; import org.eclipse.cdt.internal.core.dom.parser.IASTInternalScope;
import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer; import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer;
import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding; import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding;
import org.eclipse.cdt.internal.core.dom.parser.ProblemType;
import org.eclipse.cdt.internal.core.dom.parser.Value; import org.eclipse.cdt.internal.core.dom.parser.Value;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPArrayType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPArrayType;
@ -1143,7 +1144,7 @@ public class CPPTemplates {
IType newMemberOfClass = instantiateType(memberOfClass, tpMap, packOffset, within); IType newMemberOfClass = instantiateType(memberOfClass, tpMap, packOffset, within);
if (!(newMemberOfClass instanceof ICPPClassType || newMemberOfClass instanceof UniqueType if (!(newMemberOfClass instanceof ICPPClassType || newMemberOfClass instanceof UniqueType
|| newMemberOfClass instanceof ICPPUnknownBinding)) { || newMemberOfClass instanceof ICPPUnknownBinding)) {
newMemberOfClass = memberOfClass; return new ProblemType(ISemanticProblem.BINDING_INVALID_TYPE);
} }
if (newNestedType != nestedType || newMemberOfClass != memberOfClass) { if (newNestedType != nestedType || newMemberOfClass != memberOfClass) {
return new CPPPointerToMemberType(newNestedType, newMemberOfClass, return new CPPPointerToMemberType(newNestedType, newMemberOfClass,