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 Arsenaultvoid 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 Arsenaultvoid test10_foo(test10_F3 p1) 35*71912323SMatt Arsenault { 36*71912323SMatt Arsenault p1(0.0); 37*71912323SMatt Arsenault } 38