Skip to content

Commit

Permalink
Merge pull request ruby-llvm#38 from ishikawa/passing-int-to-llvm-boo…
Browse files Browse the repository at this point in the history
…l-param

Convert LLVMBool parameteter/result to Ruby boolean
  • Loading branch information
jvoorhis committed May 31, 2014
2 parents 38ca78b + 20f220c commit 297f05e
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 7 deletions.
9 changes: 7 additions & 2 deletions lib/llvm/core/value.rb
Original file line number Diff line number Diff line change
Expand Up @@ -639,11 +639,16 @@ def initializer=(val)
end

def global_constant?
C.is_global_constant(self)
C.is_global_constant(self) != 0
end

def global_constant=(flag)
C.set_global_constant(self, flag)
if flag.kind_of?(Integer)
warn 'Warning: Passing Integer value to LLVM::GlobalValue#global_constant=(Boolean) is deprecated.'
flag = !flag.zero?
end

C.set_global_constant(self, flag ? 1 : 0)
end

def unnamed_addr?
Expand Down
9 changes: 7 additions & 2 deletions lib/llvm/transforms/builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,14 @@ def build_with_lto(pass_manager, internalize=false, run_inliner=false)
raise ArgumentError, "FunctionPassManager does not support LTO"
end

# Add flag() when the header gets fixed and has LLVMBool
if internalize.kind_of?(Integer) || run_inliner.kind_of?(Integer)
warn 'Warning: Passing Integer value to LLVM::PassManagerBuilder#build_with_lto is deprecated.'
internalize = !internalize.zero? if internalize.kind_of?(Integer)
run_inliner = !run_inliner.zero? if run_inliner.kind_of?(Integer)
end

C.pass_manager_builder_populate_lto_pass_manager(self,
pass_manager, internalize, run_inliner)
pass_manager, flag(internalize), flag(run_inliner))
end

private
Expand Down
11 changes: 11 additions & 0 deletions test/module_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,20 @@ def test_global_variable

assert var.kind_of?(LLVM::GlobalVariable)

# unnamed_addr
assert !var.unnamed_addr?
var.unnamed_addr = true
assert var.unnamed_addr?

# global_constant
assert !var.global_constant?
var.global_constant = true
assert var.global_constant?

assert_output("", "Warning: Passing Integer value to LLVM::GlobalValue#global_constant=(Boolean) is deprecated.\n") do
var.global_constant = 0
end
assert !var.global_constant?
end
end

Expand Down
27 changes: 24 additions & 3 deletions test/pass_manager_builder_test.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
require 'test_helper'
require 'llvm/config'
require 'llvm/transforms/builder'

class PassManagerBuilderTest < Minitest::Test
def setup
LLVM.init_jit
@builder = LLVM::PassManagerBuilder.new

machine = LLVM::Target.by_name('x86-64').create_machine('x86-linux-gnu')
@pass_manager = LLVM::PassManager.new(machine)
end

def teardown
@builder.dispose
@pass_manager.dispose
end

def test_init
Expand All @@ -26,8 +31,24 @@ def test_opt_level
end

def test_build
machine = LLVM::Target.by_name('x86-64').create_machine('x86-linux-gnu')
pass_manager = LLVM::PassManager.new(machine)
@builder.build(pass_manager)
@builder.build(@pass_manager)
end

def test_build_with_lto
assert_output('', '') do
@builder.build_with_lto(@pass_manager)
end
end

def test_build_with_lto_deprecated_internalize_param
assert_output("", "Warning: Passing Integer value to LLVM::PassManagerBuilder#build_with_lto is deprecated.\n") do
@builder.build_with_lto(@pass_manager, 0)
end
end

def test_build_with_lto_deprecated_run_inliner_param
assert_output("", "Warning: Passing Integer value to LLVM::PassManagerBuilder#build_with_lto is deprecated.\n") do
@builder.build_with_lto(@pass_manager, false, 0)
end
end
end

0 comments on commit 297f05e

Please sign in to comment.