74 lines · cpp
1// Simple functions2// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o - | FileCheck %s3 4void empty() { }5// CHECK: define{{.*}} void @_Z5emptyv()6// CHECK: ret void7 8void voidret() { return; }9// CHECK: define{{.*}} void @_Z7voidretv()10// CHECK: ret void11 12int intfunc() { return 42; }13// CHECK: define{{.*}} i32 @_Z7intfuncv()14// CHECK: %[[RV:.*]] = alloca i32, i64 1, align 415// CHECK: store i32 42, ptr %[[RV]], align 416// CHECK: %[[R:.*]] = load i32, ptr %[[RV]], align 417// CHECK: ret i32 %[[R]]18 19int scopes() {20 {21 {22 return 99;23 }24 }25}26// CHECK: define{{.*}} i32 @_Z6scopesv(){{.*}} {27// CHECK: %[[RV:.*]] = alloca i32, i64 1, align 428// CHECK: br label %[[LABEL1:.*]]29// CHECK: [[LABEL1]]:30// CHECK: br label %[[LABEL2:.*]]31// CHECK: [[LABEL2]]:32// CHECK: store i32 99, ptr %[[RV]], align 433// CHECK: %[[R:.*]] = load i32, ptr %[[RV]], align 434// CHECK: ret i32 %[[R]]35// CHECK: [[LABEL3:.*]]:36// CHECK: br label %[[LABEL4:.*]]37// CHECK: [[LABEL4]]:38// CHECK: call void @llvm.trap()39// CHECK: unreachable40// CHECK: }41 42long longfunc() { return 42l; }43// CHECK: define{{.*}} i64 @_Z8longfuncv(){{.*}} {44// CHECK: %[[RV:.*]] = alloca i64, i64 1, align 845// CHECK: store i64 42, ptr %[[RV]], align 846// CHECK: %[[R:.*]] = load i64, ptr %[[RV]], align 847// CHECK: ret i64 %[[R]]48// CHECK: }49 50unsigned unsignedfunc() { return 42u; }51// CHECK: define{{.*}} i32 @_Z12unsignedfuncv(){{.*}} {52// CHECK: %[[RV:.*]] = alloca i32, i64 1, align 453// CHECK: store i32 42, ptr %[[RV]], align 454// CHECK: %[[R:.*]] = load i32, ptr %[[RV]], align 455// CHECK: ret i32 %[[R]]56// CHECK: }57 58unsigned long long ullfunc() { return 42ull; }59// CHECK: define{{.*}} i64 @_Z7ullfuncv(){{.*}} {60// CHECK: %[[RV:.*]] = alloca i64, i64 1, align 861// CHECK: store i64 42, ptr %[[RV]], align 862// CHECK: %[[R:.*]] = load i64, ptr %[[RV]], align 863// CHECK: ret i64 %[[R]]64// CHECK: }65 66bool boolfunc() { return true; }67// CHECK: define{{.*}} i1 @_Z8boolfuncv(){{.*}} {68// CHECK: %[[RV:.*]] = alloca i8, i64 1, align 169// CHECK: store i8 1, ptr %[[RV]], align 170// CHECK: %[[R8:.*]] = load i8, ptr %[[RV]], align 171// CHECK: %[[R:.*]] = trunc i8 %[[R8]] to i172// CHECK: ret i1 %[[R]]73// CHECK: }74