Trying to understand this issue a little bit more. Actually, the failure I see occurs a little bit earlier in PCRE.tests, at lines : /(cat(a(ract|tonic)|erpillar)) \1()2(3)/ cataract cataract23 0: cataract cataract23 1: cataract 2: aract 3: ract -> 4: 5: 3 In function `regex-tests-PCRE', there are 4 cases testes in sequence, and in case of failure, there is a catch-all reset which sets the pattern back to nil. The regex that should catch the line starting by "4:" is : ;; verification line: succeeded match ((save-excursion (re-search-forward "^ *\\([0-9]+\\): \\(.*\\)" nil t)) But notice that there is a space after the colon, so the line is not matched and the reset occurs in the test. The patter is set back to nil and there is a failure when reaching the PCRE.tests line starting by "5:". Could it be that there is a space in PCRE.tests at end of line "4: " and that git has removed it ? Fabrice 2017-08-03 12:28 GMT+02:00 Fabrice Popineau : > > I have this test failure on PCRE regex tests (emacs-master, mingw64) : > > $ cat test/src/regex-tests.log > Running 22 tests (2017-08-01 22:21:34+0200) > passed 1/22 regex-tests-BOOST > Test regex-tests-PCRE backtrace: > Test regex-tests-PCRE condition: > (wrong-type-argument stringp nil) > FAILED 2/22 regex-tests-PCRE > > > The failure occurs here in PCRE.tests : > > caterpillar caterpillar23 > 0: caterpillar caterpillar23 > 1: caterpillar > 2: erpillar > 3: > 4: > 5: 3 > > The variable which is nil instead of being a string is `pattern' > in (if (string-match pattern string) nil 'search-failed)`' : > > (defun regex-tests-PCRE () > (let (failures > pattern icase string what-failed matches-observed) > (regex-tests-generic-line > ?# "PCRE.tests" regex-tests-PCRE-whitelist > > (cond > > ;; pattern > ((save-excursion (re-search-forward "^/\\(.*\\)/\\(.*i?\\)$" nil t)) > (setq icase (string= "i" (match-string 2)) > pattern (regex-tests-unextend (match-string 1)))) > > ;; string. read it in, match against pattern, and save all the > results > ((save-excursion (re-search-forward "^ \\(.*\\)" nil t)) > (let ((case-fold-search icase)) > (setq string (match-string 1) > > ;; the regex match under test > what-failed > (condition-case nil > (if (string-match pattern string) nil 'search-failed) > ('invalid-regexp 'compilation-failed)) > > matches-observed > (cl-loop for x from 0 to 20 > collect (and (not what-failed) > (or (match-string x string) > ""))))) > nil) > > But I have no idea why pattern is losing its value ? > > Any clue ? > > Regards, > > Fabrice > >