brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · ead9550 Raw
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