Skip to content

ShouldNotReachHere for RFC3986_URI Regexp in uri gem #3167

Closed
@eregon

Description

@eregon

From ruby/uri#86 (comment)

The regexp: https://github.com/ruby/uri/blob/bec5ef95cf6e378560f55fd6b0e9f1c139626670/lib/uri/rfc3986_parser.rb#L35-L52

To repro:

git clone git@github.com:ruby/uri.git
chruby truffleruby-dev
bundle install
rake test

which gives:

Loaded suite /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/rake-13.0.6/lib/rake/rake_test_loader
Started
.......
truffleruby: unexpected internal exception in at_exit,
please report it to https://github.com/oracle/truffleruby/issues.

<no message> (com.oracle.truffle.api.CompilerDirectives.ShouldNotReachHere)
	from com.oracle.truffle.api.CompilerDirectives.shouldNotReachHere(CompilerDirectives.java:574)
	from com.oracle.truffle.api.CompilerDirectives.shouldNotReachHere(CompilerDirectives.java:494)
	from com.oracle.truffle.regex.tregex.parser.ast.visitors.RegexASTVisitor.doVisit(RegexASTVisitor.java:105)
	from com.oracle.truffle.regex.tregex.parser.ast.visitors.DepthFirstTraversalRegexASTVisitor.run(DepthFirstTraversalRegexASTVisitor.java:119)
	from com.oracle.truffle.regex.tregex.parser.ast.visitors.DepthFirstTraversalRegexASTVisitor.run(DepthFirstTraversalRegexASTVisitor.java:97)
	from com.oracle.truffle.regex.tregex.parser.ast.visitors.CopyVisitor.copy(CopyVisitor.java:76)
	from com.oracle.truffle.regex.tregex.parser.flavors.RubySubexpressionCalls.replace(RubySubexpressionCalls.java:101)
	from com.oracle.truffle.regex.tregex.parser.flavors.RubySubexpressionCalls.expandNonRecursiveSubexpressionCalls(RubySubexpressionCalls.java:78)
	from com.oracle.truffle.regex.tregex.parser.flavors.RubyRegexParser.parse(RubyRegexParser.java:416)
	from com.oracle.truffle.regex.tregex.TRegexCompilationRequest.parse(TRegexCompilationRequest.java:323)
	from com.oracle.truffle.regex.tregex.TRegexCompilationRequest.compileInternal(TRegexCompilationRequest.java:164)
	from com.oracle.truffle.regex.tregex.TRegexCompilationRequest.compile(TRegexCompilationRequest.java:148)
	from com.oracle.truffle.regex.tregex.TRegexCompiler.doCompile(TRegexCompiler.java:89)
	from com.oracle.truffle.regex.tregex.TRegexCompiler.compile(TRegexCompiler.java:75)
	from com.oracle.truffle.regex.RegexLanguage.createRegexObject(RegexLanguage.java:188)
	from com.oracle.truffle.regex.RegexLanguage.parse(RegexLanguage.java:155)
	from com.oracle.truffle.api.TruffleLanguage$ParsingRequest.parse(TruffleLanguage.java:1176)
	from com.oracle.truffle.api.TruffleLanguage.parse(TruffleLanguage.java:1565)
	from com.oracle.truffle.api.LanguageAccessor$LanguageImpl.parse(LanguageAccessor.java:298)
	from com.oracle.truffle.polyglot.PolyglotSourceCache.parseImpl(PolyglotSourceCache.java:94)
	from com.oracle.truffle.polyglot.PolyglotSourceCache$WeakCache.lookup(PolyglotSourceCache.java:222)
	from com.oracle.truffle.polyglot.PolyglotSourceCache.parseCached(PolyglotSourceCache.java:80)
	from com.oracle.truffle.polyglot.PolyglotLanguageContext.parseCached(PolyglotLanguageContext.java:370)
	from com.oracle.truffle.polyglot.EngineAccessor$EngineImpl.parseForLanguage(EngineAccessor.java:261)
	from com.oracle.truffle.api.TruffleLanguage$Env.parseInternal(TruffleLanguage.java:2541)
	from org.truffleruby.core.regexp.TRegexCache.compileTRegex(TRegexCache.java:184)
	from org.truffleruby.core.regexp.TRegexCache.compile(TRegexCache.java:64)
	from org.truffleruby.core.regexp.TruffleRegexpNodes$TRegexCompileNode.usASCII(TruffleRegexpNodes.java:370)
	from org.truffleruby.core.regexp.TruffleRegexpNodesFactory$TRegexCompileNodeGen.executeTRegexCompile(TruffleRegexpNodesFactory.java:715)
	from org.truffleruby.core.regexp.TruffleRegexpNodes$MatchInRegionTRegexNode.matchInRegionTRegex(TruffleRegexpNodes.java:907)
	from org.truffleruby.core.regexp.TruffleRegexpNodesFactory$MatchInRegionTRegexNodeFactory$MatchInRegionTRegexNodeGen.execute(TruffleRegexpNodesFactory.java:1967)
	from org.truffleruby.language.control.IfElseNode.doIfElse(IfElseNode.java:39)
	from org.truffleruby.language.control.IfElseNodeGen.execute(IfElseNodeGen.java:88)
	from org.truffleruby.language.control.IfElseNode.doIfElse(IfElseNode.java:41)
	from org.truffleruby.language.control.IfElseNodeGen.execute(IfElseNodeGen.java:88)
	from org.truffleruby.language.control.SequenceNode.execute(SequenceNode.java:37)
	from org.truffleruby.language.RubyMethodRootNode.execute(RubyMethodRootNode.java:65)
<internal:core> core/truffle/regexp_operations.rb:76:in `match_in_region'
	from <internal:core> core/truffle/regexp_operations.rb:29:in `search_region'
	from <internal:core> core/truffle/regexp_operations.rb:42:in `match'
	from <internal:core> core/regexp.rb:175:in `match'
	from /home/eregon/code/uri/lib/uri/rfc3986_parser.rb:85:in `split'
	from /home/eregon/code/uri/lib/uri/rfc3986_parser.rb:135:in `parse'
	from /home/eregon/code/uri/lib/uri/common.rb:185:in `parse'
	from /home/eregon/code/uri/test/uri/test_common.rb:106:in `test_kernel_uri'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/testcase.rb:871:in `run_test'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/testcase.rb:566:in `block (2 levels) in run'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/fixture.rb:276:in `block in create_fixtures_runner'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/fixture.rb:276:in `block in create_fixtures_runner'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/fixture.rb:257:in `run_fixture'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/fixture.rb:292:in `run_setup'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/testcase.rb:564:in `block in run'
	from <internal:core> core/throw_catch.rb:36:in `catch'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/testcase.rb:563:in `run'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/testsuite.rb:124:in `run_test'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/testsuite.rb:53:in `run'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/testsuite.rb:124:in `run_test'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/testsuite.rb:53:in `run'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:67:in `run_suite'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:45:in `block (2 levels) in run'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:102:in `with_listener'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:41:in `block in run'
	from <internal:core> core/throw_catch.rb:36:in `catch'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnermediator.rb:39:in `run'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/ui/testrunner.rb:40:in `start_mediator'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/ui/testrunner.rb:25:in `start'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/ui/testrunnerutilities.rb:24:in `run'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/autorunner.rb:458:in `block in run'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/autorunner.rb:514:in `change_work_directory'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/autorunner.rb:457:in `run'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit/autorunner.rb:66:in `run'
	from /home/eregon/.rubies/truffleruby-dev/lib/gems/gems/test-unit-3.5.3/lib/test/unit.rb:518:in `block (2 levels) in <top (required)>'

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions