Closed Bug 855264 Opened 12 years ago Closed 12 years ago

BaselineCompiler: Fix compiler warnings

Categories

(Core :: JavaScript Engine, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: jandem, Assigned: jandem)

References

Details

Attachments

(3 files)

No description provided.
Attached patch Part 1: Avoid zero-sized arrays (deleted) — Splinter Review
Avoid empty array if ProtoChainDepth is 0 by including the shape of the object itself in the array. MSVC warns about this and it's undefined behavior in C++.
Attachment #730114 - Flags: review?(kvijayan)
Attached patch Part 2: Fix other MSVC warnings (deleted) — Splinter Review
Fixes warnings like: warning C4146: unary minus operator applied to unsigned type, result still unsigned warning C4355: 'this' : used in base member initializer list The fix for the latter adds a thisFromCtor method, we use this trick elsewhere, for instance the JSRuntime constructor.
Attachment #730117 - Flags: review?(kvijayan)
Attached patch Part 3: Fix GCC warnings (deleted) — Splinter Review
Fixes warnings with GCC 4.7 (the dreaded "used but never defined" and a warning about an possibly-uninitialized variable in opt builds.
Attachment #730118 - Flags: review?(kvijayan)
Comment on attachment 730114 [details] [diff] [review] Part 1: Avoid zero-sized arrays Review of attachment 730114 [details] [diff] [review]: ----------------------------------------------------------------- ::: js/src/ion/BaselineIC.cpp @@ +3570,5 @@ > } > > if (kind == ICStub::SetElem_DenseAdd && iter->isSetElem_DenseAdd()) { > ICSetElem_DenseAdd *dense = iter->toSetElem_DenseAdd(); > + if (obj->lastProperty() == dense->toImpl<0>()->shape(0) && obj->getType(cx) == dense->type()) |toImpl| here asserts that the proto chain depth matches, which will fail with this call. You can use a manual cast here, or maybe add a |toImplUnchecked| method that doesn't do the assert. @@ +3673,5 @@ > if (curObj) > ++*protoDepthOut; > } > > + if (*protoDepthOut > ICSetElem_DenseAdd::MAX_PROTO_CHAIN_DEPTH) Nice catch... ::: js/src/ion/BaselineIC.h @@ +3200,5 @@ > class ICSetElem_DenseAddImpl : public ICSetElem_DenseAdd > { > friend class ICStubSpace; > > + HeapPtrShape shapes_[ProtoChainDepth + 1]; Instead of using |ProtoChainDepth + 1| here and in all cases below, it would be clearer and reflect intent better to define a 'numShapes()' method and use that instead.
Attachment #730114 - Flags: review?(kvijayan) → review+
Attachment #730117 - Flags: review?(kvijayan) → review+
Attachment #730118 - Flags: review?(kvijayan) → review+
https://hg.mozilla.org/projects/ionmonkey/rev/3fc13eee44b5 https://hg.mozilla.org/projects/ionmonkey/rev/7d43d5cc0572 https://hg.mozilla.org/projects/ionmonkey/rev/71ff63071039 (In reply to Kannan Vijayan [:djvj] from comment #4) > |toImpl| here asserts that the proto chain depth matches, which will fail > with this call. > > You can use a manual cast here, or maybe add a |toImplUnchecked| method that > doesn't do the assert. Good catch, I added toImplUnchecked. > Instead of using |ProtoChainDepth + 1| here and in all cases below, it would > be clearer and reflect intent better to define a 'numShapes()' method and > use that instead. Agreed. A method didn't work but fortunately "static const size_t NumShapes = ProtoChainDepth + 1;" did the trick.
Status: ASSIGNED → RESOLVED
Closed: 12 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: