// 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 -no-opaque-pointers -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) {}