// REQUIRES: objc_interop
// RUN: %empty-directory(%t) && %target-swift-frontend -c -update-code -primary-file %s -F %S/mock-sdk -api-diff-data-file %S/Inputs/API.json -emit-migrated-file-path %t/rename.swift.result -emit-remap-file-path %t/rename.swift.remap -o /dev/null
// RUN: diff -u %S/rename.swift.expected %t/rename.swift.result

import Bar

func foo(_ b: BarForwardDeclaredClass) {
  b.barNewInstanceFunc1(newlabel1: 0, newlabel2: 1, newlabel3: 2, newlabel4: 3)
  barGlobalFuncNewName(newlabel: 2)
  b.barNewInstanceFunc1(newlabel1: 0, newlabel2: 1, newlabel3: 2, newlabel4: 3)
  barGlobalFuncNewName(newlabel: 2)
  b.barNewInstanceFunc1(newlabel1: 0, newlabel2: 1, newlabel3: 2, newlabel4: 3)
  barGlobalFuncNewName(newlabel: 2)
  b.barNewInstanceFunc1(newlabel1: 0, newlabel2: 1, newlabel3: 2, newlabel4: 3)
  barGlobalFuncNewName(newlabel: 2)
  b.barNewInstanceFunc1(newlabel1: 0, newlabel2: 1, newlabel3: 2, newlabel4: 3)
  barGlobalFuncNewName(newlabel: 2)
  _ = NewEnum.enumElement
  _ = PropertyUserInterface.newMethodPlus()
  let _: BarBase.Nested
  _ = AwesomeWrapper.newName(is: 0, at: 1, for: 2)
}

func foo1(_ b: BarForwardDeclaredClass) {
  b.barNewInstanceFunc2(0,1,NotToRemove1:2,3)
}
