| // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py |
| // Check that the CHECK lines are generated before the definition and not the declaration |
| // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu %s -emit-llvm -o - | FileCheck %s |
| |
| int foo(int arg); |
| |
| void empty_function(void); |
| |
| // CHECK-LABEL: @main( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[RETVAL:%.*]] = alloca i32, align 4 |
| // CHECK-NEXT: store i32 0, i32* [[RETVAL]], align 4 |
| // CHECK-NEXT: call void @empty_function() |
| // CHECK-NEXT: [[CALL:%.*]] = call i32 @foo(i32 noundef 1) |
| // CHECK-NEXT: ret i32 [[CALL]] |
| // |
| int main(void) { |
| empty_function(); |
| return foo(1); |
| } |
| |
| // CHECK-LABEL: @foo( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: [[ARG_ADDR:%.*]] = alloca i32, align 4 |
| // CHECK-NEXT: store i32 [[ARG:%.*]], i32* [[ARG_ADDR]], align 4 |
| // CHECK-NEXT: [[TMP0:%.*]] = load i32, i32* [[ARG_ADDR]], align 4 |
| // CHECK-NEXT: ret i32 [[TMP0]] |
| // |
| int foo(int arg) { |
| return arg; |
| } |
| |
| // CHECK-LABEL: @empty_function( |
| // CHECK-NEXT: entry: |
| // CHECK-NEXT: ret void |
| // |
| void empty_function(void) {} |