From 4eb7e4000bbb422379d9976e95ebe563cc2bec89 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Tue, 7 May 2024 00:15:06 +0800 Subject: [PATCH] runtime: c.Uint --- c/c.go | 2 ++ cl/_testdata/uint/in.go | 13 +++++++++++++ cl/_testdata/uint/out.ll | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 cl/_testdata/uint/in.go create mode 100644 cl/_testdata/uint/out.ll diff --git a/c/c.go b/c/c.go index 340edd2c..c672b0eb 100644 --- a/c/c.go +++ b/c/c.go @@ -16,6 +16,7 @@ package c +// typedef unsigned int uint; import "C" import "unsafe" @@ -26,6 +27,7 @@ const ( type ( Char = int8 Int = C.int + Uint = C.uint Pointer = unsafe.Pointer FilePtr = unsafe.Pointer ) diff --git a/cl/_testdata/uint/in.go b/cl/_testdata/uint/in.go new file mode 100644 index 00000000..a2244160 --- /dev/null +++ b/cl/_testdata/uint/in.go @@ -0,0 +1,13 @@ +package main + +import "github.com/goplus/llgo/c" + +func f(a c.Uint) c.Uint { + a++ + return a +} + +func main() { + var a c.Uint = 100 + c.Printf(c.Str("Hello, %u\n"), f(a)) +} diff --git a/cl/_testdata/uint/out.ll b/cl/_testdata/uint/out.ll new file mode 100644 index 00000000..a805dd8c --- /dev/null +++ b/cl/_testdata/uint/out.ll @@ -0,0 +1,37 @@ +; ModuleID = 'main' +source_filename = "main" + +@"main.init$guard" = global ptr null +@0 = private unnamed_addr constant [11 x i8] c"Hello, %u\0A\00", align 1 + +define i32 @main.f(i32 %0) { +_llgo_0: + %1 = add i32 %0, 1 + ret i32 %1 +} + +define void @main.init() { +_llgo_0: + %0 = load i1, ptr @"main.init$guard", align 1 + br i1 %0, label %_llgo_2, label %_llgo_1 + +_llgo_1: ; preds = %_llgo_0 + store i1 true, ptr @"main.init$guard", align 1 + br label %_llgo_2 + +_llgo_2: ; preds = %_llgo_1, %_llgo_0 + ret void +} + +define void @main() { +_llgo_0: + call void @"github.com/goplus/llgo/internal/runtime.init"() + call void @main.init() + %0 = call i32 @main.f(i32 100) + %1 = call i32 (ptr, ...) @printf(ptr @0, i32 %0) + ret void +} + +declare void @"github.com/goplus/llgo/internal/runtime.init"() + +declare i32 @printf(ptr, ...)