// An end-to-end test to ensure local variables have debug info.  This
// test only verifies that the variables show up in the debug info at
// all. There are other tests testing liveness and representation.

// RUN: %gyb %s -o %t.swift
// RUN: %target-swift-frontend %t.swift -g -emit-ir -o - | %FileCheck %t.swift
// RUN: %target-swift-frontend %t.swift -g -c -o %t.o
// RUN: %llvm-dwarfdump %t.o \
// RUN:   | %FileCheck %t.swift --check-prefix=DWARF
// RUN: %llvm-dwarfdump --verify %t.o
// RUN: %target-swift-frontend %t.swift -O -g -emit-ir -o - \
// RUN:   | %FileCheck %t.swift --check-prefix=OPTZNS

// OPTZNS-NOT: alloca{{.*}}.addr

public class C {
  let member : Int
  init(_ i : Int) { member = i }
  func isZero() -> Bool { return member == 0 }
}

public struct S {
  let i : Int32 = -1
  let j : Int32 = 2
}

public struct SLarge {
  var tuple : (Int64, Int64, Int64, Int64, Int64, Int64, Int64, Int64)
}

public enum ENoPayload {
  case one
  case two
}

public enum ESinglePayload : Int {
  case one = 1
  case two = 2
}

public enum EMultiPayload {
  case int(Int)
  indirect case recursive(EMultiPayload)
  case string(String)
}

public protocol Proto {
  func f()
}

func nop() {}
func use<T>(_ x: T) {}
func variable_use<T>(_ x: inout T) {}

%{
type_initializer_map = [
  #// Basic types.
   ("UInt64", "64"), ("UInt32", "32"), ("Int64", "64"), ("Int32", "32"),
   ("Int", "42"), ("UInt", "42"),
   ("Float", "2.71"), ("Double", "3.14"),
  #// Sugared types and strings.
   ("String", '"string"'),
   ("[UInt64]", "[1, 2, 3]"),
   ("Dictionary<UInt64, String>", '[1:"entry"]'),
  #// Classes, structs, tuples.
   ("(Int, C)", "(42, C(42))"),
   ("C", "C(42)"),
   ("S", "S()"),
   ("SLarge", "SLarge(tuple: (1,2,3,4,5,6,7,8))"),  
  #// Enums.
   ("ENoPayload", ".two"),
   ("ESinglePayload", ".two"),
   ("EMultiPayload", ".recursive(.string(\"string\"))"),
  #// Existentials.
   ("T", "self.t"),
   ("U", "self.u"),
  #// Functions.
   ("(() -> ())", "nop")
  ]

import re
def derive_name((type, val)):
  return (re.sub(r'[<> ,\.\?\(\)\[\]-]', '_', type), type, val)

for name, type, val in map(derive_name, type_initializer_map):
  generic = (type in ['T', 'U'])
}%                                  
%  if generic:
public class ContextA_${name}<T, U : Proto> {
  let t : T
  let u : U
  init(_ t: T, _ u: U) { self.t = t; self.u = u; }
%  end
  
public func constant_${name}() -> ${type} {
  let v : ${type} = ${val}
  // CHECK: !DILocalVariable(name: "v",{{.*}} line: [[@LINE-1]]
  // DWARF: DW_TAG_subprogram
  // DWARF-LABEL: DW_AT_name {{.*}}constant_${name}
  // DWARF-NOT: DW_TAG_subprogram
%  if generic:
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("self")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
%  end
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: {{(DW_AT_location)|(DW_AT_const_value)}}
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("v")
  return v
}

public func constvar_${name}() {
  var v : ${type} = ${val}
  // CHECK: !DILocalVariable(name: "v",{{.*}} line: [[@LINE-1]]
  // DWARF: DW_TAG_subprogram
  // DWARF-LABEL: DW_AT_name {{.*}}constvar_${name}
  // DWARF-NOT: DW_TAG_subprogram
%  if generic:
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("self")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
%  end
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: {{(DW_AT_location)|(DW_AT_const_value)}}
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("v")
  variable_use(&v)
}

public func let_${name}() {
  let v : ${type} = constant_${name}()
  // CHECK: !DILocalVariable(name: "v",{{.*}} line: [[@LINE-1]]
  // DWARF: DW_TAG_subprogram
  // DWARF-LABEL: DW_AT_name {{.*}}let_${name}
  // DWARF-NOT: DW_TAG_subprogram
%  if generic:
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("self")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
%  end
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: {{(DW_AT_location)|(DW_AT_const_value)}}
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("v")
  use(v)
}

public func case_let_${name}() {
  switch constant_${name}() {
    case let v:
  // CHECK: !DILocalVariable(name: "v",{{.*}} line: [[@LINE-1]]
      use(v)
  }
  // DWARF: DW_TAG_subprogram
  // DWARF-LABEL: DW_AT_name {{.*}}let_${name}
  // DWARF-NOT: DW_TAG_subprogram
%  if generic:
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("self")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
%  end
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: {{(DW_AT_location)|(DW_AT_const_value)}}
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("v")
}
  
public func optional_${name}() -> ${type}? {
  return constant_${name}();
}

public func guard_let_${name}() {
  let opt : ${type}? = optional_${name}()
  // CHECK: !DILocalVariable(name: "opt",{{.*}} line: [[@LINE-1]]
  // DWARF: DW_TAG_subprogram
  // DWARF-LABEL: DW_AT_name {{.*}}guard_let_${name}
  // DWARF-NOT: DW_TAG_subprogram
%  if generic:
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("self")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
%  end
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_location
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name
  // DWARF-SAME: "{{(opt)|(val)}}"
  guard let val = opt else {
    use(opt)
    fatalError()
  }
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_location
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name
  // DWARF-SAME: "{{(opt)|(val)}}"
  use(val)
}

public func var_${name}() {
  var v : ${type} = constant_${name}()
  // CHECK: !DILocalVariable(name: "v",{{.*}} line: [[@LINE-1]]
  // DWARF: DW_TAG_subprogram
  // DWARF-LABEL: DW_AT_name {{.*}}var_${name}
  // DWARF-NOT: DW_TAG_subprogram
%  if generic:
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("self")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
%  end
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_location
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name {{.*}}"v"
  variable_use(&v)
}

public func arg_${name}(_ v: ${type}) {
  // CHECK: !DILocalVariable(name: "v",{{.*}} line: [[@LINE-1]]
  // DWARF: DW_TAG_subprogram
  // DWARF-LABEL: DW_AT_name {{.*}}arg_${name}
  // DWARF-NOT: DW_TAG_subprogram
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_location
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name {{.*}}"v"
%  if generic:
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("self")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF: DW_AT_artificial
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
%  end
  use(v)
}

public func arg_inout_${name}(_ v: inout ${type}) {
  // CHECK: !DILocalVariable(name: "v",{{.*}} line: [[@LINE-1]]
  // DWARF: DW_TAG_subprogram
  // DWARF-LABEL: DW_AT_name {{.*}}arg_inout_${name}
  // DWARF-NOT: DW_TAG_subprogram
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_location
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name {{.*}}"v"
%  if generic:
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("self")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
%  end
  variable_use(&v)
}

public func arg_tuple_${name}(_ v: (${type}, ${type})) {
  let (_, y) = v
  // CHECK: !DILocalVariable(name: "y",{{.*}} line: [[@LINE-1]]
  // DWARF: DW_TAG_subprogram
  // DWARF-LABEL: DW_AT_name {{.*}}arg_tuple_${name}
  // DWARF-NOT: DW_TAG_subprogram
  // DWARF:  DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_location
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name {{.*}}"v"
%  if generic:
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("self")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
  // FIMXE-DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF: DW_AT_artificial
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
%  end
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_location
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name {{.*}}"y"
  use(y)
}
  
public func closure_capture_${name}() {
  let v : ${type} = constant_${name}();
  // CHECK: !DILocalVariable(name: "v",{{.*}} line: [[@LINE-1]]
  use({ () -> ${type} in v }())
  // DWARF: DW_TAG_subprogram
  // DWARF-LABEL: DW_AT_name {{.*}}closure_capture_${name}
  // DWARF: DW_TAG_subprogram
  // DWARF: DW_AT_linkage_name {{.*}}closure_capture_${name}
  // DWARF-NOT: DW_AT_name {{.*}}closure_capture_${name}
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_location
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name {{.*}}"v"
%  if generic:
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
%  end
}

public func closure_capture_byref_${name}() {
  var v : ${type} = constant_${name}();
  // CHECK: !DILocalVariable(name: "v",{{.*}} line: [[@LINE-1]]
  { () -> () in v = ${val} }()
  use(v)
  // DWARF: DW_TAG_subprogram
  // DWARF-LABEL: DW_AT_name {{.*}}closure_capture_byref_${name}
  // DWARF: DW_TAG_subprogram
  // DWARF: DW_AT_linkage_name {{.*}}closure_capture_byref_${name}
  // DWARF-NOT: DW_AT_name {{.*}}closure_capture_byref_${name}
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_location
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name {{.*}}"v"
%  if generic:
  // DWARF: DW_TAG_formal_parameter
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("self")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
  // DWARF-NOT: DW_TAG
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF: DW_AT_artificial
  // DWARF: DW_TAG_variable
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_name ("$swift.type.{{T|U}}")
  // DWARF-NOT: DW_TAG
  // DWARF: DW_AT_artificial
%  end
}
  
%  if generic:
} // End of Context_${name}.
%  end
