Skip to main content

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

    IV33977

  • Reported component name

    XL C/C++ AIX

  • Reported component ID

    5724X1300

  • Reported release

    B10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt

  • Submitted date

    2012-12-28

  • Closed date

    2013-02-07

  • Last modified date

    2013-02-08

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

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

    LI77191 IV37923 LI77319

Fix information

  • Fixed component name

    XL C/C++ AIX

  • Fixed component ID

    5724X1300

Applicable component levels

  • RB10 PSY U858036

       UP C

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 AIX


Software version:
11.1


Reference #:
IV33977


Modified date:
2013-02-08

Translate my page

Content navigation