grischkanocode, noreturn1b575607 years agoHistory
58 lines · 1.4 KB · C
RawDownload
/* This checks if enums needing 8 bit but only having positive   values are correctly zero extended (instead of sign extended)   when stored into/loaded from a 8 bit bit-field of enum type (which   itself is implementation defined, so isn't necessarily supported by all   other compilers).  */enum tree_code {  SOME_CODE = 148, /* has bit 7 set, and hence all further enum values as well */  LAST_AND_UNUSED_TREE_CODE};typedef union tree_node *tree;struct tree_common{  union tree_node *chain;  union tree_node *type;  enum tree_code code : 8;  unsigned side_effects_flag : 1;};union tree_node{  struct tree_common common; };enum c_tree_code {  C_DUMMY_TREE_CODE = LAST_AND_UNUSED_TREE_CODE,  STMT_EXPR,  LAST_C_TREE_CODE};enum cplus_tree_code {  CP_DUMMY_TREE_CODE = LAST_C_TREE_CODE,  AMBIG_CONV,  LAST_CPLUS_TREE_CODE}; extern int printf(const char *, ...);int blah(){return 0;} int convert_like_real (tree convs){  switch (((enum tree_code) (convs)->common.code))    {    case AMBIG_CONV: /* This has bit 7 set, which must not be the sign			bit in tree_common.code, i.e. the bitfield must			be somehow marked unsigned.  */      return blah();    default:      break;    };   printf("unsigned enum bit-fields broken\n");   return 0;} int main(){  union tree_node convs;   convs.common.code = AMBIG_CONV;  convert_like_real (&convs);  return 0;}

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t