# Copyright 2017 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

include <foo/bar.h>
incdir </foo>
include <bar/foo.h>
incdir </bar>

flags = CONST3, CONST2, CONST1

define CONST1 1
define CONST2 FOOBAR + 1

foo(x const[CONST4], y ptr[out, array[int32, CONST5]])
bar$BAR()

str {
	f1	const[CONST6, int32]
	f2	array[array[int8, CONST7]]
}

bar$BAZ(x vma[opt], y vma[CONST8], z vma[CONST9:CONST10])
bar$QUX(s ptr[in, string["foo", CONST11]], x ptr[in, csum[s, pseudo, CONST12, int16]])
bar$FOO(x int8[8:CONST13], y int16be[CONST14:10], z intptr[CONST15:CONST16])

type type0 const[CONST17, int8]
type templ0[C] const[C, int8]
foo$0(a templ0[CONST18])
type templ1[C] {
	f1	const[CONST19, int8]
	f2	const[C, int8]
}
foo$1(a ptr[in, templ1[CONST20]])

str2 {
	f1	int8
} [size[CONST21]]

_ = CONST22, CONST23
_ = CONST24
