blob: 6a86cac9754b2589bd5c5b40fe8f8e9e88222a0b [file] [log] [blame]
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: cxx_compiler -c %s -I "common" -o %t1.o
// RUN: c_compiler -c %s -I "common" -o %t2.o
// basic tests of sizes and zero-width-bitfield rules that need to match
// done as static checks.
// If this file fails, there is no point in going forward
#define static_cmp(a,b) ((((a)==(b))*2)-1)
#ifdef SHOW
#define check_sizeof(name, ty, sz) unsigned name = sizeof(ty)
#define check_alignof(name, ty, al) unsigned name = __alignof__(ty)
#else
#include "testsuite.h"
#define check_sizeof(name, ty, sz) int name[static_cmp(sizeof(ty), sz)]
#define check_alignof(name, ty, al) int name[static_cmp(__alignof__(ty), al)]
#endif
check_sizeof(chsize, char, 1);
check_alignof(chalign, char, 1);
check_sizeof(ssize, short, 2);
check_alignof(salign, short, 2);
check_sizeof(isize, int, 4);
check_alignof(ialign, int, 4);
check_sizeof(fsize, float, 4);
check_alignof(falign, float, 4);
check_sizeof(llsize, long long, 8);
check_alignof(llalign, long long, 8);
check_sizeof(dsize, double, 8);
check_alignof(dalign, double, 8);
check_sizeof(ldsize, long double, ABISELECT(16,12));
check_alignof(ldalign, long double, ABISELECT(16,4));
check_sizeof(lsize, long, ABISELECT(8,4));
check_alignof(lalign, long, ABISELECT(8,4));
check_sizeof(psize, void*, ABISELECT(8,4));
check_alignof(palign, void*, ABISELECT(8,4));
typedef struct { char a; int :0; } abcd;
typedef struct { int :0; } efgh;
check_sizeof(s1size, abcd, 4);
#ifdef __cplusplus
check_sizeof(s2size, efgh, ABISELECT(1,1));
#else
check_sizeof(s2size, efgh, 0);
#endif
int sizzzz[] = { sizeof(abcd), sizeof(efgh) };