[HP aCC 6.16] bogus cadvise warning #20206 in optimized code ------------------------------------------------------------ Key: STDCXX-904 URL: https://issues.apache.org/jira/browse/STDCXX-904 Project: C++ Standard Library Issue Type: Bug Components: External Affects Versions: 4.2.1 Environment: $ uname -sr && aCC -V HP-UX B.11.31 aCC: HP C/aC++ B3910B A.06.16 [Nov 26 2007] Reporter: Travis Vitek This is a simplified version of 23.bitset.cpp that shows a bogus out of bound access cadvise warning. {noformat} void __rw_bitset (unsigned*, unsigned, const char*, unsigned, unsigned, unsigned); template class bitset { unsigned bits_ [1]; public: bitset (const char *__str, unsigned __pos, unsigned __n) { __rw_bitset (bits_, _Size, __str, 0, __pos, __n); } }; template struct test_set { char bits_ [_Size + 1]; // includes a null terminator test_set () { for (unsigned i = 0; i != _Size; ++i) bits_ [i] = '0'; bits_ [_Size] = '\0'; } test_set& operator>>= (unsigned n) { for (unsigned i = _Size - 1; i != n - 1; --i) bits_ [i] = bits_ [i - n]; for (unsigned j = n; j != 0; ) bits_ [--j] = '0'; return *this; } }; template void run_test () { test_set<_Size> ts0; const unsigned M = _Size + 1; for (unsigned i = 0; i != 1; ++i) { const unsigned n = i % M; const test_set<_Size> ts1 = (ts0 >>= n); (void)&ts1; const bitset<_Size> bs0 (ts0.bits_, 0, _Size); } } int main (int argc, char *argv[]) { run_test<31>(); return 0; } {noformat} The result of compiling this code with -O2 is... {noformat} aCC -c -mt \ -I/amd/devco/vitek/stdcxx/4.2.x/include \ -I/amd/devco/vitek/stdcxx/4.2.x/build/include \ -I/amd/devco/vitek/stdcxx/4.2.x/tests/include \ -AA +O2 +DD64 +w \ +W392,655,684,818,819,849 \ +W2193,2236,2261,2340,2401,2487 \ +W4227,4229,4231,4235,4237,4249 \ +W4255,4272,4284,4285,4286,4296,4297 \ +W3348 u.cpp "u.cpp", line 29, procedure main: warning #20206-D: Out of bound access \ (In expression "memmove(&(&ts0)->bits_[30]+1 - (31 - n),&(&ts0)->bits_[(30 - n)]+1 - (31 - n),31 - n)", &(&ts0)->bits_[30]+1 - (31 - n) \ (type: char [32]) (defined by (&ts0)->bits_) has byte range [0 .. 31], writing byte range [0 .. 60].) {noformat} The code compiles without warning if the optimization level is reduced to -O1. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.