text: #include "common.h"
  
  namespace bpftrace {
  namespace test {
  namespace codegen {
  
  TEST(codegen, variable_undeclared)
  {
    test("kprobe:f { @ = $a }",
  
  R"EXPECTED(; Function Attrs: nounwind
  declare i64 @llvm.bpf.pseudo(i64, i64) #0
  
  ; Function Attrs: argmemonly nounwind
  declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #1
  
  define i64 @"kprobe:f"(i8* nocapture readnone) local_unnamed_addr section "s_kprobe:f_1" {
  entry:
    %"@_val" = alloca i64, align 8
    %"@_key" = alloca i64, align 8
    %1 = bitcast i64* %"@_key" to i8*
    call void @llvm.lifetime.start.p0i8(i64 -1, i8* nonnull %1)
    store i64 0, i64* %"@_key", align 8
    %2 = bitcast i64* %"@_val" to i8*
    call void @llvm.lifetime.start.p0i8(i64 -1, i8* nonnull %2)
    store i64 0, i64* %"@_val", align 8
    %pseudo = tail call i64 @llvm.bpf.pseudo(i64 1, i64 1)
    %update_elem = call i64 inttoptr (i64 2 to i64 (i8*, i8*, i8*, i64)*)(i64 %pseudo, i64* nonnull %"@_key", i64* nonnull %"@_val", i64 0)
    call void @llvm.lifetime.end.p0i8(i64 -1, i8* nonnull %1)
    ret i64 0
  }
  
  ; Function Attrs: argmemonly nounwind
  declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #1
  
  attributes #0 = { nounwind }
  attributes #1 = { argmemonly nounwind }
  )EXPECTED");
  }
  
  } // namespace codegen
  } // namespace test
  } // namespace bpftrace
  