 
     var anyObjectArr: AnyObject[]
       = AnyObject[](ArrayBuffer(reinterpretCast(source) as _CocoaArray))
+    return _arrayBridgeFromObjectiveCConditional(anyObjectArr)
+  }
+
+  static func bridgeFromObjectiveCConditional(source: NSArray) -> Array? {
+    // Construct the result array by conditionally bridging each element.
+    var anyObjectArr 
+      = AnyObject[](ArrayBuffer(reinterpretCast(source) as _CocoaArray))
+    if isBridgedVerbatimToObjectiveC(T.self) {
+      return _arrayDownCastConditional(anyObjectArr)
+    }
+
     return _arrayBridgeFromObjectiveCConditional(anyObjectArr)
   }
 

///
/// to Objective-C code as a method that returns an NSArray.
func _convertArrayToNSArray<T>(arr: T[]) -> NSArray {
  // FIXME: Check conditional bridging here?
  return arr.bridgeToObjectiveC()
}


    return Dictionary(_cocoaDictionary: reinterpretCast(x))
  }

  static func bridgeFromObjectiveCConditional(x: NSDictionary) -> Dictionary? {
    let anyDict = x as Dictionary<NSObject, AnyObject>
    if isBridgedVerbatimToObjectiveC(KeyType.self) &&
       isBridgedVerbatimToObjectiveC(ValueType.self) {
    return Swift._dictionaryDownCastConditional(anyDict)
    }

    return Swift._dictionaryBridgeFromObjectiveCConditional(anyDict)
  }

  static func isBridgedToObjectiveC() -> Bool {
    return Swift.isBridgedToObjectiveC(KeyType.self) &&
           Swift.isBridgedToObjectiveC(ValueType.self)
