Bug #14686
closedWindows - uninitialized constant Fiddle::Function::STDCALL, test issue
Description
While testing the test/ruby folder with frozen-string, I came across a few issues. More later...
I had the following failures in test_rubyoptions.rb, which were due to output on stderr:
3) Failure: TestRubyOptions#test_frozen_string_literal_debug [E:/GitHub/ruby/test/ruby/test_rubyoptions.rb:986]: [["--disable=gems", "--enable-frozen-string-literal", "--debug"], "+\"foo\#{123}bar\" << \"bar\""]. 1. [2/2] Assertion for "stderr" | <[]> expected but was | <["Exception `NameError' at C:/ruby26_64/lib/ruby/2.6.0/fiddle/import.rb:160 - uninitialized constant Fiddle::Function::STDCALL"]>. 4) Failure: TestRubyOptions#test_debug [E:/GitHub/ruby/test/ruby/test_rubyoptions.rb:83]: 1. [2/2] Assertion for "stderr" | <[]> expected but was | <["Exception `NameError' at C:/ruby26_64/lib/ruby/2.6.0/fiddle/import.rb:160 - uninitialized constant Fiddle::Function::STDCALL"]>. The code in questions is https://github.com/ruby/ruby/blob/trunk/ext/fiddle/lib/fiddle/import.rb#L158-L164, as follows:
CALL_TYPE_TO_ABI = Hash.new { |h, k| raise RuntimeError, "unsupported call type: #{k}" }.merge({ :stdcall => (Function::STDCALL rescue Function::DEFAULT), :cdecl => Function::DEFAULT, nil => Function::DEFAULT }).freeze private_constant :CALL_TYPE_TO_ABI Changing it to the following removed failures:
CALL_TYPE_TO_ABI = Hash.new { |h, k| raise RuntimeError, "unsupported call type: #{k}" }.merge({ :stdcall => defined?(Function::STDCALL) ? Function::STDCALL : Function::DEFAULT, :cdecl => Function::DEFAULT, nil => Function::DEFAULT }).freeze private_constant :CALL_TYPE_TO_ABI I haven't worked much with Fiddle, but I checked for the existence of STDCALL in the listed ruby-loco build, the 2.5.1 RubyInstaller2 build, and a recent local vc14 trunk build. It did not exist in any of the three builds. Hence, I don't know if this is a correct fix...
Patch attached. Thanks, Greg
Files
Updated by MSP-Greg (Greg L) over 7 years ago
- File fiddle_import.rb.patch fiddle_import.rb.patch added
Probably better to use Function.const_defined?(:STDCALL) than defined?(Function::STDCALL)
Updated by nobu (Nobuyoshi Nakada) over 7 years ago
- Status changed from Open to Closed
Applied in changeset trunk|r63205.
fiddle/import.rb: suppress warning
- ext/fiddle/lib/fiddle/import.rb: suppress exception report when
$DEBUG is enabled. [ruby-core:86536] [Bug #14686]