// RUN: %clang_cc1 -triple s390x-linux-gnu -emit-llvm %s -o - | FileCheck %s // SystemZ prefers to align all global variables to two bytes. struct test { signed char a; }; char c; // CHECK-DAG: @c ={{.*}} global i8 0, align 2 struct test s; // CHECK-DAG: @s ={{.*}} global %struct.test zeroinitializer, align 2 extern char ec; // CHECK-DAG: @ec = external global i8, align 2 extern struct test es; // CHECK-DAG: @es = external global %struct.test, align 2 // Dummy function to make sure external symbols are used. void func (void) { c = ec; s = es; } // Alignment should be respected for coerced argument loads struct arg { long y __attribute__((packed, aligned(4))); }; extern struct arg x; void f(struct arg); void test (void) { f(x); } // CHECK-LABEL: @test // CHECK: load i64, i64* getelementptr inbounds (%struct.arg, %struct.arg* @x, i32 0, i32 0), align 4