https://bugzilla.novell.com/show_bug.cgi?id=675777
https://bugzilla.novell.com/show_bug.cgi?id=675777#c0 Summary: the negation part of an expression like "0 - non_constant_expr" is ignored by mcs Classification: Mono Product: Mono: Compilers Version: 2.10.x Platform: All OS/Version: All Status: NEW Severity: Normal Priority: P5 - None Component: C# AssignedTo: [email protected] ReportedBy: [email protected] QAContact: [email protected] Found By: --- Blocker: --- Created an attachment (id=416668) --> (http://bugzilla.novell.com/attachment.cgi?id=416668) test case User-Agent: Opera/9.80 (X11; Linux x86_64; U; en) Presto/2.7.62 Version/11.01 If an expression in this form is used, then mcs will generate invalid code: 0 - (some expression that is not made up entirely of constant values) For example: int ten = 10; Console.WriteLine("This should output -10, but doesn't: {0}", 0 - ten); If the minuend (0) is a variable or not 0, and/or the subtrahend (ten) is a constant, then the issue does not occur. Microsoft's C# compiler does not have this issue. Please see the actual/expected output below for more info on this. It only occurs when the test case is compiled with mcs -- whether the compiled exe is run using Mono's CLR or Microsoft's CLR has no bearing on the output. I checked both binaries using monodis, the code is virtually identical -- but Microsoft's compiler inserts a "neg" instruction, whereas mcs doesn't (the variable is passed directly to Console::WriteLine). Also, the problem does not occur when just using a negating expression like -ten. I've tested using Mono 2.10.1 on Arch Linux 64-bit, and Visual Studio 2008 on Windows XP 32-bit. Reproducible: Always Steps to Reproduce: 1. Compile the test case, using either mcs (for incorrect output) or Microsoft's csc (for correct output). 2. Run the .exe file in a console. Actual Results: When the assembly is compiled with mcs: -1 - ten: -11 0 - ten: 10 1 - ten: -9 - ten: -10 -1 - 10: -11 0 - 10: -10 1 - 10: -9 - 10: -10 minusOne - 10: -11 zero - 10: -10 one - 10: -9 minusOne - ten: -11 zero - ten: -10 one - ten: -9 (4 - 4) - 10: -10 [works under mcs] 0 - (5 * 2): -10 [works under mcs] 0 - (ten): 10 [fails under mcs] 0 - (ten * 2): 20 [fails under mcs] 0 - (ten * one): 10 [fails under mcs] Expected Results: When the assembly is compiled with csc or Visual C#: -1 - ten: -11 0 - ten: -10 1 - ten: -9 - ten: -10 -1 - 10: -11 0 - 10: -10 1 - 10: -9 - 10: -10 minusOne - 10: -11 zero - 10: -10 one - 10: -9 minusOne - ten: -11 zero - ten: -10 one - ten: -9 (4 - 4) - 10: -10 [works under mcs] 0 - (5 * 2): -10 [works under mcs] 0 - (ten): -10 [fails under mcs] 0 - (ten * 2): -20 [fails under mcs] 0 - (ten * one): -10 [fails under mcs] -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. _______________________________________________ mono-bugs maillist - [email protected] http://lists.ximian.com/mailman/listinfo/mono-bugs
