Bug 563131 - StackOverflow in SizeofCalculator
Summary: StackOverflow in SizeofCalculator
Status: NEW
Alias: None
Product: CDT
Classification: Tools
Component: cdt-indexer (show other bugs)
Version: 9.11.0   Edit
Hardware: PC Windows 10
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact: Jonah Graham CLA
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-05-13 10:16 EDT by Lagrus No CLA
Modified: 2020-05-13 10:16 EDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Lagrus No CLA 2020-05-13 10:16:21 EDT
StackOverflow occurs when indexing following code:

template<typename TemplateType>
struct SomeType {
	SomeType (TemplateType) { };
};

constexpr auto s = sizeof(SomeType<int> );

The semicolon after ctor causes indexer to incorrectly identify it as a field of type SomeType. That leads to infinite recursion when computing sizeof SomeType - and eventual stack overflow.

log:
!ENTRY org.eclipse.cdt.core 4 0 2020-05-13 15:56:42.830
!MESSAGE Error while parsing /Test/SomeType.cpp.
!STACK 0
java.lang.reflect.InvocationTargetException
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.getMaskedException(AbstractIndexerTask.java:1206)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.swallowError(AbstractIndexerTask.java:1192)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.parseFile(AbstractIndexerTask.java:1128)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.parseLinkage(AbstractIndexerTask.java:910)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.runTask(AbstractIndexerTask.java:572)
	at org.eclipse.cdt.internal.core.pdom.indexer.PDOMIndexerTask.run(PDOMIndexerTask.java:164)
	at org.eclipse.cdt.internal.core.pdom.PDOMIndexerJob.run(PDOMIndexerJob.java:160)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.lang.StackOverflowError
	at org.eclipse.cdt.internal.core.dom.parser.cpp.ClassTypeHelper.getDeclaredFields(ClassTypeHelper.java:225)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassTemplate.getDeclaredFields(CPPClassTemplate.java:176)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.AbstractCPPClassSpecializationScope.getDeclaredFields(AbstractCPPClassSpecializationScope.java:233)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPClassSpecialization.getDeclaredFields(CPPClassSpecialization.java:281)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:320)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:214)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:342)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:214)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:342)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:214)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:342)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:214)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:342)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:214)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:342)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:214)
	at org.eclipse.cdt.internal.core.dom.parser.SizeofCalculator.sizeAndAlignment(SizeofCalculator.java:342)