You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@stdcxx.apache.org by "Martin Sebor (JIRA)" <ji...@apache.org> on 2008/05/06 06:31:55 UTC
[jira] Commented: (STDCXX-904) [HP aCC 6.16] bogus cadvise warning
#20206 in optimized code
[ https://issues.apache.org/jira/browse/STDCXX-904?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12594460#action_12594460 ]
Martin Sebor commented on STDCXX-904:
-------------------------------------
Reduced test case I sent to HP:
{noformat}
$ cat u.cpp && aCC -V +O2 +w -c t.cpp
void foo (const char*);
int main () {
struct B {
char x [4];
void bar (unsigned n) {
for (unsigned i = 3; i != n - 1; --i)
x [i] = x [i - n];
}
} x;
for (unsigned i = 0; i != 1; ++i) {
x.bar (i % 4);
foo (x.x);
}
}
aCC: HP C/aC++ B3910B A.06.16 [Nov 26 2007]
"t.cpp", line 13, procedure main: warning #20206-D: Out of bound access (In
expression "memmove(&(&x)->x[2]+1 - (long long)(3 -
n),&(&x)->x[(int)(2 - n)]+1 - (long long)(3 - n),3 - n)",
&(&x)->x[2]+1 - (long long)(3 - n) (type: char [4]) (defined by
(&x)->x) has byte range [0 .. 3], writing byte range [0 .. 4].)
{noformat}
> [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 <unsigned _Size>
> class bitset
> {
> unsigned bits_ [1];
> public:
> bitset (const char *__str, unsigned __pos, unsigned __n) {
> __rw_bitset (bits_, _Size, __str, 0, __pos, __n);
> }
> };
> template <unsigned _Size>
> 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 <unsigned _Size>
> 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.