mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug 367472: NPE creating auto-type for dependent expression.
This commit is contained in:
parent
96c0441f69
commit
10372e2841
2 changed files with 17 additions and 26 deletions
|
@ -5644,7 +5644,19 @@ public class AST2TemplateTests extends AST2BaseTest {
|
||||||
// int main() {
|
// int main() {
|
||||||
// foo(0);
|
// foo(0);
|
||||||
// }
|
// }
|
||||||
public void testSFINE_365981() throws Exception {
|
public void testSyntaxFailureInstantiatingFunctionTemplate_365981() throws Exception {
|
||||||
|
parseAndCheckBindings();
|
||||||
|
}
|
||||||
|
|
||||||
|
// template<typename _Tp> class vector {};
|
||||||
|
// template<typename T> struct bar {
|
||||||
|
// void foo() {
|
||||||
|
// vector<T> index;
|
||||||
|
// for (const auto& entry : index) {
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
public void testResolvingAutoTypeWithDependentExpression_367472() throws Exception {
|
||||||
parseAndCheckBindings();
|
parseAndCheckBindings();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class CPPUnknownScope implements ICPPInternalUnknownScope {
|
||||||
* This field needs to be protected when used in PDOMCPPUnknownScope,
|
* This field needs to be protected when used in PDOMCPPUnknownScope,
|
||||||
* don't use it outside of {@link #getOrCreateBinding(IASTName, int)}
|
* don't use it outside of {@link #getOrCreateBinding(IASTName, int)}
|
||||||
*/
|
*/
|
||||||
private CharArrayObjectMap map;
|
private CharArrayObjectMap<IBinding[]> map;
|
||||||
|
|
||||||
public CPPUnknownScope(ICPPUnknownBinding binding, IASTName name) {
|
public CPPUnknownScope(ICPPUnknownBinding binding, IASTName name) {
|
||||||
super();
|
super();
|
||||||
|
@ -57,41 +57,26 @@ public class CPPUnknownScope implements ICPPInternalUnknownScope {
|
||||||
return EScopeKind.eClassType;
|
return EScopeKind.eClassType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.dom.ast.IScope#getScopeName()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public IName getScopeName() {
|
public IName getScopeName() {
|
||||||
return scopeName;
|
return scopeName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.dom.ast.IScope#getParent()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public IScope getParent() throws DOMException {
|
public IScope getParent() throws DOMException {
|
||||||
return binding.getScope();
|
return binding.getScope();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.dom.ast.IScope#find(java.lang.String)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public IBinding[] find(String name) {
|
public IBinding[] find(String name) {
|
||||||
return null;
|
return IBinding.EMPTY_BINDING_ARRAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.dom.ast.IScope#getPhysicalNode()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public IASTNode getPhysicalNode() {
|
public IASTNode getPhysicalNode() {
|
||||||
return scopeName;
|
return scopeName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.dom.ast.IScope#addName(org.eclipse.cdt.core.dom.ast.IASTName)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public void addName(IASTName name) {
|
public void addName(IASTName name) {
|
||||||
}
|
}
|
||||||
|
@ -101,9 +86,6 @@ public class CPPUnknownScope implements ICPPInternalUnknownScope {
|
||||||
return getBinding(name, resolve, IIndexFileSet.EMPTY);
|
return getBinding(name, resolve, IIndexFileSet.EMPTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.dom.ast.IScope#getBinding(org.eclipse.cdt.core.dom.ast.IASTName, boolean)
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public IBinding getBinding(final IASTName name, boolean resolve, IIndexFileSet fileSet) {
|
public IBinding getBinding(final IASTName name, boolean resolve, IIndexFileSet fileSet) {
|
||||||
boolean type= false;
|
boolean type= false;
|
||||||
|
@ -152,10 +134,10 @@ public class CPPUnknownScope implements ICPPInternalUnknownScope {
|
||||||
|
|
||||||
protected IBinding getOrCreateBinding(final IASTName name, int idx) {
|
protected IBinding getOrCreateBinding(final IASTName name, int idx) {
|
||||||
if (map == null)
|
if (map == null)
|
||||||
map = new CharArrayObjectMap(2);
|
map = new CharArrayObjectMap<IBinding[]>(2);
|
||||||
|
|
||||||
final char[] c = name.getLookupKey();
|
final char[] c = name.getLookupKey();
|
||||||
IBinding[] o = (IBinding[]) map.get(c);
|
IBinding[] o = map.get(c);
|
||||||
if (o == null) {
|
if (o == null) {
|
||||||
o = new IBinding[3];
|
o = new IBinding[3];
|
||||||
map.put(c, o);
|
map.put(c, o);
|
||||||
|
@ -210,9 +192,6 @@ public class CPPUnknownScope implements ICPPInternalUnknownScope {
|
||||||
// do nothing, this is part of template magic and not a normal scope
|
// do nothing, this is part of template magic and not a normal scope
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalUnknownScope#getUnknownBinding()
|
|
||||||
*/
|
|
||||||
@Override
|
@Override
|
||||||
public ICPPBinding getScopeBinding() {
|
public ICPPBinding getScopeBinding() {
|
||||||
return binding;
|
return binding;
|
||||||
|
|
Loading…
Add table
Reference in a new issue