Skip to content

Commit 5776077

Browse files
C++: Add comment about enum signedness
1 parent debb662 commit 5776077

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

cpp/ql/src/semmle/code/cpp/ir/internal/CppType.qll

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,12 @@ predicate hasBooleanType(int byteSize) {
5555
private predicate isSigned(IntegralOrEnumType type) {
5656
type.(IntegralType).isSigned() or
5757
exists(Enum enumType |
58+
// If the enum has an explicit underlying type, we'll determine signedness from that. If not,
59+
// we'll assume unsigned. The actual rules for the implicit underlying type of an enum vary
60+
// between compilers, so we'll need an extractor change to get this 100% right. Until then,
61+
// unsigned is a reasonable default.
5862
enumType = type.getUnspecifiedType() and
59-
(
60-
enumType.getExplicitUnderlyingType().getUnspecifiedType().(IntegralType).isSigned() or
61-
not exists(enumType.getExplicitUnderlyingType()) // Assume signed.
62-
)
63+
enumType.getExplicitUnderlyingType().getUnspecifiedType().(IntegralType).isSigned()
6364
)
6465
}
6566

0 commit comments

Comments
 (0)