blob: 737f0f872803514943de9e5f61b66e5a8359a11c [file] [log] [blame]
import org.checkerframework.checker.signedness.qual.Signed;
import org.checkerframework.checker.signedness.qual.Unsigned;
public class WideningConversion {
char c1;
char c2;
int i1;
int i2;
@Signed int si1;
@Signed int si2;
@Unsigned int ui1;
@Unsigned int ui2;
void compare() {
boolean b;
b = c1 > c2;
b = c1 > i2;
b = i1 > c2;
b = i1 > i2;
}
void plus() {
// Not just "int si" because it's defaulted to TOP so every assignment would work.
@Signed int si;
si = c1 + c2;
si = c1 + i2;
si = i1 + c2;
si = i1 + i2;
si = c1 + c2;
si = c1 + si2;
si = si1 + c2;
si = si1 + si2;
si = c1 + c2;
// :: error: (assignment)
si = c1 + ui2;
// :: error: (assignment)
si = ui1 + c2;
// :: error: (assignment)
si = ui1 + ui2;
@Unsigned int ui;
ui = c1 + c2;
// :: error: (assignment)
ui = c1 + i2;
// :: error: (assignment)
ui = i1 + c2;
// :: error: (assignment)
ui = i1 + i2;
ui = c1 + c2;
// :: error: (assignment)
ui = c1 + si2;
// :: error: (assignment)
ui = si1 + c2;
// :: error: (assignment)
ui = si1 + si2;
ui = c1 + c2;
ui = c1 + ui2;
ui = ui1 + c2;
ui = ui1 + ui2;
// All of these are illegal in Java, without an explicit cast.
// char c;
// c = c1 + c2;
// c = c1 + i2;
// c = i1 + c2;
// c = i1 + i2;
char c;
c = (char) (c1 + c2);
// :: warning: (cast.unsafe)
c = (char) (c1 + i2);
// :: warning: (cast.unsafe)
c = (char) (i1 + c2);
// :: warning: (cast.unsafe)
c = (char) (i1 + i2);
c = (char) (c1 + c2);
// :: warning: (cast.unsafe)
c = (char) (c1 + si2);
// :: warning: (cast.unsafe)
c = (char) (si1 + c2);
// :: warning: (cast.unsafe)
c = (char) (si1 + si2);
c = (char) (c1 + c2);
c = (char) (c1 + ui2);
c = (char) (ui1 + c2);
c = (char) (ui1 + ui2);
}
}