Actions
Bug #11790
closed[PATCH] ANSI alias rules fix
    Bug #11790:
    [PATCH] ANSI alias rules fix 
  
Description
line 70 in file regparse.h:
#define SET_NTYPE(node, ntype)   (node)->u.base.type = (ntype)
needs to be changed to conform with ANSI alias rules
Line 70 as it is can lead to errors in compiling in regparse.c
line 1143: node = (Node* )FreeNodeList;
line 1144: FreeNodeList = FreeNodeList->next;
line 1581: (node)->u.base.type = (0);
where during compiling line 1581 can be moved ahead of line 1144 since under ANSI aliasing rules, the compiler determines that the statement of "(node)->u.base.type = (0);" does not affect the value of FreeNodeList.
Proposed change in patch is in file regparse.h:
-#define SET_NTYPE(node, ntype)   (node)->u.base.type = (ntype)
+#define SET_NTYPE(node, ntype)  {int value = ntype; memcpy(&((node)->u.base.type), &value, sizeof((node)->u.base.type));}
  Files
        
          
          Updated by nobu (Nobuyoshi Nakada) almost 10 years ago
          
          
        
        
      
      - Description updated (diff)
 
Does CAS work?
  /* THREAD_ATOMIC_START; */
  {
    FreeNode *n = FreeNodeList, *n0;
    while (IS_NOT_NULL(n) && (n0 = ATOMIC_PTR_CAS(FreeNodeList, n, n->next)) != n)
      n = n0;
    if (IS_NOT_NULL(n)) return (Node* )n;
  }
  /* THREAD_ATOMIC_END; */
        
          
          Updated by nobu (Nobuyoshi Nakada) almost 10 years ago
          
          
        
        
      
      - Status changed from Open to Closed
 
Applied in changeset r52999.
regparse.h: ANSI alias rule fix
- regparse.h (SET_NTYPE): get rid of breaking strict aliasing.
patch by Zarko Todorovski in [ruby-core:71953]. [Bug #11790] 
        
          
          Updated by naruse (Yui NARUSE) almost 10 years ago
          
          
        
        
      
      - Related to Misc #11795: [PATCH] get rid of breaking strict alias for XL compiler added
 
Actions