---
struct StructUndeclaredDeclared;
struct StructUndeclaredDefined {};
struct StructDeclaredDeclared;
struct StructDeclaredDefined {};
struct StructDefinedDeclared;
struct StructDefinedDefined {};

int use2StructUndeclaredDeclared(struct StructUndeclaredDeclared* undeclaredDeclared) { return 1; }
int use2StructUndeclaredDefined(struct StructUndeclaredDefined* undeclaredDefined) { return 2; }
int use2StructDeclaredDeclared(struct StructDeclaredDeclared* declaredDeclared) { return 4; }
int use2StructDeclaredDefined(struct StructDeclaredDefined* declaredDefined) { return 5; }
int use2StructDefinedDeclared(struct StructDefinedDeclared* definedDeclared) { return 7; }
int use2StructDefinedDefined(struct StructDefinedDefined* definedDefined) { return 8; }
