From e2de39a227c8c4e99688fbfdc3cfab7e942ecb2e Mon Sep 17 00:00:00 2001
From: Ary Borenszweig <aborenszweig@manas.com.ar>
Date: Wed, 26 Nov 2014 19:27:15 -0300
Subject: [PATCH] Fixed crystal_type_id (important for exceptions and
 re-raising)

---
 spec/compiler/codegen/primitives_spec.cr   | 13 +++++++++++++
 src/compiler/crystal/codegen/primitives.cr |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/spec/compiler/codegen/primitives_spec.cr b/spec/compiler/codegen/primitives_spec.cr
index fc66279874..44568c96fe 100755
--- a/spec/compiler/codegen/primitives_spec.cr
+++ b/spec/compiler/codegen/primitives_spec.cr
@@ -73,4 +73,17 @@ describe "Code gen: primitives" do
       __LINE__
       ").to_i.should eq(3)
   end
+
+  it "codeges crystal_type_id with union type" do
+    run("
+      class Foo
+      end
+
+      class Bar < Foo
+      end
+
+      f = Foo.allocate || Bar.allocate
+      f.crystal_type_id == Foo.allocate.crystal_type_id
+      ").to_b.should be_true
+  end
 end
diff --git a/src/compiler/crystal/codegen/primitives.cr b/src/compiler/crystal/codegen/primitives.cr
index ce6edf5bbf..8c710923fc 100644
--- a/src/compiler/crystal/codegen/primitives.cr
+++ b/src/compiler/crystal/codegen/primitives.cr
@@ -382,7 +382,7 @@ class Crystal::CodeGenVisitor < Crystal::Visitor
   end
 
   def codegen_primitive_object_crystal_type_id(node, target_def, call_args)
-    type_id(type)
+    type_id(call_args[0], type)
   end
 
   def codegen_primitive_symbol_to_s(node, target_def, call_args)
-- 
GitLab