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 4abcc546d7d..f94872768cf 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 @@ -42,7 +42,6 @@ import org.eclipse.cdt.internal.core.dom.parser.c.CASTTypeId; import org.eclipse.cdt.internal.core.dom.parser.c.CVisitor; import org.eclipse.cdt.internal.core.dom.parser.c.ICInternalBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTypeId; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBasicType; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDeferredClassInstance; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalBinding; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor; @@ -246,9 +245,6 @@ public class ASTTypeUtil { result.append(Keywords.cpRBRACKET); } else if (type instanceof IBasicType) { IBasicType basicType= (IBasicType) type; - if (basicType.getModifiers() == CPPBasicType.UNIQUE_TYPE_QUALIFIER) { - return "@" + String.valueOf(basicType.hashCode()); //$NON-NLS-1$ - } final Kind kind = basicType.getKind(); if (basicType.isSigned()) { // 3.9.1.2: signed integer types diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ISemanticProblem.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ISemanticProblem.java index 8cd0bf7af99..36c0e4d0cc0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ISemanticProblem.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ISemanticProblem.java @@ -23,7 +23,8 @@ public interface ISemanticProblem { int TYPE_UNRESOLVED_NAME = 10001; int TYPE_AUTO_FOR_NON_STATIC_FIELD = 10002; int TYPE_CANNOT_DEDUCE_AUTO_TYPE = 10003; - int TYPE_UNKNOWN_FOR_EXPRESSION = 10004; + int TYPE_UNKNOWN_FOR_EXPRESSION = 10004; + int TYPE_NOT_PERSISTED = 10005; /** * Returns the ID of the problem. diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CQualifierType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CQualifierType.java index 615e737f998..6d0889f167d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CQualifierType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CQualifierType.java @@ -13,6 +13,9 @@ package org.eclipse.cdt.internal.core.dom.parser.c; import org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier; +import org.eclipse.cdt.core.dom.ast.IBinding; +import org.eclipse.cdt.core.dom.ast.IProblemBinding; +import org.eclipse.cdt.core.dom.ast.ISemanticProblem; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.core.dom.ast.c.ICASTDeclSpecifier; @@ -22,6 +25,7 @@ import org.eclipse.cdt.core.dom.ast.c.ICQualifierType; import org.eclipse.cdt.internal.core.dom.parser.ISerializableType; import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer; import org.eclipse.cdt.internal.core.dom.parser.ITypeMarshalBuffer; +import org.eclipse.cdt.internal.core.dom.parser.ProblemType; import org.eclipse.core.runtime.CoreException; public class CQualifierType implements ICQualifierType, ITypeContainer, ISerializableType { @@ -91,23 +95,26 @@ public class CQualifierType implements ICQualifierType, ITypeContainer, ISeriali * @see org.eclipse.cdt.core.dom.ast.IQualifierType#getType() */ private IType resolveType(ICASTDeclSpecifier declSpec) { - IType t = null; + IBinding b = null; if (declSpec instanceof ICASTTypedefNameSpecifier) { ICASTTypedefNameSpecifier nameSpec = (ICASTTypedefNameSpecifier) declSpec; - t = (IType) nameSpec.getName().resolveBinding(); + b = nameSpec.getName().resolveBinding(); } else if (declSpec instanceof IASTElaboratedTypeSpecifier) { IASTElaboratedTypeSpecifier elabTypeSpec = (IASTElaboratedTypeSpecifier) declSpec; - t = (IType) elabTypeSpec.getName().resolveBinding(); + b = elabTypeSpec.getName().resolveBinding(); } else if (declSpec instanceof IASTCompositeTypeSpecifier) { IASTCompositeTypeSpecifier compTypeSpec = (IASTCompositeTypeSpecifier) declSpec; - t = (IType) compTypeSpec.getName().resolveBinding(); + b = compTypeSpec.getName().resolveBinding(); } else if (declSpec instanceof IASTEnumerationSpecifier) { - t = new CEnumeration(((IASTEnumerationSpecifier) declSpec).getName()); + return new CEnumeration(((IASTEnumerationSpecifier) declSpec).getName()); } else { - t = new CBasicType((ICASTSimpleDeclSpecifier) declSpec); + return new CBasicType((ICASTSimpleDeclSpecifier) declSpec); } - return t; + if (b instanceof IType && !(b instanceof IProblemBinding)) + return (IType) b; + + return new ProblemType(ISemanticProblem.TYPE_UNRESOLVED_NAME); } public IType getType() { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java index 1d270f85985..1a1724ade0e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java @@ -27,14 +27,12 @@ import org.eclipse.core.runtime.CoreException; * Integral c++ type. */ public class CPPBasicType implements ICPPBasicType, ISerializableType { - // mstodo replace with problem type - public static int UNIQUE_TYPE_QUALIFIER= -1; private final Kind fKind; private final int fModifiers; private IASTExpression fExpression; public CPPBasicType(Kind kind, int qualifiers, IASTExpression expression) { - if (kind == Kind.eUnspecified && qualifiers != UNIQUE_TYPE_QUALIFIER) { + if (kind == Kind.eUnspecified) { if ( (qualifiers & (IS_COMPLEX | IS_IMAGINARY)) != 0) { fKind= Kind.eFloat; } else if ( (qualifiers & (IS_LONG | IS_SHORT | IS_SIGNED | IS_UNSIGNED | IS_LONG_LONG)) != 0 ) { @@ -102,9 +100,6 @@ public class CPPBasicType implements ICPPBasicType, ISerializableType { if (object == this) return true; - if (fModifiers == UNIQUE_TYPE_QUALIFIER) - return false; - if (object instanceof ITypedef) return object.isSameType(this); 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 bb441c99613..999f1450004 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 @@ -1974,7 +1974,7 @@ public class CPPTemplates { if (map != null && pType != null) { pType= instantiateType(pType, map, -1, null); } - if (argType instanceof ICPPUnknownType || isNonTypeArgumentConvertible(pType, argType)) { + if (argType instanceof ICPPUnknownType || argType instanceof ISemanticProblem || isNonTypeArgumentConvertible(pType, argType)) { return new CPPTemplateArgument(arg.getNonTypeValue(), pType); } return null; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserMessages.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserMessages.java index 17dbbf1e6dc..f13227e2228 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserMessages.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserMessages.java @@ -81,6 +81,7 @@ public class ParserMessages { case ISemanticProblem.TYPE_AUTO_FOR_NON_STATIC_FIELD: return "ISemanticProblem.TYPE_AUTO_FOR_NON_STATIC_FIELD"; case ISemanticProblem.TYPE_CANNOT_DEDUCE_AUTO_TYPE: return "ISemanticProblem.TYPE_CANNOT_DEDUCE_AUTO_TYPE"; case ISemanticProblem.TYPE_UNKNOWN_FOR_EXPRESSION: return "ISemanticProblem.TYPE_UNKNOWN_FOR_EXPRESSION"; + case ISemanticProblem.TYPE_NOT_PERSISTED: return "ISemanticProblem.TYPE_NOT_PERSISTED"; } return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserMessages.properties b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserMessages.properties index f07baebcc26..60652a75547 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserMessages.properties +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserMessages.properties @@ -71,4 +71,7 @@ ISemanticProblem.TYPE_UNRESOLVED_NAME=Type depends on an unresolved name ISemanticProblem.TYPE_AUTO_FOR_NON_STATIC_FIELD=Illegally auto-typed static field ISemanticProblem.TYPE_CANNOT_DEDUCE_AUTO_TYPE=Failure to determine auto-type ISemanticProblem.TYPE_UNKNOWN_FOR_EXPRESSION=Failure to determine type of expression +ISemanticProblem.TYPE_NOT_PERSISTED=Failure to store type in the index + + diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPArgumentList.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPArgumentList.java index bf905ae590d..3a7559a5a3f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPArgumentList.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/cpp/PDOMCPPArgumentList.java @@ -10,11 +10,11 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.pdom.dom.cpp; +import org.eclipse.cdt.core.dom.ast.ISemanticProblem; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.IValue; -import org.eclipse.cdt.core.dom.ast.IBasicType.Kind; import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateArgument; -import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPBasicType; +import org.eclipse.cdt.internal.core.dom.parser.ProblemType; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPTemplateArgument; import org.eclipse.cdt.internal.core.pdom.db.Database; import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage; @@ -94,7 +94,7 @@ public class PDOMCPPArgumentList { for (int i=0; i