// RUN: %target-run-simple-swift | %FileCheck %s
// REQUIRES: executable_test

import Swift

// Regression test for <rdar://problem/16119895>.

struct Generic<T> {
  typealias Storage = ManagedBuffer<Int,T>

  init() {
    buffer = ManagedBufferPointer(
      bufferClass: Storage.self, minimumCapacity: 0) { _,_ in 0 }
  }

  mutating func isUniqueReference() -> Bool {
    return buffer.isUniqueReference()
  }
  
  var buffer: ManagedBufferPointer<Int, T>
}
func g0() {
  var x = Generic<Int>()
  // CHECK: true
  print(x.isUniqueReference())
  // CHECK-NEXT: true
  print(x.buffer.isUniqueReference())
}
g0()


struct NonGeneric {
  typealias T = Int
  typealias Storage = ManagedBuffer<Int,T>

  init() {
    buffer = ManagedBufferPointer(
      bufferClass: Storage.self, minimumCapacity: 0) { _,_ in 0 }
  }

  mutating func isUniqueReference() -> Bool {
    return buffer.isUniqueReference()
  }
  
  var buffer: ManagedBufferPointer<Int, T>
}
func g1() {
  var x = NonGeneric()
  // CHECK-NEXT: true
  print(x.isUniqueReference())
  // CHECK-NEXT: true
  print(x.buffer.isUniqueReference())
}
g1()
