diff options
Diffstat (limited to 'pkg/compiler')
| -rw-r--r-- | pkg/compiler/check.go | 4 | ||||
| -rw-r--r-- | pkg/compiler/testdata/all.txt | 2 | ||||
| -rw-r--r-- | pkg/compiler/testdata/errors2.txt | 4 |
3 files changed, 6 insertions, 4 deletions
diff --git a/pkg/compiler/check.go b/pkg/compiler/check.go index 5345e2e3f..3bda9cfe6 100644 --- a/pkg/compiler/check.go +++ b/pkg/compiler/check.go @@ -650,8 +650,8 @@ func (comp *compiler) checkPathField(target, t *ast.Type, field *ast.Field) bool func (comp *compiler) checkExprLastField(target *ast.Type, field *ast.Field) { _, desc := comp.derefPointers(field.Type) - if desc != typeInt && desc != typeFlags { - comp.error(target.Pos, "%v does not refer to an integer or a flag", field.Name.Name) + if desc != typeInt && desc != typeFlags && desc != typeConst { + comp.error(target.Pos, "%v does not refer to a constant, an integer, or a flag", field.Name.Name) } } diff --git a/pkg/compiler/testdata/all.txt b/pkg/compiler/testdata/all.txt index 68e85492d..098da4604 100644 --- a/pkg/compiler/testdata/all.txt +++ b/pkg/compiler/testdata/all.txt @@ -357,6 +357,8 @@ struct$conditional { f1 int64 (if[value[f0] == 1]) f2 struct$conditional2 f3 union$conditional3 + f4 const[0, int64] + f5 int64 (if[value[f4] == 0]) } [packed] struct$conditional2 { diff --git a/pkg/compiler/testdata/errors2.txt b/pkg/compiler/testdata/errors2.txt index ffb2e5bc5..71e2aa5ad 100644 --- a/pkg/compiler/testdata/errors2.txt +++ b/pkg/compiler/testdata/errors2.txt @@ -470,11 +470,11 @@ conditional_fields { f3 some_nested_flags f4 int32 (if[value[f3:f1] != 0]) f5 int32 (if[value[f3:f2:f4] != 0]) ### value path f2 does not refer to a struct - f6 int32 (if[value[f3:f4] != 0]) ### f4 does not refer to an integer or a flag + f6 int32 (if[value[f3:f4] != 0]) ### f4 does not refer to a constant, an integer, or a flag f7 int32 (if[value[f3:some_field] != 0]) ### value target some_field does not exist in some_nested_flags f8 int32 (if[value[f3:f5] != 0]) ### f5 has conditions, so value path cannot reference it f9 int32 (if[value[parent:a] != 0]) ### value target a does not exist in conditional_fields - f10 int32 (if[value[f3:f6] != 0]) ### f6 does not refer to an integer or a flag + f10 int32 (if[value[f3:f6] != 0]) ### f6 does not refer to a constant, an integer, or a flag f11 len[f2, int32] ### f2 has conditions, so len path cannot reference it f12 union_cond_fields f13 int32:8 (if[1]) ### bitfields may not have conditions |
