68 lines
2.1 KiB
C
68 lines
2.1 KiB
C
// RUN: %clang_cc1 -triple x86_64-windows-msvc -fms-extensions -emit-llvm < %s | FileCheck %s
|
|
|
|
_Static_assert(sizeof(void *) == 8, "sizeof(void *) has unexpected value. Expected 8.");
|
|
|
|
int foo(void) {
|
|
// CHECK: define dso_local i32 @foo
|
|
// CHECK: %a = alloca ptr addrspace(270), align 4
|
|
// CHECK: ret i32 4
|
|
int (*__ptr32 a)(int);
|
|
return sizeof(a);
|
|
}
|
|
|
|
int bar(void) {
|
|
// CHECK: define dso_local i32 @bar
|
|
// CHECK: %p = alloca ptr addrspace(270), align 4
|
|
// CHECK: ret i32 4
|
|
int *__ptr32 p;
|
|
return sizeof(p);
|
|
}
|
|
|
|
|
|
int baz(void) {
|
|
// CHECK: define dso_local i32 @baz
|
|
// CHECK: %p = alloca ptr addrspace(270), align 4
|
|
// CHECK: ret i32 4
|
|
typedef int *__ptr32 IP32_PTR;
|
|
|
|
IP32_PTR p;
|
|
return sizeof(p);
|
|
}
|
|
|
|
int fugu(void) {
|
|
// CHECK: define dso_local i32 @fugu
|
|
// CHECK: %p = alloca ptr addrspace(270), align 4
|
|
// CHECK: ret i32 4
|
|
typedef int *int_star;
|
|
|
|
int_star __ptr32 p;
|
|
return sizeof(p);
|
|
}
|
|
|
|
typedef __SIZE_TYPE__ size_t;
|
|
size_t strlen(const char *);
|
|
|
|
size_t test_calling_strlen_with_32_bit_pointer ( char *__ptr32 s ) {
|
|
// CHECK-LABEL: define dso_local i64 @test_calling_strlen_with_32_bit_pointer(ptr addrspace(270) noundef %s)
|
|
// CHECK-NEXT: entry:
|
|
// CHECK-NEXT: %s.addr = alloca ptr addrspace(270), align 4
|
|
// CHECK-NEXT: store ptr addrspace(270) %s, ptr %s.addr, align 4
|
|
// CHECK-NEXT: %0 = load ptr addrspace(270), ptr %s.addr, align 4
|
|
// CHECK-NEXT: %1 = addrspacecast ptr addrspace(270) %0 to ptr
|
|
// CHECK-NEXT: %call = call i64 @strlen(ptr noundef %1)
|
|
// CHECK-NEXT: ret i64 %call
|
|
return strlen ( s );
|
|
}
|
|
|
|
// CHECK-LABEL: declare dso_local i64 @strlen(ptr noundef)
|
|
|
|
size_t test_calling_strlen_with_64_bit_pointer ( char *s ) {
|
|
// CHECK-LABEL: define dso_local i64 @test_calling_strlen_with_64_bit_pointer(ptr noundef %s)
|
|
// CHECK-NEXT: entry:
|
|
// CHECK-NEXT: %s.addr = alloca ptr, align 8
|
|
// CHECK-NEXT: store ptr %s, ptr %s.addr, align 8
|
|
// CHECK-NEXT: %0 = load ptr, ptr %s.addr, align 8
|
|
// CHECK-NEXT: %call = call i64 @strlen(ptr noundef %0)
|
|
// CHECK-NEXT: ret i64 %call
|
|
return strlen ( s );
|
|
}
|