< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事(スレッド移動)
N :次の記事(スレッド移動)
|<:前のスレッド
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
Issue #17349 has been reported by shuujii (Shuji KOBAYASHI).
----------------------------------------
Bug #17349: Rake での並行実行における正規表現マッチングの異常
https://bugs.ruby-lang.org/issues/17349
* Author: shuujii (Shuji KOBAYASHI)
* Status: Open
* Priority: Normal
* ruby -v: ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
小さな再現コードが作成できなかったのですが、以下のように Rake で並行実行すると正規表現のマッチングがおかしくなることがあるように見えます。
### 再現手順
``` shell
$ git clone https://github.com/mruby/mruby
$ cd mruby
$ git checkout 0cb3a718
$ rake -m CONFIG=boxing clean gensym
Cleaned up target build folder
GEN build/boxing-no-m64-i32/presym
GEN build/boxing-no-m64-i32/include/mruby/presym.inc
GEN build/boxing-no-m32-i32/presym
GEN build/boxing-no-m32-i64/presym
(snip)
rake aborted!
NoMethodError: undefined method `*' for nil:NilClass
/mruby/tasks/presym.rake:81:in `block (4 levels) in <top (required)>'
/mruby/tasks/presym.rake:80:in `map'
/mruby/tasks/presym.rake:80:in `block (3 levels) in <top (required)>'
/mruby/tasks/presym.rake:69:in `map'
/mruby/tasks/presym.rake:69:in `block (2 levels) in <top (required)>'
Tasks: TOP => gensym => /mruby/build/boxing-no-m64-i64/presym
(See full trace by running task with --trace)
rake aborted!
```
エラーが発生しているのは以下の部分です。
https://github.com/mruby/mruby/blob/13fc5034345ae159f034849cb3f235f4463edd45/tasks/presym.rake#L80-L82
`prefix` や `suffix` の値がおかしくなっているために、`macro_to_symbol[[prefix, suffix]]` が `nil` なり例外になっています。本来であればこの値は `nil` にならないはずのものです。
### 補足
* `rake` に `-m` を付けないで並行実行にしなければ発生しません。
* こちらの環境では少なくとも30回に1回くらいは上記のエラーが発生します。
* 正規表現のマッチ結果は上記とは違う異常になることもあるようです。
--
https://bugs.ruby-lang.org/