# 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.

0x42		### unexpected int, expecting comment, define, include, resource, identifier
foo		### unexpected '\n', expecting '(', '{', '[', '='
%		### illegal character U+0025 '%'

int_flags0 = 0, 0x1, 0xab
int_flags1 = 123ab0x			### bad integer "123ab0x"
int_flags1 == 0, 1			### unexpected '=', expecting int, identifier, string
int_flags = 0, "foo"			### unexpected string, expecting int, identifier
int_flags2 = '				### char literal is not terminated
int_flags3 = 'a				### char literal is not terminated
int_flags3 = 'a, 1			### char literal is not terminated
int_flags4 = 1, -2-			### bad integer "-2-"

str_flags0 = "foo", "bar"
str_flags1 = "non terminated		### string literal is not terminated
str_flags2 = "bad chars здесь"		### illegal character U+00D0 'Ð' in string literal
str_flags3 = "string", not a string	### unexpected identifier, expecting string
str_flags4 = "string", 42		### unexpected int, expecting string

call(foo ,int32 , bar int32)		### unexpected ',', expecting int, identifier, string
call(foo int32:"bar")			### unexpected string, expecting int, identifier

define FOO `bar`
define FOO `bar				### C expression is not terminated

foo(x int32[1:2:3, opt])		### unexpected ':', expecting ']'

s0 {
	f0	string[""]
}

sf0 = "", "1"

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

s2 {
	f1	int8

	# comment

	f2	int8

	# comment

}

s3 {
	f1	int8
} [attribute[1, "foo"], another[and[another]]]

type mybool8 int8
type net_port proc[1, 2, int16be]
type mybool16				### unexpected '\n', expecting '[', identifier
type type4:4 int32			### unexpected ':', expecting '[', identifier

type templ0[] int8			### unexpected ']', expecting identifier
type templ1[A,] int8			### unexpected ']', expecting identifier
type templ2[,] int8			### unexpected ',', expecting identifier
type templ3[				### unexpected '\n', expecting identifier
type templ4[A]				### unexpected '\n', expecting int, identifier, string
type templ5[A] const[A]
type templ6[A, B] const[A, B]
type templ7[0] ptr[in, int8]		### unexpected int, expecting identifier

type templ_struct0[A, B] {
	len	len[parent, int16]
	typ	const[A, int16]
	data	B
} [align_4]