From: shyouhei@... Date: 2016-08-08T01:10:22+00:00 Subject: [ruby-core:76759] [Ruby trunk Bug#12657] [PATCH] ANSI aliasing fix for XL compiler Issue #12657 has been updated by Shyouhei Urabe. Description updated Thank you. I think we don't need the #else part because the memset/memcpy should just work for all ANSI-compliant compilers. Is it OK for me to merge your patch like that way? ---------------------------------------- Bug #12657: [PATCH] ANSI aliasing fix for XL compiler https://bugs.ruby-lang.org/issues/12657#change-59977 * Author: Zarko Todorovski * Status: Open * Priority: Normal * Assignee: * ruby -v: 2.3.1 * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- This is related to Bug #12191. Changing in internal.h:983-985 from : ``` -#define RBASIC_CLEAR_CLASS(obj) (((struct RBasicRaw *)((VALUE)(obj)))->klass = 0) -#define RBASIC_SET_CLASS_RAW(obj, cls) (((struct RBasicRaw *)((VALUE)(obj)))->klass = (cls)) ``` to: ``` #ifdef __ibmxl__ #define RBASIC_SET_CLASS_RAW(obj, cls) memcpy(&((struct RBasicRaw *)((VALUE)(obj)))->klass, &(cls), sizeof(VALUE)) #else #define RBASIC_SET_CLASS_RAW(obj, cls) (((struct RBasicRaw *)((VALUE)(obj)))->klass = (cls)) #endif #ifdef __ibmxl__ #define RBASIC_CLEAR_CLASS(obj) memset(&(((struct RBasicRaw *)((VALUE)(obj)))->klass), 0, sizeof(((struct RBasicRaw *)((VALUE)(obj)))->klass)) #else #define RBASIC_CLEAR_CLASS(obj) (((struct RBasicRaw *)((VALUE)(obj)))->klass = 0) #endif ``` This allows for ruby to build using XL compiler. Otherwise build fails because of ANSI aliasing issues. ---Files-------------------------------- RBASIC_aliasing.patch (1.04 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>