Skip to main content

LI77191: INCORRECT EVALUATION OF SIZEOF IN TEMPLATES


Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • When compiling the test case below, the compiler issues an
    incorrect error message.
    
    The diagnostic refers to this line:
    typedef char staticassert_type[sizeof(Type) == 2 ? 2 : 0]; //
    But this is NOT !!
    indicating that sizeof(Type) is not 2.
    
    The line just above it
    /// char staticassert_var[sizeof(Type) == 2 ? 2 : 0];
    
    is accepted, when uncommented.  If you uncommend line 4,
    and comment line 5 instead, the program compiles and links.
    When you
    run it, the value it returns is 2 (sizeof(Resolver<int>::Type)).
    
    
    ===== COMPILE COMMAND:
    xlC test.cpp
    
    
    ===== TESTCASE:
    $ cat test.cpp
    template <typename T>
    struct Resolver {
        typedef struct { char a[2]; } Type;
    //    char staticassert_var[sizeof(Type) == 2 ? 2 : 0];      //
    This is accepted
        typedef char staticassert_type[sizeof(Type) == 2 ? 2 : 0];
    // But this is NOT !!!
    };
    
    int main()
    {
        return sizeof(Resolver<int>::Type);
    }
    $
    
    
    ===== ACTUAL OUTPUT:
    $ xlC test.cpp
    "test.cpp", line 5.54: 1540-0135 (S) The array bound cannot be
    zero.
    $
    
    ===== EXPECTED OUTPUT:
    Clean compile
    

Local fix

  • n/a
    

Problem summary

  • USERS AFFECTED:
    The problem can be seen when a sizeof expression is used to
    compute an array bound inside a template definition.
    
    PROBLEM DESCRIPTION:
    The compiler was incorrectly evaluating a sizeof expression
    inside a template definition and reporting an error.
    

Problem conclusion

  • The compiler has been fixed to resolve the above issue.
    

Temporary fix

Comments

APAR Information

  • APAR number

    LI77191

  • Reported component name

    XL C/C++ FOR BG

  • Reported component ID

    5799AG100

  • Reported release

    C10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2013-02-21

  • Closed date

    2013-02-21

  • Last modified date

    2013-02-21

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

    IV33977

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

Fix information

  • Fixed component name

    XL C/C++ FOR BG

  • Fixed component ID

    5799AG100

Applicable component levels

Rate this page:

(0 users)Average rating

Copyright and trademark information

IBM, the IBM logo and ibm.com are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at "Copyright and trademark information" at www.ibm.com/legal/copytrade.shtml.

Rate this page:


(0 users)Average rating

Add comments

Document information

XL C/C++ for Blue Gene/Q

Compiler


Software version:
12.1


Reference #:
LI77191


Modified date:
2013-02-21

Translate my page

Content navigation