mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-20 03:55:48 -04:00

LLVM IR recently added a Type parameter to the byval Attribute, so that when pointers become opaque and no longer have an element type the information will still be present in IR. For now the Type parameter is optional (which is why Clang didn't need this change at the time), but it will become mandatory soon. llvm-svn: 362652
28 lines
921 B
C
28 lines
921 B
C
// RUN: %clang_cc1 -triple sparc-unknown-unknown -emit-llvm -o - %s | FileCheck %s
|
|
|
|
// Ensure that we pass proper alignment to llvm in the call
|
|
// instruction. The proper alignment for the type is sometimes known
|
|
// only by clang, and is not manifest in the LLVM-type. So, it must be
|
|
// explicitly passed through. (Besides the case of the user specifying
|
|
// alignment, as here, this situation also occurrs for non-POD C++
|
|
// structs with tail-padding: clang emits these as packed llvm-structs
|
|
// for ABI reasons.)
|
|
|
|
struct s1 {
|
|
int x;
|
|
} __attribute__((aligned(8)));
|
|
|
|
struct s1 x1;
|
|
|
|
|
|
// Ensure the align 8 is passed through:
|
|
// CHECK-LABEL: define void @f1()
|
|
// CHECK: call void @f1_helper(%struct.s1* byval(%struct.s1) align 8 @x1)
|
|
// Also ensure the declaration of f1_helper includes it
|
|
// CHECK: declare void @f1_helper(%struct.s1* byval(%struct.s1) align 8)
|
|
|
|
void f1_helper(struct s1);
|
|
void f1() {
|
|
f1_helper(x1);
|
|
}
|