Skip to content

Unnecessary uint casts/conversions for certain bitwise operations in ILSpy 6.2p2 #2166

@lbmaian

Description

@lbmaian

This seems to be a regression from the fixes for #1796

I've found two cases where uint casts and constant conversions to unsigned are unnecessary. Possibly also applies to other unsigned integral types.

Input code

Decompiler settings reset to default.

Source as entered in LINQPad 5:

int Foo(int x)
{
	if ((x & 0x10) != 0)
		return 1;
	return 0;
}

byte Bar(int x)
{
	return (byte)(x & 0x10);
}

Assembly: query_jsdiku.zip

Erroneous output

Actual output:

private int Foo(int x)
{
	if (((uint)x & 0x10u) != 0)
	{
		return 1;
	}
	return 0;
}

private byte Bar(int x)
{
	return (byte)((uint)x & 0x10u);
}

Expected output (as decompiled by ILSpy 6.1):

private int Foo(int x)
{
	if ((x & 0x10) != 0)
	{
		return 1;
	}
	return 0;
}

private byte Bar(int x)
{
	return (byte)(x & 0x10);
}

Details

  • Product in use: ILSpy
  • Version in use: 6.2.0.6118-preview2

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugDecompilerThe decompiler engine itself

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions