1# Copyright 2017 syzkaller project authors. All rights reserved. 2# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4foo$0(x fileoff, y int8, z buffer[in]) 5foo$1(x "bar") ### unexpected string "bar", expect type 6foo$2(x 123, y "bar") ### unexpected int 123, expect type ### unexpected string "bar", expect type 7foo$3(x string) ### string can't be syscall argument 8 9resource r0[int32]: 0, 0x1 10resource r1[string["foo"]] ### string can't be resource base (int types can) 11resource r1[int32] ### type r1 redeclared, previously declared as resource at LOCATION 12resource int32[int32] ### resource name int32 conflicts with builtin type 13resource fileoff[intptr] ### resource name fileoff conflicts with builtin type 14 15s1 { 16 f1 int32 17} 18 19s1 { ### type s1 redeclared, previously declared as struct at LOCATION 20 f1 int32 21 f1 intptr ### duplicate field f1 in struct s1 22 parent int8 ### reserved field name parent in struct s1 23} 24 25s2 { ### struct s2 has no fields, need at least 1 field 26} 27 28int32 { ### struct name int32 conflicts with builtin type 29 f1 int32 30} 31 32r0 { ### type r0 redeclared, previously declared as resource at LOCATION 33 f1 int32 34} 35 36u0 [ 37 f1 int32 38 f2 fileoff[int32] 39] 40 41u1 [ ### union u1 has no fields, need at least 1 field 42] 43 44u2 [ 45 f1 int8 46 f1 int16 ### duplicate field f1 in union u2 47 parent int32 ### reserved field name parent in union u2 48] 49 50foo$4(a int8, a int16) ### duplicate argument a in syscall foo$4 51foo$4() ### syscall foo$4 redeclared, previously declared at LOCATION 52foo() 53foo() ### syscall foo redeclared, previously declared at LOCATION 54foo$5(a0 int8, a1 int8, a2 int8, a3 int8, a4 int8, a5 int8, a6 int8, a7 int8, a8 int8, a9 int8) ### syscall foo$5 has 10 arguments, allowed maximum is 9 55foo$6(parent int8) ### reserved argument name parent in syscall foo$6 56 57f1 = 1 58f2 = 1, 2 59f2 = 1, 2 ### flags f2 redeclared, previously declared at LOCATION 60sf1 = "a" 61sf2 = "a", "b" 62sf2 = "c" ### string flags sf2 redeclared, previously declared at LOCATION 63 64resource r2[r0]: 2 65resource r3[int32:1] ### unexpected ':', only struct fields can be bitfields 66resource r4[int32[opt]] ### resource base can't be marked as opt 67resource r5[non_existent] ### unknown type non_existent 68resource r9["foo"] ### unexpected string "foo", expect type 69 70foo$7(a r0, a1 r2[opt]) 71foo$8(a fileoff[a, b, c]) ### wrong number of arguments for type fileoff, expect no arguments 72foo$9(a buffer[inout]) 73foo$10(a buffer[intout]) ### unexpected value intout for direction argument of buffer type, expect [in out inout] 74foo$11(a buffer["in"]) ### unexpected string "in" for direction argument of buffer type, expect [in out inout] 75foo$12(a buffer[10]) ### unexpected int 10 for direction argument of buffer type, expect [in out inout] 76foo$13(a int32[2:3]) 77foo$14(a int32[2:2]) 78foo$16(a int32[3]) 79foo$17(a ptr[in, int32]) 80foo$18(a ptr[in, int32[2:3]]) 81foo$19(a ptr[in, int32[opt]]) 82foo$20(a ptr) ### wrong number of arguments for type ptr, expect direction, type, [opt] 83foo$21(a ptr["foo"]) ### wrong number of arguments for type ptr, expect direction, type, [opt] 84foo$22(a ptr[in]) ### wrong number of arguments for type ptr, expect direction, type, [opt] 85foo$23(a ptr[in, s3[in]]) ### wrong number of arguments for type s3, expect no arguments 86foo$25(a proc[0, "foo"]) ### unexpected string "foo" for per-proc values argument of proc type, expect int 87foo$26(a flags[no]) ### unknown flags no 88foo$27(a flags["foo"]) ### unexpected string "foo" for flags argument of flags type, expect identifier 89foo$28(a ptr[in, string["foo"]], b ptr[in, string["foo", 4]]) 90foo$30(a ptr[in, string[no]]) ### unknown string flags no 91foo$31(a int8, b ptr[in, csum[a, inet]]) ### wrong number of arguments for type csum, expect csum target, kind, [proto], base type 92foo$32(a int8, b ptr[in, csum[a, inet, 1, int32]]) ### only pseudo csum can have proto 93foo$33(a int8, b ptr[in, csum[a, pseudo, 1, int32]]) 94foo$34(a int32["foo"]) ### unexpected string "foo" for range argument of int32 type, expect int 95foo$35(a ptr[in, s3[opt]]) ### s3 can't be marked as opt 96foo$36(a const[1:2]) ### unexpected ':' 97foo$39(a fileoff:1) ### unexpected ':' 98foo$40(a len["a"]) ### unexpected string "a" for len target argument of len type, expect identifier 99foo$41(a vma[C1:C2]) 100foo$43(a ptr[in, string[1]]) ### unexpected int 1, string arg must be a string literal or string flags 101foo$44(a int32) len[a] ### len can't be syscall return 102foo$45(a int32) len[b] ### len can't be syscall return 103foo$46(a ptr[in, in]) ### unknown type in 104foo$47(a int32:2) ### unexpected ':', only struct fields can be bitfields 105foo$48(a ptr[in, int32:7]) ### unexpected ':', only struct fields can be bitfields 106foo$49(a ptr[in, array[int32, 0:1]]) 107foo$52(a intptr, b bitsize[a]) 108foo$53(a proc[20, 10, opt]) 109# This must not error yet (consts are not patched). 110foo$54(a ptr[in, string["foo", C1]]) 111foo$55(a int8[opt[int8]]) ### opt can't have arguments 112foo$56(a void) ### void can't be syscall argument 113foo$57(a ptr[in, stringnoz["foo", 10]]) ### fixed-size string can't be non-zero-terminated 114foo$58(a ptr[in, stringnoz[sf2, 10]]) ### fixed-size string can't be non-zero-terminated 115foo$59(a s1) ### s1 can't be syscall argument 116foo$60() s1 ### s1 can't be syscall return 117foo$61(a u6) ### u6 can't be syscall argument 118foo$62() u6 ### u6 can't be syscall return 119foo$63(a int32[1[2]]) ### range argument has subargs 120foo$64(a ptr[in, flags[f1[int32], int32]]) ### flags argument has subargs 121 122opt { ### struct uses reserved name opt 123 f1 int32 124} 125 126in = 1, 2 ### flags uses reserved name in 127out = "1", "2" ### string flags uses reserved name out 128 129out [ ### union uses reserved name out 130 f1 int32 131 f2 int8 132] 133 134resource inout[int32] ### resource uses reserved name inout 135 136bar() 137 138s3 { 139 f1 int8:0 ### bitfields of size 0 are not supported 140 f2 int8:1 141 f3 int8:7 142 f4 int8:8 143 f5 int8:9 ### bitfield of size 9 is too large for base type of size 8 144 f6 int32:32 145 f7 int32:33 ### bitfield of size 33 is too large for base type of size 32 146 f8 const[0, int32:C1] ### literal const bitfield sizes are not supported 147} [packed, align_4] 148 149s4 { 150 f1 int8 151} [align_7] ### bad struct s4 alignment 7 (must be a sane power of 2) 152 153s5 { 154 f1 int8 155} [varlen] ### unknown struct s5 attribute varlen 156 157s6 { 158 f1 int8 159} [align_foo] ### bad struct s6 alignment foo 160 161s7 { 162 f1 ptr64[in, int32] 163} 164 165s8 { 166 f1 int8 167} [unknown] ### unknown struct s8 attribute unknown 168 169s9 { 170 f1 int8 171} ["foo"[0]] ### unexpected string "foo", expect attribute 172 173s10 { 174 f1 int8 175} [packed[0]] ### packed attribute has args 176 177s11 { 178 f1 int8 179} [size["foo"]] ### unexpected string "foo", expect int 180 181s12 { 182 f1 int8 183} [size[0:1]] ### size attribute has colon or args 184 185s13 { 186 f1 int8 187} [size[0[0]]] ### size attribute has colon or args 188 189u3 [ 190 f1 int8 191 f2 int32 192] [varlen] 193 194u4 [ 195 f1 int8 196 f2 int32 197] [packed] ### unknown union u4 attribute packed 198 199u5 [ 200 f1 int8:1 ### unexpected ':', only struct fields can be bitfields 201 f2 int8:2 ### unexpected ':', only struct fields can be bitfields 202] 203 204u6 [ 205 f1 int8 206 f2 int64 207 f3 array[int8] 208] 209 210define d0 SOMETHING 211define d1 `some C expression` 212define d2 some C expression 213define d2 SOMETHING ### duplicate define d2 214define d3 1 215 216# Type aliases. 217 218type mybool8 int8[0:1] 219type mybool16 int16[0:1] 220type net_port proc[100, 1, int16be] 221resource typeres0[mybool8] 222typestruct { 223 f1 mybool8 224 f2 mybool16 225} 226 227type type0 int8 228type type0 int8 ### type type0 redeclared, previously declared as type alias at LOCATION 229resource type0[int32] ### type type0 redeclared, previously declared as type alias at LOCATION 230type0 = 0, 1 231type type1 type1 ### type instantiation loop: type1 -> type1 232type type2 int8:4 ### unexpected ':', only struct fields can be bitfields 233type type3 type2 ### unknown type type2 234type type4 const[0] ### wrong number of arguments for type const, expect value, base type 235type type6 len[foo, int32] ### len can't be type alias target 236type type7 len[foo] ### len can't be type alias target 237resource typeres1[int32] 238type type8 typeres1 ### typeres1 can't be type alias target 239type int8 int8 ### type name int8 conflicts with builtin type 240type opt int8 ### type uses reserved name opt 241type type9 const[0, int8] 242type type12 proc[123, 2, int16, opt] 243type type13 ptr[in, typestruct13] 244type type14 flags[type0, int32] 245type type15 const[0, type0] ### unexpected value type0 for base type argument of const type, expect [int8 int16 int32 int64 int16be int32be int64be intptr] 246type bool8 int8[0:1] ### type name bool8 conflicts with builtin type 247 248typestruct11 { 249 f type11 ### unknown type type11 250} 251 252typestruct12 { 253 f type11 ### unknown type type11 254} 255 256typestruct13 { 257 f1 type9 258 f2 type12 259} 260 261foo$100(a mybool8, b mybool16) 262foo$102(a type2) ### unknown type type2 263foo$103(a type0:4) ### type alias type0 with ':' 264foo$104(a type0[opt]) ### type type0 is not a template 265foo$105() type0 ### int8 can't be syscall return 266foo$106() type6 ### unknown type type6 267foo$107(a type9, b type12) 268foo$108(a flags[type0]) 269foo$109(a ptr[in, type0]) 270 271# Type templates. 272 273type templ0[A, B] const[A, B] 274type templ2[A] A[0] 275type templ3[A] ptr[in, A] 276type templ4[A, A] ptr[in, A] ### duplicate type argument A 277type templ5[abc] ptr[in, abc] ### type argument abc must be ALL_CAPS 278type templ6[T] ptr[in, T] 279type templ7 templ0[templ6, int8] 280 281# Note: here 42 is stripped as base type, so const ends up without arguments. 282foo$201(a templ1[42]) ### wrong number of arguments for type const, expect value 283type templ1[A] const[A] 284 285type templ_struct0[A, B] { 286 len len[parent, int16] 287 typ const[A, int16] 288 data B 289} [align_4] 290 291type templ_struct1[STR] { 292 f string[STR, 40] 293 f int32 ### duplicate field f in template struct templ_struct1 294} 295 296type templ_struct2[A] { 297 f B ### unknown type B 298} 299 300type templ_base0[TYPE] { 301 f1 TYPE 302} 303 304type templ_templ0[BASE] { 305 f1 BASE 306} 307 308type templ_templ1[BASE] { 309 f1 BASE[int16] ### both template parameter BASE and its usage have sub-arguments 310} 311 312templ_templ_use0 { 313 f1 templ_templ0[templ_base0] ### template templ_base0 needs 1 arguments instead of 0 314 f2 templ_templ1[templ_base0[int32]] 315} 316 317foo$200(a templ0[42, int8]) 318foo$202(a templ0) ### template templ0 needs 2 arguments instead of 0 319foo$203(a type0[42]) ### type type0 is not a template 320foo$204(a ptr[in, templ_struct0[42, int8]]) 321foo$205(a ptr[in, templ_struct0[int8, int8]]) 322foo$207(a ptr[in, templ_struct2[1]]) 323 324# fmt 325 326foo$fmt0(a ptr[in, fmt]) ### wrong number of arguments for type fmt, expect format, value 327foo$fmt1(a fmt[dec, int8]) ### fmt can't be syscall argument 328foo$fmt2(a ptr[in, fmt[dec, ptr[in, int8]]]) ### bad fmt value ptr, expect an integer 329foo$fmt3(a ptr[in, fmt[foo, int8]]) ### unexpected value foo for format argument of fmt type, expect [dec hex oct] 330foo$fmt4(a ptr[in, fmt[dec, int8:3]]) ### unexpected ':', only struct fields can be bitfields 331 332struct$fmt0 { 333 f0 fmt[dec, int8:3] ### unexpected ':', only struct fields can be bitfields 334 f1 int32:-1 ### bitfield of size 18446744073709551615 is too large for base type of size 32 335} 336