Bug 500007 - Photran Indexer fails on large parameter lists in fixed form
Summary: Photran Indexer fails on large parameter lists in fixed form
Status: NEW
Alias: None
Product: PTP
Classification: Tools
Component: Photran.Parser (show other bugs)
Version: unspecified   Edit
Hardware: PC All
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Photran Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-08-19 17:16 EDT by Rocky Dunlap CLA
Modified: 2016-08-26 09:48 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Rocky Dunlap CLA 2016-08-19 17:16:11 EDT
The following code fails during Photran indexing.  To reproduce, create a fixed-form file with this code.

      subroutine ManyParams(
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3, param4, param5, param6,
     & param1, param2, param3
     &)

      end subroutine


Stack trace:

!ENTRY org.eclipse.core.jobs 4 2 2016-08-19 14:24:16.095
!MESSAGE An internal error occurred during: "Photran indexer".
!STACK 0
java.lang.NullPointerException
	at org.eclipse.photran.internal.core.analysis.binding.SubprogramTypeCollector.updateDefinitionWithTypeInfo(SubprogramTypeCollector.java:62)
	at org.eclipse.photran.internal.core.analysis.binding.SubprogramTypeCollector.visitASTSubroutineStmtNode(SubprogramTypeCollector.java:45)
	at org.eclipse.photran.internal.core.parser.ASTSubroutineStmtNode.accept(ASTSubroutineStmtNode.java:95)
	at org.eclipse.photran.internal.core.parser.ASTVisitor.traverseChildren(ASTVisitor.java:21)
	at org.eclipse.photran.internal.core.parser.ASTVisitor.visitASTSubroutineSubprogramNode(ASTVisitor.java:371)
	at org.eclipse.photran.internal.core.parser.ASTSubroutineSubprogramNode.accept(ASTSubroutineSubprogramNode.java:100)
	at org.eclipse.photran.internal.core.parser.ASTVisitor.traverseChildren(ASTVisitor.java:21)
	at org.eclipse.photran.internal.core.parser.ASTVisitor.visitASTListNode(ASTVisitor.java:26)
	at org.eclipse.photran.internal.core.parser.ASTListNode.accept(ASTListNode.java:131)
	at org.eclipse.photran.internal.core.parser.ASTVisitor.traverseChildren(ASTVisitor.java:21)
	at org.eclipse.photran.internal.core.parser.ASTVisitor.visitASTExecutableProgramNode(ASTVisitor.java:175)
	at org.eclipse.photran.internal.core.parser.ASTExecutableProgramNode.accept(ASTExecutableProgramNode.java:61)
	at org.eclipse.photran.internal.core.FortranAST.accept(FortranAST.java:53)
	at org.eclipse.photran.internal.core.analysis.binding.Binder.bind(Binder.java:63)
	at org.eclipse.photran.internal.core.vpg.PhotranVPGWriter.populateVPG(PhotranVPGWriter.java:582)
	at org.eclipse.photran.internal.core.vpg.PhotranVPGWriter.populateVPG(PhotranVPGWriter.java:1)
	at org.eclipse.photran.internal.core.vpg.VPGWriter.computeEdgesAndAnnotations(VPGWriter.java:63)
	at org.eclipse.photran.internal.core.vpg.ASTRepository.acquireTransientAST(ASTRepository.java:87)
	at org.eclipse.photran.internal.core.vpg.VPG.forceRecomputationOfEdgesAndAnnotations(VPG.java:405)
	at org.eclipse.photran.internal.core.vpg.eclipse.EclipseVPG$VPGResourceDeltaVisitor.index(EclipseVPG.java:440)
	at org.eclipse.photran.internal.core.vpg.eclipse.EclipseVPG$VPGResourceDeltaJob.runInWorkspace(EclipseVPG.java:329)
	at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:39)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)


Don't worry about the repeated parameter names above.  The issue seems to be related to the length of the parameter list.  If you remove the final parameter in the list and save, the indexer will succeed.  Maybe we are hitting a record size limit in the underlying DB?
Comment 1 Rocky Dunlap CLA 2016-08-19 17:39:08 EDT
Further investigation shows there is an error raised here in the malloc method of the underlying Database:
org.eclipse.photran.internal.db.org.eclipse.cdt.internal.core.pdom.db.Database,

which is in the included library:
/org.eclipse.photran.core.vpg/lib/cdtdb-4.0.3-eclipse.jar


	public int malloc(int size) throws CoreException {
		assert fExclusiveLock;
		if (size > MAX_SIZE)
			// Too Big
			throw new CoreException(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, 0,
					CCorePlugin.getResourceString("pdom.requestTooLarge"), new IllegalArgumentException())); //$NON-NLS-1$
		

		
It looks like MAX_SIZE is hard-coded there.  The exception is not handled by Photran, so the record is simply not written to the DB.  Later, when trying to retrieve the record via PhotranVPG.getDefinitionFor() it will of course returns null.
Comment 2 Eclipse Genie CLA 2016-08-19 18:00:42 EDT
New Gerrit change created: https://git.eclipse.org/r/79390