add pflash
diff --git a/objects/pflash/ccan/container_of/test/compile_fail-bad-type.c b/objects/pflash/ccan/container_of/test/compile_fail-bad-type.c
new file mode 100644
index 0000000..9ee8e9f
--- /dev/null
+++ b/objects/pflash/ccan/container_of/test/compile_fail-bad-type.c
@@ -0,0 +1,22 @@
+#include <ccan/container_of/container_of.h>

+#include <stdlib.h>

+

+struct foo {

+	int a;

+	char b;

+};

+

+int main(int argc, char *argv[])

+{

+	struct foo foo = { .a = 1, .b = 2 };

+	int *intp = &foo.a;

+	char *p;

+

+#ifdef FAIL

+	/* p is a char *, but this gives a struct foo * */

+	p = container_of(intp, struct foo, a);

+#else

+	p = (char *)intp;

+#endif

+	return p == NULL;

+}

diff --git a/objects/pflash/ccan/container_of/test/compile_fail-types.c b/objects/pflash/ccan/container_of/test/compile_fail-types.c
new file mode 100644
index 0000000..acd57c7
--- /dev/null
+++ b/objects/pflash/ccan/container_of/test/compile_fail-types.c
@@ -0,0 +1,22 @@
+#include <ccan/container_of/container_of.h>

+#include <stdlib.h>

+

+struct foo {

+	int a;

+	char b;

+};

+

+int main(int argc, char *argv[])

+{

+	struct foo foo = { .a = 1, .b = 2 }, *foop;

+	int *intp = &foo.a;

+

+#ifdef FAIL

+	/* b is a char, but intp is an int * */

+	foop = container_of(intp, struct foo, b);

+#else

+	foop = NULL;

+#endif

+	(void) foop; /* Suppress unused-but-set-variable warning. */

+	return intp == NULL;

+}

diff --git a/objects/pflash/ccan/container_of/test/compile_fail-var-types.c b/objects/pflash/ccan/container_of/test/compile_fail-var-types.c
new file mode 100644
index 0000000..60f25bd
--- /dev/null
+++ b/objects/pflash/ccan/container_of/test/compile_fail-var-types.c
@@ -0,0 +1,25 @@
+#include <ccan/container_of/container_of.h>

+#include <stdlib.h>

+

+struct foo {

+	int a;

+	char b;

+};

+

+int main(int argc, char *argv[])

+{

+	struct foo foo = { .a = 1, .b = 2 }, *foop;

+	int *intp = &foo.a;

+

+#ifdef FAIL

+	/* b is a char, but intp is an int * */

+	foop = container_of_var(intp, foop, b);

+#if !HAVE_TYPEOF

+#error "Unfortunately we don't fail if we don't have typeof."

+#endif

+#else

+	foop = NULL;

+#endif

+	(void) foop; /* Suppress unused-but-set-variable warning. */

+	return intp == NULL;

+}

diff --git a/objects/pflash/ccan/container_of/test/run.c b/objects/pflash/ccan/container_of/test/run.c
new file mode 100644
index 0000000..bc87789
--- /dev/null
+++ b/objects/pflash/ccan/container_of/test/run.c
@@ -0,0 +1,24 @@
+#include <ccan/container_of/container_of.h>

+#include <ccan/tap/tap.h>

+

+struct foo {

+	int a;

+	char b;

+};

+

+int main(int argc, char *argv[])

+{

+	struct foo foo = { .a = 1, .b = 2 };

+	int *intp = &foo.a;

+	char *charp = &foo.b;

+

+	plan_tests(6);

+	ok1(container_of(intp, struct foo, a) == &foo);

+	ok1(container_of(charp, struct foo, b) == &foo);

+	ok1(container_of_var(intp, &foo, a) == &foo);

+	ok1(container_of_var(charp, &foo, b) == &foo);

+

+	ok1(container_off(struct foo, a) == 0);

+	ok1(container_off(struct foo, b) == offsetof(struct foo, b));

+	return exit_status();

+}