// 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: %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
