From a214323c313f80d2d6d44d87360a4a2cfc97d852 Mon Sep 17 00:00:00 2001 From: Charles Oliver Nutter Date: Fri, 27 Feb 2026 15:29:07 -0600 Subject: [PATCH] Ensure hard reference for frozen strings These frozen strings must be hard referenced until the identity has been tested, or an intervening GC could cause them to get collected and improperly fail the test. The cross-require global now points at the string in question and is cleared after the identity test. --- language/fixtures/freeze_magic_comment_across_files.rb | 3 ++- .../fixtures/freeze_magic_comment_across_files_diff_enc.rb | 3 ++- .../fixtures/freeze_magic_comment_across_files_no_comment.rb | 3 ++- language/fixtures/freeze_magic_comment_one_literal.rb | 4 ++-- language/fixtures/freeze_magic_comment_required.rb | 2 +- language/fixtures/freeze_magic_comment_required_diff_enc.rb | 2 +- language/fixtures/freeze_magic_comment_required_no_comment.rb | 2 +- 7 files changed, 11 insertions(+), 8 deletions(-) diff --git a/language/fixtures/freeze_magic_comment_across_files.rb b/language/fixtures/freeze_magic_comment_across_files.rb index 3aed2f29b6..4297ac84ec 100644 --- a/language/fixtures/freeze_magic_comment_across_files.rb +++ b/language/fixtures/freeze_magic_comment_across_files.rb @@ -2,4 +2,5 @@ require_relative 'freeze_magic_comment_required' -p "abc".object_id == $second_literal_id +p "abc".equal?($second_literal) +$second_literal = nil \ No newline at end of file diff --git a/language/fixtures/freeze_magic_comment_across_files_diff_enc.rb b/language/fixtures/freeze_magic_comment_across_files_diff_enc.rb index 53ef959970..e9ca35e7c8 100644 --- a/language/fixtures/freeze_magic_comment_across_files_diff_enc.rb +++ b/language/fixtures/freeze_magic_comment_across_files_diff_enc.rb @@ -2,4 +2,5 @@ require_relative 'freeze_magic_comment_required_diff_enc' -p "abc".object_id != $second_literal_id +p !"abc".equal?($second_literal) +$second_literal = nil diff --git a/language/fixtures/freeze_magic_comment_across_files_no_comment.rb b/language/fixtures/freeze_magic_comment_across_files_no_comment.rb index fc6cd5bf82..c9eaab46a2 100644 --- a/language/fixtures/freeze_magic_comment_across_files_no_comment.rb +++ b/language/fixtures/freeze_magic_comment_across_files_no_comment.rb @@ -2,4 +2,5 @@ require_relative 'freeze_magic_comment_required_no_comment' -p "abc".object_id != $second_literal_id +p !"abc".equal?($second_literal) +$second_literal = nil diff --git a/language/fixtures/freeze_magic_comment_one_literal.rb b/language/fixtures/freeze_magic_comment_one_literal.rb index d35905b332..c175b2b7a2 100644 --- a/language/fixtures/freeze_magic_comment_one_literal.rb +++ b/language/fixtures/freeze_magic_comment_one_literal.rb @@ -1,4 +1,4 @@ # frozen_string_literal: true -ids = Array.new(2) { "abc".object_id } -p ids.first == ids.last +objs = Array.new(2) { "abc" } +p objs.first.equal?(objs.last) diff --git a/language/fixtures/freeze_magic_comment_required.rb b/language/fixtures/freeze_magic_comment_required.rb index a4ff4459b1..f75acb2ce3 100644 --- a/language/fixtures/freeze_magic_comment_required.rb +++ b/language/fixtures/freeze_magic_comment_required.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -$second_literal_id = "abc".object_id +$second_literal = "abc" diff --git a/language/fixtures/freeze_magic_comment_required_diff_enc.rb b/language/fixtures/freeze_magic_comment_required_diff_enc.rb index f72a32e879..739e96e99a 100644 --- a/language/fixtures/freeze_magic_comment_required_diff_enc.rb +++ b/language/fixtures/freeze_magic_comment_required_diff_enc.rb @@ -1,4 +1,4 @@ # encoding: euc-jp # built-in for old regexp option # frozen_string_literal: true -$second_literal_id = "abc".object_id +$second_literal = "abc" diff --git a/language/fixtures/freeze_magic_comment_required_no_comment.rb b/language/fixtures/freeze_magic_comment_required_no_comment.rb index e09232a5f4..6fbe175b42 100644 --- a/language/fixtures/freeze_magic_comment_required_no_comment.rb +++ b/language/fixtures/freeze_magic_comment_required_no_comment.rb @@ -1 +1 @@ -$second_literal_id = "abc".object_id +$second_literal = "abc"