; This file is used by testlink1.ll, so it doesn't actually do anything itself
;
; RUN: true

%intlist = type { %intlist*, i32 }


%Ty1 = type { %Ty2* }
%Ty2 = type opaque

@GVTy1 = global %Ty1* null
@GVTy2 = external global %Ty2*


@MyVar = global i32 4
@MyIntList = external global %intlist
@AConst = constant i32 1234

;; Intern in both testlink[12].ll
@Intern1 = internal constant i32 52

;; Intern in one but not in other
@Intern2 = constant i32 12345

@MyIntListPtr = constant { %intlist* } { %intlist* @MyIntList }
@MyVarPtr = linkonce global { i32* } { i32* @MyVar }
@0 = constant i32 412

; Provides definition of Struct1 and of S1GV.
%Struct1 = type { i32 }
@S1GV = global %Struct1* null

define i32 @foo(i32 %blah) {
  store i32 %blah, i32* @MyVar
  %idx = getelementptr %intlist* @MyIntList, i64 0, i32 1
  store i32 12, i32* %idx
  %ack = load i32* @0
  %fzo = add i32 %ack, %blah
  ret i32 %fzo
}

declare void @unimp(float, double)

define internal void @testintern() {
  ret void
}

define void @Testintern() {
  ret void
}

define internal void @testIntern() {
  ret void
}

