[#100689] [Ruby master Feature#17303] Make webrick to bundled gems or remove from stdlib — hsbt@...
Issue #17303 has been reported by hsbt (Hiroshi SHIBATA).
11 messages
2020/11/02
[#100852] [Ruby master Feature#17326] Add Kernel#must! to the standard library — zimmerman.jake@...
Issue #17326 has been reported by jez (Jake Zimmerman).
24 messages
2020/11/14
[#100930] [Ruby master Feature#17333] Enumerable#many? — masafumi.o1988@...
Issue #17333 has been reported by okuramasafumi (Masafumi OKURA).
10 messages
2020/11/18
[#101071] [Ruby master Feature#17342] Hash#fetch_set — hunter_spawn@...
Issue #17342 has been reported by MaxLap (Maxime Lapointe).
26 messages
2020/11/25
[ruby-core:101029] [Ruby master Bug#17338] ruby-spec stuck in "C-API Kernel function rb_rescue2"
From:
merch-redmine@...
Date:
2020-11-23 17:45:03 UTC
List:
ruby-core #101029
Issue #17338 has been updated by jeremyevans0 (Jeremy Evans).
Status changed from Open to Feedback
I suspect this may be due to the TypeError occurring during the rescue handling. One possibility is to preprocess the list of exception classes to make sure they are all classes or modules. This is different than the ruby-level rescue clause, which doesn't execute the rescue list expression unless an exception is raised, but since `rb_rescue2` needs to be passed a `va_list` of `VALUE`s, it may be acceptable.
Can you try this patch and see if it fixes the issue:
```diff
diff --git a/eval.c b/eval.c
index 55ac8b4eac..1b05d3a10a 100644
--- a/eval.c
+++ b/eval.c
@@ -1012,6 +1012,15 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1,
rb_control_frame_t *volatile cfp = ec->cfp;
volatile VALUE result = Qfalse;
volatile VALUE e_info = ec->errinfo;
+ VALUE eclass;
+ va_list args_check;
+
+ va_copy(args_check, args);
+ while ((eclass = va_arg(args_check, VALUE)) != 0) {
+ if (!(RB_TYPE_P(eclass, T_CLASS) || RB_TYPE_P(eclass, T_MODULE))) {
+ rb_raise(rb_eTypeError, "class or module required");
+ }
+ }
EC_PUSH_TAG(ec);
if ((state = EC_EXEC_TAG()) == TAG_NONE) {
@@ -1032,7 +1041,6 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1,
if (state == TAG_RAISE) {
int handle = FALSE;
- VALUE eclass;
while ((eclass = va_arg(args, VALUE)) != 0) {
if (rb_obj_is_kind_of(ec->errinfo, eclass)) {
```
This uses `va_copy`, which should be acceptable now because it is in C99. https://bugs.ruby-lang.org/projects/ruby-master/wiki/C99 links to a work around that can be used in Ruby <2.7 (before we switched to allowing C99 features), in case we need to backport this to Ruby 2.6.
----------------------------------------
Bug #17338: ruby-spec stuck in "C-API Kernel function rb_rescue2"
https://bugs.ruby-lang.org/issues/17338#change-88701
* Author: vo.x (Vit Ondruch)
* Status: Feedback
* Priority: Normal
* Assignee: Eregon (Benoit Daloze)
* ruby -v: ruby 3.0.0dev (2020-11-20 master 1f7b557890) [i386-linux]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
Trying to build Ruby on Fedora Rawhide, the ruby-spec test suite gets stuck on some platforms (I noticed this on i686 and ppc64le) somewhere around:
~~~
C-API Kernel function rb_rescue2
- only rescues if one of the passed exceptions is raised
~~~
I have tried to disable the last test listed via `-P 'only rescues if one of the passed exceptions is raised'` but the test suite is stuck again. My next suspect is [1].
[1]: https://github.com/ruby/spec/commit/fb363fb1d4382f6cc25ac3dde5d44afeccf7f80c
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>