diff --git a/dir.c b/dir.c
index 15d7277a028..fecb6da0aef 100644
--- a/dir.c
+++ b/dir.c
@@ -1115,7 +1115,7 @@ static enum directory_treatment treat_directory(struct dir_struct *dir,
 
 	/*
 	 * We are looking for ignored files and our directory is not ignored,
-	 * check if it contains only ignored files
+	 * check if it contains untracked files (i.e. is listed as untracked)
 	 */
 	if ((dir->flags & DIR_SHOW_IGNORED) && !exclude) {
 		int ignored;
@@ -1123,7 +1123,8 @@ static enum directory_treatment treat_directory(struct dir_struct *dir,
 		ignored = read_directory_recursive(dir, dirname, len, 1, simplify);
 		dir->flags |= DIR_SHOW_IGNORED;
 
-		return ignored ? ignore_directory : show_directory;
+		if (ignored)
+			return ignore_directory;
 	}
 
 	if (!(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
diff --git a/t/t7061-wtstatus-ignore.sh b/t/t7061-wtstatus-ignore.sh
index 28b7d957a52..6171a49cf94 100755
--- a/t/t7061-wtstatus-ignore.sh
+++ b/t/t7061-wtstatus-ignore.sh
@@ -60,6 +60,31 @@ test_expect_success 'status ignored directory with --ignore -u' '
 	test_cmp expected actual
 '
 
+cat >expected <<\EOF
+?? .gitignore
+?? actual
+?? expected
+EOF
+
+test_expect_success 'status empty untracked directory with --ignore' '
+	rm -rf ignored &&
+	mkdir untracked-ignored &&
+	mkdir untracked-ignored/test &&
+	git status --porcelain --ignored >actual &&
+	test_cmp expected actual
+'
+
+cat >expected <<\EOF
+?? .gitignore
+?? actual
+?? expected
+EOF
+
+test_expect_success 'status empty untracked directory with --ignore -u' '
+	git status --porcelain --ignored -u >actual &&
+	test_cmp expected actual
+'
+
 cat >expected <<\EOF
 ?? .gitignore
 ?? actual
@@ -68,9 +93,6 @@ cat >expected <<\EOF
 EOF
 
 test_expect_success 'status untracked directory with ignored files with --ignore' '
-	rm -rf ignored &&
-	mkdir untracked-ignored &&
-	mkdir untracked-ignored/test &&
 	: >untracked-ignored/ignored &&
 	: >untracked-ignored/test/ignored &&
 	git status --porcelain --ignored >actual &&