IBM Support

LI76977: 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

    LI76977

  • Reported component name

    XL C/C++ FOR LI

  • Reported component ID

    5725C7300

  • Reported release

    C10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2012-08-28

  • Closed date

    2012-08-28

  • Last modified date

    2012-08-28

  • 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++ FOR LI

  • Fixed component ID

    5725C7300

Applicable component levels



Document information

More support for: XL C/C++ for Linux
Compiler

Software version: 12.1

Reference #: LI76977

Modified date: 28 August 2012