168fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian// RUN: %clang_cc1 -fsyntax-only %s
268fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian// rdar://9584012
368fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian
468fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahaniantypedef struct {
568fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian	char *str;
668fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian} Class;
768fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian
868fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahaniantypedef union {
968fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian	Class *object;
1068fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian} Instance __attribute__((transparent_union));
1168fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian
1268fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian__attribute__((nonnull(1))) void Class_init(Instance this, char *str) {
1368fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian	this.object->str = str;
1468fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian}
1568fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian
1668fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanianint main(void) {
1768fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian	Class *obj;
1868fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian	Class_init(0, "Hello World"); // expected-warning {{null passed to a callee which requires a non-null argument}}
1968fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian	Class_init(obj, "Hello World");
2068fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian}
2168fe96adf787abd1e98016da0f38e26644faf7b9Fariborz Jahanian
22