IBM Support

LI76916: ABEND WITH INLINE ASM MEMORY OPERANDS AND -O

Subscribe

You can track all active APARs for this component.

APAR status

  • Closed as program error.

Error description

  • The compiler produces an internal compiler error when compiling
    the following testcase that has inline asm memory operands and
    the -O compile time option:
    
    =====Testcase:
    $cat test.cpp
    inline static void add_atomic(unsigned long volatile *sum,
    unsigned long inc) {
    unsigned long  oldval;
    unsigned long  newval;
    unsigned long  zero = 0;
    asm(
       "    lwsync                     \n\t"
       "1:  ldarx   %[ov],0,%[sum],0   \n\t"    // get old ctr and
    reserve
       "    add     %[nv],%[ov],%[inc] \n\t"    // increment
       "    stdcx.  %[nv],0,%[sum]     \n\t"    // store updated
    value
       "    bne     1b                 \n\t"    // reservation lost?
    -> retry
       "    isync                      \n\t"
       : [sum]    "+b" (sum)           /* outputs   */
       , [ov]     "=&b" (oldval)       /* outputs   */
       , [nv]     "=&b" (newval)       /* outputs   */
       : [inc]     "b" (inc)           /* inputs    */
       : "cr0"                         /* clobbered */
       );
    }
    
    int main() {
    static unsigned long tm[20];
    add_atomic(&tm[0], 0);
    }
    $
    
    ===== ACTUAL OUTPUT:
    $xlc_r -q64 -o testcase -O testcase.cpp
    /usr/vacpp/bin/.orig/xlc_r: 1501-230 (S) Internal compiler
    error; please contact your Service Representative. For more
    information visit:
    http://www.ibm.com/support/docview.wss?uid=swg21110810
    $
    
    
    ===== EXPECTED OUTPUT:
    Should not ICE at -O2 or above.
    

Local fix

  • n/a
    

Problem summary

  • USERS AFFECTED:
    Users that have applications that make use of inline functions
    which have inline asm code using pointer as output operand, and
    replaces with the address of an array at opt
    may be affected by this issue.
    
    PROBLEM DESCRIPTION:
    The compiler issues an internal compiler error when users
    compile applications that have inline functions which have
    inline asm code using pointer as output operand.
    

Problem conclusion

  • The compiler has been fixed so it will not replace the asm
    output opernd with the new optimized expression if it is a
    pointer.
    

Temporary fix

Comments

APAR Information

  • APAR number

    LI76916

  • Reported component name

    XL C/C++ RHEL52

  • Reported component ID

    5724U8310

  • Reported release

    A10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2012-07-16

  • Closed date

    2012-07-16

  • Last modified date

    2012-07-16

  • APAR is sysrouted FROM one or more of the following:

    IV18039

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    XL C/C++ RHEL52

  • Fixed component ID

    5724U8310

Applicable component levels



Document information

More support for: XL C/C++

Software version: A.1

Reference #: LI76916

Modified date: 16 July 2012


Translate this page: