From: Greg.mpls@... Date: 2018-04-13T01:01:19+00:00 Subject: [ruby-core:86537] [Ruby trunk Bug#14686] Windows - uninitialized constant Fiddle::Function::STDCALL, test issue Issue #14686 has been updated by MSP-Greg (Greg L). File fiddle_import.rb.patch added Probably better to use `Function.const_defined?(:STDCALL)` than `defined?(Function::STDCALL)` ---------------------------------------- Bug #14686: Windows - uninitialized constant Fiddle::Function::STDCALL, test issue https://bugs.ruby-lang.org/issues/14686#change-71475 * Author: MSP-Greg (Greg L) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.6.0dev (2018-04-12 trunk 63140) [x64-mingw32] * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- 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: ```ruby 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: ```ruby 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-------------------------------- fiddle_import.rb.patch (666 Bytes) fiddle_import.rb.patch (666 Bytes) -- https://bugs.ruby-lang.org/ Unsubscribe: