Bug 571500 - specific C++ code causes indexer to crash with ArrayIndexOutOfBoundsException
Summary: specific C++ code causes indexer to crash with ArrayIndexOutOfBoundsException
Status: NEW
Alias: None
Product: CDT
Classification: Tools
Component: cdt-indexer (show other bugs)
Version: 10.1.0   Edit
Hardware: PC All
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact: Jonah Graham CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-02-25 05:05 EST by Michał Urbański CLA
Modified: 2022-10-05 14:47 EDT (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michał Urbański CLA 2021-02-25 05:05:26 EST
Code:

struct widget_state {};

struct widget
{
	widget(int id, widget_state state)
	: id(id)
	, state(state)
	{}

	int id;
	widget_state state;
};

struct node
{
	widget w;
};

auto make_node()
{
	widget_state ws;
	return node{widget(0, ws)};
}

The problem is related to the line with return statement, all these work:

	return node{widget(0, {})};
	return {widget(0, ws)};
	return widget(0, ws);

but when written as in the example, indexer crashes:


java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunction.getFunctionBodyExecution(CPPFunction.java:793)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPFunction.getFunctionBodyExecution(CPPFunction.java:782)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFunctionCall.evaluateFunctionBody(EvalFunctionCall.java:337)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalFunctionCall.computeForFunctionCall(EvalFunctionCall.java:316)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalConstructor.computeForFunctionCall(EvalConstructor.java:218)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalConstructor.getValue(EvalConstructor.java:144)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVariable.computeInitialValue(CPPVariable.java:271)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPVariable.getInitialValue(CPPVariable.java:248)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalBinding.computeIsConstantExpression(EvalBinding.java:266)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalBinding.isConstantExpression(EvalBinding.java:257)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPEvaluation.areAllConstantExpressions(CPPEvaluation.java:141)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPEvaluation.areAllConstantExpressions(CPPEvaluation.java:129)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalTypeId.computeIsConstantExpression(EvalTypeId.java:259)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalTypeId.isConstantExpression(EvalTypeId.java:247)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.AggregateInitialization.checkElement(AggregateInitialization.java:109)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.AggregateInitialization.checkInitializationOfElements(AggregateInitialization.java:146)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.AggregateInitialization.checkImpl(AggregateInitialization.java:50)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.AggregateInitialization.check(AggregateInitialization.java:38)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalTypeId.computeConstructor(EvalTypeId.java:340)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.EvalTypeId.getConstructor(EvalTypeId.java:281)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleTypeConstructorExpression.getImplicitNames(CPPASTSimpleTypeConstructorExpression.java:294)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleTypeConstructorExpression.accept(CPPASTSimpleTypeConstructorExpression.java:157)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTReturnStatement.accept(CPPASTReturnStatement.java:91)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTCompoundStatement.accept(CPPASTCompoundStatement.java:103)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionDefinition.accept(CPPASTFunctionDefinition.java:225)
	at org.eclipse.cdt.internal.core.dom.parser.ASTTranslationUnit.accept(ASTTranslationUnit.java:289)
	at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler.reconcilePositions(SemanticHighlightingReconciler.java:450)
	at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler.reconciled(SemanticHighlightingReconciler.java:413)
	at org.eclipse.cdt.internal.ui.editor.CEditor.reconciled(CEditor.java:3109)
	at org.eclipse.cdt.internal.ui.text.CReconcilingStrategy.reconcile(CReconcilingStrategy.java:100)
	at org.eclipse.cdt.internal.ui.text.CReconcilingStrategy.reconcile(CReconcilingStrategy.java:64)
	at org.eclipse.cdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:89)
	at org.eclipse.cdt.internal.ui.text.CCompositeReconcilingStrategy.reconcile(CCompositeReconcilingStrategy.java:90)
	at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:76)
	at org.eclipse.cdt.internal.ui.text.CReconciler.process(CReconciler.java:346)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:210)