You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
# This test is run only when JIT support is available. It checks JIT complete # and partial modes, and things that are different with JIT.
#pattern jitverify
# JIT does not support this pattern (callout at start of condition).
/(?(?C1)(?=a)a)/I
# The following pattern cannot be compiled by JIT.
/b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*
# Check that an infinite recursion loop is caught.
/(?(R)a*(?1)|((?R))b)/ aaaabcde
/abcd/I abcd \= Expect no match xyz
/(*NO_JIT)abcd/I abcd \= Expect no match xyz
/abcd/ abcd ab\=ps ab\=ph \= Expect no match xyz
/abcd/jitfast abcd ab\=ps ab\=ph \= Expect no match xyz
/abcd/jit=1 abcd ab\=ps ab\=ph \= Expect no match xyz xyz\=ps
/abcd/jit=1,jitfast abcd ab\=ps ab\=ph xyz\=ps \= Expect no match xyz
/abcd/jit=2 abcd ab\=ps ab\=ph \= Expect no match xyz
/abcd/jit=2,jitfast abcd ab\=ps ab\=ph xyz
/abcd/jit=3 abcd ab\=ps ab\=ph \= Expect no match xyz
/abcd/jit=4 abcd ab\=ps ab\=ph \= Expect no match xyz
/abcd/jit=5 abcd ab\=ps ab\=ph \= Expect no match xyz
/abcd/jit=6 abcd ab\=ps ab\=ph \= Expect no match xyz
/abcd/jit=7 abcd ab\=ps ab\=ph \= Expect no match xyz
/abcd/I,jit=2
/(*NO_START_OPT)a(*:m)b/mark \= Expect no match a
/^12345678abcd/m 12345678abcd # Limits tests that give different output with JIT.
/(a+)*zz/I aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits \= Expect no match aaaaaaaaaaaaaz\=find_limits
!((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I /* this is a C style comment */\=find_limits
/^(?>a)++/ aa\=find_limits aaaaaaaaa\=find_limits /(a)(?1)++/ aa\=find_limits aaaaaaaaa\=find_limits
/a(?:.)*?a/ims abbbbbbbbbbbbbbbbbbbbba\=find_limits /a(?:.(*THEN))*?a/ims abbbbbbbbbbbbbbbbbbbbba\=find_limits
/a(?:.(*THEN:ABC))*?a/ims abbbbbbbbbbbbbbbbbbbbba\=find_limits
/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/ aabbccddee\=find_limits
/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/ aabbccddee\=find_limits
/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/ aabbccddee\=find_limits
/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/jitfast aabbccddee\=find_limits aabbccddee\=jitstack=1
/(a+)*zz/ \= Expect no match aaaaaaaaaaaaaz \= Expect limit exceeded aaaaaaaaaaaaaz\=match_limit=3000
/(*LIMIT_MATCH=3000)(a+)*zz/I \= Expect limit exceeded aaaaaaaaaaaaaz \= Expect limit exceeded aaaaaaaaaaaaaz\=match_limit=60000
/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I \= Expect limit exceeded aaaaaaaaaaaaaz
/(*LIMIT_MATCH=60000)(a+)*zz/I \= Expect no match aaaaaaaaaaaaaz \= Expect limit exceeded aaaaaaaaaaaaaz\=match_limit=3000
# These three have infinitely nested recursions. /((?2))((?1))/ \= Expect JIT stack limit reached abc
/((?(R2)a+|(?1)b))()/ \= Expect JIT stack limit reached aaaabcde
/(?(R)a*(?1)|((?R))b)/ \= Expect JIT stack limit reached aaaabcde # Invalid options disable JIT when called via pcre2_match(), causing the # match to happen via the interpreter, but for fast JIT invalid options are # ignored, so an unanchored match happens.
/abcd/ abcd\=anchored \= Expect no match fail abcd\=anchored /abcd/jitfast abcd\=anchored succeed abcd\=anchored # Push/pop does not lose the JIT information, though jitverify applies only to # compilation, but serializing (save/load) discards JIT data completely.
/^abc\Kdef/info,push #pop jitverify abcdef
/^abc\Kdef/info,push #save testsaved1 #load testsaved1 #pop jitverify abcdef #load testsaved1 #pop jit,jitverify abcdef /abcd/pushcopy,jitverify abcd #pop jitverify abcd # Test pattern compilation
/(?:a|b|c|d|e)(?R)/jit=1
/(?:a|b|c|d|e)(?R)(?R)/jit=1
/(a(?:a|b|c|d|e)b){8,16}/jit=1
/(?:|a|){100}x/jit=1
# These tests provoke recursion loops, which give a different error message # when JIT is used.
/(?R)/I abcd
/(a|(?R))/I abcd defg
/(ab|(bc|(de|(?R))))/I abcd fghi
/(ab|(bc|(de|(?1))))/I abcd fghi
/x(ab|(bc|(de|(?1)x)x)x)/I xab123 xfghi
/(?!\w)(?R)/ abcd =abc
/(?=\w)(?R)/ =abc abcd
/(?<!\w)(?R)/ abcd
/(?<=\w)(?R)/ abcd
/(a+|(?R)b)/ aaa bbb
/[^\xff]((?1))/BI abcd
/(x(?1)){4}/
/[axm]{7}/
/(.|.)*?bx/ \= Expect limit exceeded aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabax\=match_limit=10000000 # Test JIT disable
/abc/ abc abc\=no_jit /abc/jitfast abc abc\=no_jit # ----
/[aC]/mg,firstline,newline=lf match\nmatch
/[aCz]/mg,firstline,newline=lf match\nmatch
//jit \=null_subject /(.)(.)/jitfast,replace=$2+$1 ABCD
/(...)-(...)/jitfast abc-xyz\=get=2
# End of testinput17
|