diff --git a/lib/crystal/type_inference/call.rb b/lib/crystal/type_inference/call.rb
index b088182a955f3dccaaf905bf1e625d14311438b4..a70ccf6f5f1156e9fcd1e02eb2213e8dce1955b8 100644
--- a/lib/crystal/type_inference/call.rb
+++ b/lib/crystal/type_inference/call.rb
@@ -21,7 +21,7 @@ module Crystal
       return if @types_signature == types_signature
       @types_signature = types_signature
 
-      if has_unions_in_obj? || (obj && obj.type.has_restricted_defs?(name) && has_unions_in_args?)
+      if has_unions_in_obj? || (obj && obj.type.has_restricted_defs?(name) && has_unions_in_args?) || (scope && scope.has_restricted_defs?(name) && has_unions_in_args?)
         compute_dispatch
         return
       end
diff --git a/lib/crystal/types.rb b/lib/crystal/types.rb
index 55ded77e54c9403f65d682175ca5fa58d401ad4c..7d06632f8f7b189794c9e39c3ff3a723f4da6e4a 100644
--- a/lib/crystal/types.rb
+++ b/lib/crystal/types.rb
@@ -171,7 +171,7 @@ module Crystal
 
     def has_restricted_defs?(name)
       defs = @defs[name]
-      defs && defs.keys.any? { |ary| ary[0].any? }
+      (defs && defs.keys.any? { |ary| ary[0].any? }) || (parents && parents.any? { |p| p.has_restricted_defs?(name) })
     end
   end