Community
Participate
Working Groups
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?
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.
New Gerrit change created: https://git.eclipse.org/r/79390
Gerrit change https://git.eclipse.org/r/79390 was merged to [master]. Commit: http://git.eclipse.org/c/ptp/org.eclipse.photran.git/commit/?id=f35fddb5d5fb1fccfb5b5936222d438114929cbc