/* Example 1, tagless */
#define mystruct1 struct { int x; }
/* 'foo1' and 'bar1' have the same type. 'baz1' does not */
mystruct1 foo1, bar1;
mystruct1 baz1;
/* Example 2, with a tag */
struct tag2 { int x; };
#define mystruct2 struct tag2
/* 'foo2', 'bar2', 'baz2' all have the same type */
mystruct2 foo2, bar2;
mystruct2 baz2;
/* Example 3, tagless, but with a typedef */
typedef struct { int x; } mystruct3;
/* 'foo3', 'bar3', 'baz3' all have the same type */
mystruct3 foo3, bar3;
mystruct3 baz3;
/* Example 4, with a tag and with a typedef */
typedef struct tag4 { int x; } mystruct4;
/* 'foo4', 'bar4', 'baz4' all have the same type */
mystruct4 foo4, bar4;
mystruct4 baz4;
int main(void) { return 0; }
LyogRXhhbXBsZSAxLCB0YWdsZXNzICovCgojZGVmaW5lIG15c3RydWN0MSBzdHJ1Y3QgeyBpbnQgeDsgfQoKLyogJ2ZvbzEnIGFuZCAnYmFyMScgaGF2ZSB0aGUgc2FtZSB0eXBlLiAgJ2JhejEnIGRvZXMgbm90ICovCm15c3RydWN0MSBmb28xLCBiYXIxOwpteXN0cnVjdDEgYmF6MTsKCi8qIEV4YW1wbGUgMiwgd2l0aCBhIHRhZyAqLwoKc3RydWN0IHRhZzIgeyBpbnQgeDsgfTsKI2RlZmluZSBteXN0cnVjdDIgc3RydWN0IHRhZzIKCi8qICdmb28yJywgJ2JhcjInLCAnYmF6MicgYWxsIGhhdmUgdGhlIHNhbWUgdHlwZSAqLwpteXN0cnVjdDIgZm9vMiwgYmFyMjsKbXlzdHJ1Y3QyIGJhejI7CgovKiBFeGFtcGxlIDMsIHRhZ2xlc3MsIGJ1dCB3aXRoIGEgdHlwZWRlZiAqLwoKdHlwZWRlZiBzdHJ1Y3QgeyBpbnQgeDsgfSBteXN0cnVjdDM7CgovKiAnZm9vMycsICdiYXIzJywgJ2JhejMnIGFsbCBoYXZlIHRoZSBzYW1lIHR5cGUgKi8KbXlzdHJ1Y3QzIGZvbzMsIGJhcjM7Cm15c3RydWN0MyBiYXozOwoKLyogRXhhbXBsZSA0LCB3aXRoIGEgdGFnIGFuZCB3aXRoIGEgdHlwZWRlZiAqLwoKdHlwZWRlZiBzdHJ1Y3QgdGFnNCB7IGludCB4OyB9IG15c3RydWN0NDsKCi8qICdmb280JywgJ2JhcjQnLCAnYmF6NCcgYWxsIGhhdmUgdGhlIHNhbWUgdHlwZSAqLwpteXN0cnVjdDQgZm9vNCwgYmFyNDsKbXlzdHJ1Y3Q0IGJhejQ7CgppbnQgbWFpbih2b2lkKSB7IHJldHVybiAwOyB9