; RUN: llvm-as < %s | pnacl-freeze | pnacl-thaw | llvm-dis - | FileCheck %s ; RUN: llvm-as < %s | pnacl-freeze | pnacl-bcanalyzer -dump-records \ ; RUN: | FileCheck %s -check-prefix=BC ; Test that we generate appropriate bitcode values for global variables. ; Make sure that no struct/array types are generated by the global variables. ; BC: ; BC-NEXT: ; Make sure that the function declaration for function func (below) ; appears before the global variables block. ; BC: ; Make sure we begin the globals block after function declarations. ; BC-NEXT: @bytes = internal global [7 x i8] c"abcdefg" ; CHECK: @bytes = internal global [7 x i8] c"abcdefg" ; BC-NEXT: ; BC-NEXT: @ptr_to_ptr = internal global i32 ptrtoint (i32* @ptr to i32) ; CHECK: @ptr_to_ptr = internal global i32 ptrtoint (i32* @ptr to i32) ; BC-NEXT: ; BC-NEXT: @ptr_to_func = internal global i32 ptrtoint (void ()* @func to i32) ; CHECK: @ptr_to_func = internal global i32 ptrtoint (void ()* @func to i32) ; BC-NEXT: ; BC-NEXT: @compound = internal global <{ [3 x i8], i32 }> <{ [3 x i8] c"foo", i32 ptrtoint (void ()* @func to i32) }> ; CHECK: @compound = internal global <{ [3 x i8], i32 }> <{ [3 x i8] c"foo", i32 ptrtoint (void ()* @func to i32) }> ; BC-NEXT: ; BC-NEXT: ; BC-NEXT: ; BC-NEXT: @ptr = internal global i32 ptrtoint ([7 x i8]* @bytes to i32) ; CHECK: @ptr = internal global i32 ptrtoint ([7 x i8]* @bytes to i32) ; BC-NEXT: ; BC-NEXT: @addend_ptr = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 1) ; CHECK: @addend_ptr = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 1) ; BC-NEXT: ; BC-NEXT: @addend_negative = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 -1) ; CHECK: @addend_negative = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 -1) ; BC-NEXT: ; BC-NEXT: @addend_array1 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 1) ; CHECK: @addend_array1 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 1) ; BC-NEXT: ; BC-NEXT: @addend_array2 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 7) ; CHECK: @addend_array2 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 7) ; BC-NEXT: ; BC-NEXT: @addend_array3 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 9) ; CHECK: @addend_array3 = internal global i32 add (i32 ptrtoint ([7 x i8]* @bytes to i32), i32 9) ; BC-NEXT: ; BC-NEXT: @addend_struct1 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 1) ; CHECK: @addend_struct1 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 1) ; BC-NEXT: ; BC-NEXT: @addend_struct2 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 4) ; CHECK: @addend_struct2 = internal global i32 add (i32 ptrtoint (<{ [3 x i8], i32 }>* @compound to i32), i32 4) ; BC-NEXT: ; BC-NEXT: @ptr_to_func_align = internal global i32 ptrtoint (void ()* @func to i32), align 8 ; CHECK: @ptr_to_func_align = internal global i32 ptrtoint (void ()* @func to i32), align 8 ; BC-NEXT: ; BC-NEXT: @char = internal constant [1 x i8] c"0" ; CHECK: @char = internal constant [1 x i8] c"0" ; BC-NEXT: ; BC-NEXT: @short = internal constant [2 x i8] zeroinitializer ; CHECK: @short = internal constant [2 x i8] zeroinitializer ; BC-NEXT: ; BC-NEXT: ; BC-NEXT: define void @func() { ret void }