69 lines · c
1// RUN: %clang_cc1 -triple x86_64-windows-msvc -fms-extensions -emit-llvm < %s | FileCheck %s2 3_Static_assert(sizeof(void *) == 8, "sizeof(void *) has unexpected value. Expected 8.");4 5int foo(void) {6 // CHECK: define dso_local i32 @foo7 // CHECK: %a = alloca ptr addrspace(270), align 48 // CHECK: ret i32 49 int (*__ptr32 a)(int);10 return sizeof(a);11}12 13int bar(void) {14 // CHECK: define dso_local i32 @bar15 // CHECK: %p = alloca ptr addrspace(270), align 416 // CHECK: ret i32 417 int *__ptr32 p;18 return sizeof(p);19}20 21 22int baz(void) {23 // CHECK: define dso_local i32 @baz24 // CHECK: %p = alloca ptr addrspace(270), align 425 // CHECK: ret i32 426 typedef int *__ptr32 IP32_PTR;27 28 IP32_PTR p;29 return sizeof(p);30}31 32int fugu(void) {33 // CHECK: define dso_local i32 @fugu34 // CHECK: %p = alloca ptr addrspace(270), align 435 // CHECK: ret i32 436 typedef int *int_star;37 38 int_star __ptr32 p;39 return sizeof(p);40}41 42typedef __SIZE_TYPE__ size_t;43size_t strlen(const char *);44 45size_t test_calling_strlen_with_32_bit_pointer ( char *__ptr32 s ) {46 // CHECK-LABEL: define dso_local i64 @test_calling_strlen_with_32_bit_pointer(ptr addrspace(270) noundef %s)47 // CHECK-NEXT: entry:48 // CHECK-NEXT: %s.addr = alloca ptr addrspace(270), align 449 // CHECK-NEXT: store ptr addrspace(270) %s, ptr %s.addr, align 450 // CHECK-NEXT: %0 = load ptr addrspace(270), ptr %s.addr, align 451 // CHECK-NEXT: %1 = addrspacecast ptr addrspace(270) %0 to ptr52 // CHECK-NEXT: %call = call i64 @strlen(ptr noundef %1)53 // CHECK-NEXT: ret i64 %call54 return strlen ( s );55}56 57// CHECK-LABEL: declare dso_local i64 @strlen(ptr noundef)58 59size_t test_calling_strlen_with_64_bit_pointer ( char *s ) {60 // CHECK-LABEL: define dso_local i64 @test_calling_strlen_with_64_bit_pointer(ptr noundef %s)61 // CHECK-NEXT: entry:62 // CHECK-NEXT: %s.addr = alloca ptr, align 863 // CHECK-NEXT: store ptr %s, ptr %s.addr, align 864 // CHECK-NEXT: %0 = load ptr, ptr %s.addr, align 865 // CHECK-NEXT: %call = call i64 @strlen(ptr noundef %0)66 // CHECK-NEXT: ret i64 %call67 return strlen ( s );68}69