[webkit-reviews] review denied: [Bug 95418] Build warning : -Wsign-compare on DFGByteCodeParser.cpp. : [Attachment 161393] Patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Wed Aug 29 22:47:46 PDT 2012


Filip Pizlo <fpizlo at apple.com> has denied  review:
Bug 95418: Build warning : -Wsign-compare on DFGByteCodeParser.cpp.
https://bugs.webkit.org/show_bug.cgi?id=95418

Attachment 161393: Patch
https://bugs.webkit.org/attachment.cgi?id=161393&action=review

------- Additional Comments from Filip Pizlo <fpizlo at apple.com>
View in context: https://bugs.webkit.org/attachment.cgi?id=161393&action=review


I think what you're hitting here is that different compilers have different
opinions about what the sign of arithmetic on a part signed, part unsigned
expression is.	On our build system, the current setup works - these
comparisons are all signed versus signed.  If your build system disagrees
(which it apparently is doing), you should insert casts into the arithmetic
(inlineCallFrame->stackOffset + CallFrame::thisArgumentOffset(), and
inlineCallFrame->stackOffset - RegisterFile::CallFrameHeaderSize -
inlineCallFrame->arguments.size()) to ensure that it stays signed all the way
through.

And please don't change operand variables to unsigned.	Operands are always
signed, since negative operand values carry special meaning.

> Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:362
> -    ArgumentPosition* findArgumentPositionForLocal(int operand)
> +    ArgumentPosition* findArgumentPositionForLocal(unsigned operand)

This is wrong.	Operands are always signed integers.

> Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:370
> -	       if (operand == inlineCallFrame->stackOffset +
CallFrame::thisArgumentOffset())
> +	       if (static_cast<int>(operand) == inlineCallFrame->stackOffset +
CallFrame::thisArgumentOffset())

Change the right hand side of this to static_cast<int>(inlineCallFrame->...)

> Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:372
> -	       if (static_cast<unsigned>(operand) <
inlineCallFrame->stackOffset - RegisterFile::CallFrameHeaderSize -
inlineCallFrame->arguments.size())
> +	       if (operand < inlineCallFrame->stackOffset -
RegisterFile::CallFrameHeaderSize - inlineCallFrame->arguments.size())

Same as above.	Change the right hand side to a cast to int.

> Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:374
> -	       int argument = operandToArgument(operand -
inlineCallFrame->stackOffset);
> +	       int argument = operandToArgument(static_cast<int>(operand) -
inlineCallFrame->stackOffset);

Remove this.


More information about the webkit-reviews mailing list