rsmmr / hilti

**NOTE**: This is outdated and no longer maintained. There's a new version at https://github.com/zeek/spicy.
Other
40 stars 22 forks source link

Comparing an integer to an enum label always returns that they are equal #9

Open blipp opened 8 years ago

blipp commented 8 years ago

Starting from tests/binpac/enum/compare-enum.pac2, in the following code, the comparision of an integer (not converted!) to an enum label seems to return equal in any case.

# @TEST-EXEC: printf '\101\102' | pac-driver-test %INPUT >output
# @TEST-EXEC: btest-diff output
#
# @TEST-KNOWN-FAILURE: there's a problem with comparing enum labels.

module Mini;

type ObjectType = enum {
  DataType = 0x41,
  EndOfData = 0x43
};

if ( ObjectType::DataType == ObjectType::DataType ) {
  print "equal";
}

if ( ObjectType::DataType != ObjectType::EndOfData ) {
  print "not equal";
}

export type test = unit {
#  a : uint8 &convert=ObjectType($$);
#  b : uint8 &convert=ObjectType($$);
  a : uint8;
  b : uint8;

  on %done {
    if ( self.a == ObjectType::DataType )
      print "equal";
    if ( self.b != ObjectType::DataType )
      print "not equal";
  }
};

This prints

equal
not equal
equal

and the final "not equal" is missing.

As far as I understand it, either should the comparision work the right way or the compiler say that it is not supported.

I forgot to add that the comparision works correctly if I cast the enum label to an int before, like

if ( self.a == cast<uint8>(ObjectType::DataType) )

By the way, the unmodified test case seems to run correctly, despite it's marked as known failure?