diff --git a/tests/Makefile b/tests/Makefile
index a7bdb63a7bce30413e91f56a47195881e6b88a68..f234a8ae17d34f2bda2f958d118f1ff9edae86ef 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -3,7 +3,9 @@ EXPECT_BINS=\
 	args \
 	arpainet \
 	assert \
+	constructor \
 	ctype \
+	destructor \
 	dirent/scandir \
 	error \
 	fcntl/create \
diff --git a/tests/constructor.c b/tests/constructor.c
new file mode 100644
index 0000000000000000000000000000000000000000..4a5a4fa55e50065534e996fdeb1edda64d67955e
--- /dev/null
+++ b/tests/constructor.c
@@ -0,0 +1,21 @@
+#include <stdio.h>
+
+__attribute__((constructor))
+void constructor_no_priority(void) {
+    puts("constructor (no priority)");
+}
+
+#define TEST(__priority)                           \
+    __attribute__((constructor(__priority)))       \
+    void constructor_priority_##__priority(void) { \
+        puts("constructor ("#__priority")");       \
+    }
+
+TEST(101);
+TEST(102);
+TEST(103);
+TEST(104);
+
+int main(int argc, char *argv[]) {
+    puts("main");
+}
diff --git a/tests/destructor.c b/tests/destructor.c
new file mode 100644
index 0000000000000000000000000000000000000000..af3e1416bffdcda9efbaf672c782d79b55e5c80f
--- /dev/null
+++ b/tests/destructor.c
@@ -0,0 +1,21 @@
+#include <stdio.h>
+
+__attribute__((destructor))
+void destructor_no_priority(void) {
+    puts("destructor (no priority)");
+}
+
+#define TEST(__priority)                          \
+    __attribute__((destructor(__priority)))       \
+    void destructor_priority_##__priority(void) { \
+        puts("destructor ("#__priority")");       \
+    }
+
+TEST(101);
+TEST(102);
+TEST(103);
+TEST(104);
+
+int main(int argc, char *argv[]) {
+    puts("main");
+}
diff --git a/tests/expected/constructor.stderr b/tests/expected/constructor.stderr
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/tests/expected/constructor.stdout b/tests/expected/constructor.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..14e23d4cbb5788c6b35f811d07aa187c4296c6b4
--- /dev/null
+++ b/tests/expected/constructor.stdout
@@ -0,0 +1,6 @@
+constructor (101)
+constructor (102)
+constructor (103)
+constructor (104)
+constructor (no priority)
+main
diff --git a/tests/expected/destructor.stderr b/tests/expected/destructor.stderr
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/tests/expected/destructor.stdout b/tests/expected/destructor.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..1da7c2970663dcf2d4632431678e6a946197819b
--- /dev/null
+++ b/tests/expected/destructor.stdout
@@ -0,0 +1,6 @@
+main
+destructor (no priority)
+destructor (104)
+destructor (103)
+destructor (102)
+destructor (101)