Eric Lemings wrote:
Travis,
If you could, give the following patch a whirl (or quick review
at least).
Is there an easier way to silence the warning than by adding
all these loops? E.g., by assigning the address of the first
member to a local pointer? (Or is the compiler too smart for
that?)
Also, there is no need to use the _RWSTD_SIZE_T macro in .cpp
files. The macro is useful in library and test suite headers
to reduce namespace pollution (so we don't have to #include
<stddef.h>.
Last thing: the code formatting convention calls for a space
before each open parenthesis. It might take some getting used
to but once you do, you'll never go back -- just ask Travis ;-)
Martin
-----
$ svn diff
Index: tests/src/new.cpp
===================================================================
--- tests/src/new.cpp (revision 644444)
+++ tests/src/new.cpp (working copy)
@@ -604,6 +604,17 @@
return ret;
}
+static void
+rwt_checkpoint_compare (_RWSTD_SIZE_T* diffs, _RWSTD_SIZE_T n,
+ const _RWSTD_SIZE_T* st0, const _RWSTD_SIZE_T*
st1,
+ bool& diff_0)
+{
+ for (_RWSTD_SIZE_T i = 0; i != n; ++i) {
+ diffs [i] = st1 [i] - st0 [i];
+ if (diffs [i])
+ diff_0 = false;
+ }
+}
_TEST_EXPORT rwt_free_store*
rwt_checkpoint (const rwt_free_store *st0, const rwt_free_store *st1)
@@ -616,21 +627,24 @@
// of the free_store specified by the arguments
static rwt_free_store diff;
-
memset (&diff, 0, sizeof diff);
- size_t* diffs = diff.new_calls_;
- const size_t* st0_args = st0->new_calls_;
- const size_t* st1_args = st1->new_calls_;
-
bool diff_0 = true; // difference of 0 (i.e., none)
- for (size_t i = 0; i != 16; ++i) {
- diffs [i] = st1_args [i] - st0_args [i];
- if (diffs [i])
- diff_0 = false;
- }
+#define EXTENT(array) (sizeof (array) / sizeof(*array))
+#define COMPARE(member) \
+ rwt_checkpoint_compare (diff.member, EXTENT(diff.member),\
+ st0->member, st1->member, diff_0)
+ COMPARE(new_calls_);
+ COMPARE(delete_calls_);
+ COMPARE(delete_0_calls_);
+ COMPARE(blocks_);
+ COMPARE(bytes_);
+ COMPARE(max_blocks_);
+ COMPARE(max_bytes_);
+ COMPARE(max_block_size_);
+
if (diff_0)
return 0;
-----
The 0.new test seems to be okay with it.
Thanks,
Brad.
-----Original Message-----
From: Travis Vitek (JIRA) [mailto:[EMAIL PROTECTED]
Sent: Thursday, April 03, 2008 3:23 PM
To: Eric Lemings
Subject: [jira] Commented: (STDCXX-761) [HP aCC 6.16] Out of
bound access in new.cpp
[
https://issues.apache.org/jira/browse/STDCXX-761?page=com.atla
ssian.jira.plugin.system.issuetabpanels:comment-tabpanel&focus
edCommentId=12585290#action_12585290 ]
Travis Vitek commented on STDCXX-761:
-------------------------------------
It looks like someone is being tricky. They are assuming that
every member in {{rwt_free_store}} is contiguous [i.e. no
padding], and they are actually comparing each of
{{new_calls_}}, {{delete_calls_}}, {{blocks_}}, {{bytes_}},
{{max_blocks_}}, {{max_bytes_}} and {{max_block_size_}} with
that one loop. If you decide to fix this, you'll end up
probably end up writing eight loops of two iterations each.
Also, I'd prefer that the 2 isn't hardcoded and that you use
something like {{sizeof (array) / sizeof (*array)}}, or a
size macro instead.
[HP aCC 6.16] Out of bound access in new.cpp
--------------------------------------------
Key: STDCXX-761
URL:
https://issues.apache.org/jira/browse/STDCXX-761
Project: C++ Standard Library
Issue Type: Sub-task
Components: Test Driver
Affects Versions: 4.2.0
Environment: $ uname -sr && aCC -V
HP-UX B.11.31
aCC: HP C/aC++ B3910B A.06.16 [Nov 26 2007]
Reporter: Scott (Yu) Zhong
Assignee: Eric Lemings
Fix For: 4.2.1
Original Estimate: 2h
Remaining Estimate: 2h
When compiled with HP aCC 6.16 +w +O, the test driver
source file
[new.cpp|http://svn.apache.org/repos/asf/stdcxx/trunk/tests/sr
c/new.cpp] produces the warnings below:
{noformat}
aCC -c -I$(TOPDIR)/include -I$(BUILDDIR)/include
-I$(TOPDIR)/tests/include -AA +O2 +DD64 +w \
+W392 +W655 +W684 +W818 +W819 +W849 +W2193 +W2236
+W2261 +W2340 +W2401 +W2487 +W4227 \
+W4229 +W4231 +W4235 +W4237 +W4249 +W4255 +W4272 +W4284
+W4285 +W4286 +W4296 +W4297 +W3348 \
$(TOPDIR)/tests/src/new.cpp
"$(TOPDIR)/tests/src/new.cpp", line 629, procedure
rwt_checkpoint: warning #20206-D: Out of bound access (In
expression "(unsigned long long*)(&diff)->new_calls_+i",
(&diff)->new_calls_ (type: unsigned long long [2]) has byte
range [0 .. 15], writing byte range [0 .. 127].)
{noformat}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.