summaryrefslogtreecommitdiff
path: root/ext/-test-/bug-14834/bug-14384.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/-test-/bug-14834/bug-14384.c')
-rw-r--r--ext/-test-/bug-14834/bug-14384.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/ext/-test-/bug-14834/bug-14384.c b/ext/-test-/bug-14834/bug-14384.c
new file mode 100644
index 0000000000..58abd6d435
--- /dev/null
+++ b/ext/-test-/bug-14834/bug-14384.c
@@ -0,0 +1,35 @@
+#include <ruby/ruby.h>
+#include <ruby/debug.h>
+
+static NOINLINE(VALUE f(VALUE));
+static NOINLINE(void g(VALUE, void*));
+extern NOINLINE(void Init_bug_14384(void));
+
+void
+Init_bug_14834(void)
+{
+ VALUE q = rb_define_module("Bug");
+ rb_define_module_function(q, "bug_14834", f, 0);
+}
+
+VALUE
+f(VALUE q)
+{
+ int w[] = { 0, 1024 };
+ VALUE e = rb_tracepoint_new(Qnil, RUBY_INTERNAL_EVENT_NEWOBJ, g, w);
+
+ rb_tracepoint_enable(e);
+ return rb_ensure(rb_yield, q, rb_tracepoint_disable, e);
+}
+
+void
+g(MAYBE_UNUSED(VALUE q), void* w)
+{
+ const int *e = (const int *)w;
+ const int r = *e++;
+ const int t = *e++;
+ VALUE y[t];
+ int u[t];
+
+ rb_profile_frames(r, t, y, u);
+}