brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 8b403fa Raw
250 lines · cpp
1// REQUIRES: aarch64-registered-target2// RUN: %clang_cc1 -triple aarch64-linux-gnu -x c++ -std=c++1z %s -verify3// expected-no-diagnostics4 5#include <stddef.h>6 7struct t18{9  int foo : 1;10  char : 0;11  char bar;12 13};14static_assert(offsetof(struct t1, bar) == 1);15static_assert(sizeof(struct t1) == 4);16 17struct t218{19  int foo : 1;20  short : 0;21  char bar;22};23static_assert(offsetof(struct t2, bar) == 2);24static_assert(sizeof(struct t2) == 4);25 26struct t327{28  int foo : 1;29  int : 0;30  char bar;31};32static_assert(offsetof(struct t3, bar) == 4);33static_assert(sizeof(struct t3) == 8);34 35struct t436{37  int foo : 1;38  long : 0;39  char bar;40};41static_assert(offsetof(struct t4, bar) == 8);42static_assert(sizeof(struct t4) == 16);43 44struct t545{46  int foo : 1;47  long long : 0;48  char bar;49};50static_assert(offsetof(struct t5, bar) == 8);51static_assert(sizeof(struct t5) == 16);52 53struct t654{55  int foo : 1;56  char : 0;57  char bar : 1;58  char bar2;59};60static_assert(offsetof(struct t6, bar2) == 2);61static_assert(sizeof(struct t6) == 4);62 63struct t764{65  int foo : 1;66  short : 0;67  char bar1 : 1;68  char bar2;69};70static_assert(offsetof(struct t7, bar2) == 3);71static_assert(sizeof(struct t7) == 4);72 73struct t874{75  int foo : 1;76  int : 0;77  char bar1 : 1;78  char bar2;79};80static_assert(offsetof(struct t8, bar2) == 5);81static_assert(sizeof(struct t8) == 8);82 83struct t984{85  int foo : 1;86  long : 0;87  char bar1 : 1;88  char bar2;89};90static_assert(offsetof(struct t9, bar2) == 9);91static_assert(sizeof(struct t9) == 16);92 93struct t1094{95  int foo : 1;96  long long : 0;97  char bar1 : 1;98  char bar2;99};100static_assert(offsetof(struct t10, bar2) == 9);101static_assert(sizeof(struct t10) == 16);102 103struct t11104{105  int foo : 1;106  long long : 0;107  char : 0;108  char bar1 : 1;109  char bar2;110};111static_assert(offsetof(struct t11, bar2) == 9);112static_assert(sizeof(struct t11) == 16);113 114struct t12115{116  int foo : 1;117  char : 0;118  long long : 0;119  char : 0;120  char bar;121};122static_assert(offsetof(struct t12, bar) == 8);123static_assert(sizeof(struct t12) == 16);124 125struct t13126{127  char foo;128  long : 0;129  char bar;130};131static_assert(offsetof(struct t13, bar) == 8);132static_assert(sizeof(struct t13) == 16);133 134struct t14135{136  char foo1;137  int : 0;138  char foo2 : 1;139  short foo3 : 16;140  char : 0;141  short foo4 : 16;142  char bar1;143  int : 0;144  char bar2;145};146static_assert(offsetof(struct t14, bar1) == 10);147static_assert(offsetof(struct t14, bar2) == 12);148static_assert(sizeof(struct t14) == 16);149 150struct t15151{152  char foo;153  char : 0;154  int : 0;155  char bar;156  long : 0;157  char : 0;158};159static_assert(offsetof(struct t15, bar) == 4);160static_assert(sizeof(struct t15) == 8);161 162struct t16163{164  long : 0;165  char bar;166};167static_assert(offsetof(struct t16, bar) == 0);168static_assert(sizeof(struct t16) == 8);169 170struct t17171{172  char foo;173  long : 0;174  long : 0;175  char : 0;176  char bar;177};178static_assert(offsetof(struct t17, bar) == 8);179static_assert(sizeof(struct t17) == 16);180 181struct t18182{183  long : 0;184  long : 0;185  char : 0;186};187static_assert(sizeof(struct t18) == 8);188 189struct t19190{191  char foo1;192  long foo2 : 1;193  char : 0;194  long foo3 : 32;195  char bar;196};197static_assert(offsetof(struct t19, bar) == 6);198static_assert(sizeof(struct t19) == 8);199 200struct t20201{202  short : 0;203  int foo : 1;204  long : 0;205  char bar;206};207static_assert(offsetof(struct t20, bar) == 8);208static_assert(sizeof(struct t20) == 16);209 210struct t21211{212  short : 0;213  int foo1 : 1;214  char : 0;215  int foo2 : 16;216  long : 0;217  char bar1;218  int bar2;219  long bar3;220  char foo3 : 8;221  char : 0;222  long : 0;223  int foo4 : 32;224  short foo5: 1;225  long bar4;226  short foo6: 16;227  short foo7: 16;228  short foo8: 16;229};230static_assert(offsetof(struct t21, bar1) == 8);231static_assert(offsetof(struct t21, bar2) == 12);232static_assert(offsetof(struct t21, bar3) == 16);233static_assert(offsetof(struct t21, bar4) == 40);234static_assert(sizeof(struct t21) == 56);235 236// The rules also apply to anonymous bitfields with non-zero length.237struct t22238{239  char foo;240  short :2;241  char bar;242};243static_assert(alignof(struct t22) == 2);244static_assert(offsetof(struct t22, bar) == 2);245 246int main() {247  return 0;248}249 250