source: EcnlProtoTool/trunk/tcc-0.9.27/tests/tests2/92_enum_bitfield.c@ 331

Last change on this file since 331 was 331, checked in by coas-nagasima, 6 years ago

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc
File size: 1.4 KB
Line 
1/* This checks if enums needing 8 bit but only having positive
2 values are correctly zero extended (instead of sign extended)
3 when stored into/loaded from a 8 bit bit-field of enum type (which
4 itself is implementation defined, so isn't necessarily supported by all
5 other compilers). */
6enum tree_code {
7 SOME_CODE = 148, /* has bit 7 set, and hence all further enum values as well */
8 LAST_AND_UNUSED_TREE_CODE
9};
10typedef union tree_node *tree;
11struct tree_common
12{
13 union tree_node *chain;
14 union tree_node *type;
15 enum tree_code code : 8;
16 unsigned side_effects_flag : 1;
17};
18union tree_node
19{
20 struct tree_common common;
21 };
22enum c_tree_code {
23 C_DUMMY_TREE_CODE = LAST_AND_UNUSED_TREE_CODE,
24 STMT_EXPR,
25 LAST_C_TREE_CODE
26};
27enum cplus_tree_code {
28 CP_DUMMY_TREE_CODE = LAST_C_TREE_CODE,
29 AMBIG_CONV,
30 LAST_CPLUS_TREE_CODE
31};
32
33extern int printf(const char *, ...);
34int blah(){return 0;}
35
36int convert_like_real (tree convs)
37{
38 switch (((enum tree_code) (convs)->common.code))
39 {
40 case AMBIG_CONV: /* This has bit 7 set, which must not be the sign
41 bit in tree_common.code, i.e. the bitfield must
42 be somehow marked unsigned. */
43 return blah();
44 default:
45 break;
46 };
47 printf("unsigned enum bit-fields broken\n");
48}
49
50int main()
51{
52 union tree_node convs;
53
54 convs.common.code = AMBIG_CONV;
55 convert_like_real (&convs);
56 return 0;
57}
Note: See TracBrowser for help on using the repository browser.