aboutsummaryrefslogtreecommitdiff
path: root/clang/test/CodeGen/unaligned-struct-copy.c
blob: 45a9670bc234731848bdb6cb6524f1c87b4e2d13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// RUN: %clang_cc1 -xc   -O2 -triple thumbv7a-unknown-windows-eabi -fms-extensions -emit-llvm < %s | FileCheck %s
// RUN: %clang_cc1 -xc++ -O2 -triple thumbv7a-unknown-windows-eabi -fms-extensions -emit-llvm < %s | FileCheck %s
// RUN: %clang_cc1 -xc   -O2 -triple x86_64-unknown-linux-gnu -fms-extensions -emit-llvm < %s | FileCheck %s
// RUN: %clang_cc1 -xc++ -O2 -triple x86_64-unknown-linux-gnu -fms-extensions -emit-llvm < %s | FileCheck %s

struct S1 {
  unsigned long x;
};

// CHECK: define
// CHECK-SAME: void
// CHECK-SAME: test1

void test1(__unaligned struct S1 *out) {
  // CHECK: store
  // CHECK-SAME: align 1
  out->x = 5;
  // CHECK: ret void
}

// CHECK: define
// CHECK-SAME: void
// CHECK-SAME: test2

void test2(__unaligned struct S1 *out, __unaligned struct S1 *in) {
  // CHECK: load
  // CHECK-SAME: align 1
  // CHECK: store
  // CHECK-SAME: align 1
  *out = *in;
  // CHECK: ret void
}