xref: /llvm-project/clang/test/CodeGen/incomplete-function-type-function-addrspace.c (revision 719123230577ebfb689b53ed09f4d06ddc1664ef)
1*71912323SMatt Arsenault // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --function-signature
2*71912323SMatt Arsenault // REQUIRES: avr-registered-target
3*71912323SMatt Arsenault // RUN: %clang_cc1 -triple avr-- -emit-llvm -o - %s | FileCheck %s
4*71912323SMatt Arsenault 
5*71912323SMatt Arsenault // Copy of incomplete-function-type-2.c run with AVR.
6*71912323SMatt Arsenault 
7*71912323SMatt Arsenault // Make sure the address space of the function is respected for incomplete
8*71912323SMatt Arsenault // functions.
9*71912323SMatt Arsenault 
10*71912323SMatt Arsenault struct test10_B;
11*71912323SMatt Arsenault typedef struct test10_B test10_F3(double);
12*71912323SMatt Arsenault void test10_foo(test10_F3 p1);
13*71912323SMatt Arsenault struct test10_B test10_b(double);
14*71912323SMatt Arsenault // CHECK-LABEL: define {{[^@]+}}@test10_bar
15*71912323SMatt Arsenault // CHECK-SAME: () addrspace(1) #[[ATTR0:[0-9]+]] {
16*71912323SMatt Arsenault // CHECK-NEXT:  entry:
17*71912323SMatt Arsenault // CHECK-NEXT:    call addrspace(1) void @test10_foo(ptr addrspace(1) noundef @test10_b)
18*71912323SMatt Arsenault // CHECK-NEXT:    ret void
19*71912323SMatt Arsenault //
test10_bar(void)20*71912323SMatt Arsenault void test10_bar(void) {
21*71912323SMatt Arsenault   test10_foo(test10_b);
22*71912323SMatt Arsenault }
23*71912323SMatt Arsenault struct test10_B {};
24*71912323SMatt Arsenault // CHECK-LABEL: define {{[^@]+}}@test10_foo
25*71912323SMatt Arsenault // CHECK-SAME: (ptr addrspace(1) noundef [[P1:%.*]]) addrspace(1) #[[ATTR0]] {
26*71912323SMatt Arsenault // CHECK-NEXT:  entry:
27*71912323SMatt Arsenault // CHECK-NEXT:    [[P1_ADDR:%.*]] = alloca ptr addrspace(1), align 1
28*71912323SMatt Arsenault // CHECK-NEXT:    [[AGG_TMP:%.*]] = alloca [[STRUCT_TEST10_B:%.*]], align 1
29*71912323SMatt Arsenault // CHECK-NEXT:    store ptr addrspace(1) [[P1]], ptr [[P1_ADDR]], align 1
30*71912323SMatt Arsenault // CHECK-NEXT:    [[TMP0:%.*]] = load ptr addrspace(1), ptr [[P1_ADDR]], align 1
31*71912323SMatt Arsenault // CHECK-NEXT:    [[CALL:%.*]] = call addrspace(1) [[STRUCT_TEST10_B]] [[TMP0]](float noundef 0.000000e+00)
32*71912323SMatt Arsenault // CHECK-NEXT:    ret void
33*71912323SMatt Arsenault //
test10_foo(test10_F3 p1)34*71912323SMatt Arsenault void test10_foo(test10_F3 p1)
35*71912323SMatt Arsenault {
36*71912323SMatt Arsenault   p1(0.0);
37*71912323SMatt Arsenault }
38