--- lib/ext2fs/ext4_acl.h
+++ lib/ext2fs/ext4_acl.h
@@ -50,13 +50,17 @@ typedef struct {
 
 typedef struct {
         __le32                  a_version;
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 8)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wpedantic"
+#endif
 #endif
         posix_acl_xattr_entry   a_entries[0];
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 8)
 #pragma GCC diagnostic pop
 #endif
+#endif
 } posix_acl_xattr_header;
 
--- lib/ext2fs/fiemap.h
+++ lib/ext2fs/fiemap.h
@@ -31,14 +31,18 @@ struct fiemap {
 	__u32 fm_mapped_extents;/* number of extents that were mapped (out) */
 	__u32 fm_extent_count;  /* size of fm_extents array (in) */
 	__u32 fm_reserved;
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 8)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wpedantic"
+#endif
 #endif
 	struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 8)
 #pragma GCC diagnostic pop
 #endif
+#endif
 };
 
 #if defined(__linux__) && !defined(FS_IOC_FIEMAP)
--- lib/ext2fs/mmp.c
+++ lib/ext2fs/mmp.c
@@ -34,8 +34,10 @@
 #define O_DIRECT 0
 #endif
 
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic push
+#endif
 #ifndef CONFIG_MMP
 #pragma GCC diagnostic ignored "-Wunused-parameter"
 #endif
@@ -467,6 +469,8 @@ mmp_error:
 	return EXT2_ET_OP_NOT_SUPPORTED;
 #endif
 }
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic pop
 #endif
+#endif
--- lib/ext2fs/unix_io.c
+++ lib/ext2fs/unix_io.c
@@ -1127,10 +1127,12 @@ unimplemented:
 }
 
 /* parameters might not be used if OS doesn't support zeroout */
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wunused-parameter"
 #endif
+#endif
 static errcode_t unix_zeroout(io_channel channel, unsigned long long block,
 			      unsigned long long count)
 {
@@ -1197,9 +1199,11 @@ err:
 unimplemented:
 	return EXT2_ET_UNIMPLEMENTED;
 }
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic pop
 #endif
+#endif
 
 static struct struct_io_manager struct_unix_manager = {
 	.magic		= EXT2_ET_MAGIC_IO_MANAGER,
--- lib/ext2fs/hashmap.h
+++ lib/ext2fs/hashmap.h
@@ -17,14 +17,18 @@ struct ext2fs_hashmap {
 		struct ext2fs_hashmap_entry *next;
 		struct ext2fs_hashmap_entry *list_next;
 		struct ext2fs_hashmap_entry *list_prev;
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 8)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wpedantic"
+#endif
 #endif
 	} *entries[0];
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 8)
 #pragma GCC diagnostic pop
 #endif
+#endif
 };
 
 struct ext2fs_hashmap *ext2fs_hashmap_create(
--- lib/uuid/gen_uuid.c
+++ lib/uuid/gen_uuid.c
@@ -484,7 +484,9 @@ static void close_all_fds(void)
 }
 #endif /* defined(USE_UUIDD) && defined(HAVE_SYS_UN_H) */
 
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 6)
+#endif
 #pragma GCC diagnostic push
 #if !defined(USE_UUIDD) || !defined(HAVE_SYS_UN_H)
 #pragma GCC diagnostic ignored "-Wunused-parameter"
@@ -572,9 +574,11 @@ fail:
 #endif
 	return -1;
 }
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic pop
 #endif
+#endif
 
 void uuid__generate_time(uuid_t out, int *num)
 {
--- e2fsck/problem.c
+++ e2fsck/problem.c
@@ -99,10 +99,12 @@ static const char *preen_msg[] = {
 	"",			/* 20 */
 };
 
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 #endif
+#endif
 
 static struct e2fsck_problem problem_table[] = {
 
@@ -2094,9 +2096,11 @@ static struct latch_descr pr_latch_info[] = {
 	{ PR_LATCH_OPTIMIZE_EXT, PR_1E_OPTIMIZE_EXT_HEADER, PR_1E_OPTIMIZE_EXT_END },
 	{ -1, 0, 0 },
 };
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic pop
 #endif
+#endif
 
 static struct e2fsck_problem *find_problem(problem_t code)
 {
--- misc/e2undo.c
+++ misc/e2undo.c
@@ -81,14 +81,18 @@ struct undo_key_block {
 	__le32 magic;		/* KEYBLOCK_MAGIC number */
 	__le32 crc;		/* block checksum */
 	__le64 reserved;	/* zero */
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 8)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wpedantic"
+#endif
 #endif
 	struct undo_key keys[0];	/* keys, which come immediately after */
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 8)
 #pragma GCC diagnostic pop
 #endif
+#endif
 };
 
 struct undo_key_info {
--- misc/filefrag.c
+++ misc/filefrag.c
@@ -535,9 +535,11 @@ int main(int argc, char**argv)
 				char *end;
 				blocksize = strtoul(optarg, &end, 0);
 				if (end) {
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (7, 0)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
+#endif
 #endif
 					switch (end[0]) {
 					case 'g':
@@ -555,8 +557,10 @@ int main(int argc, char**argv)
 					default:
 						break;
 					}
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (7, 0)
 #pragma GCC diagnostic pop
+#endif
 #endif
 				}
 			} else { /* Allow -b without argument for compat. Remove
--- misc/fuse2fs.c
+++ misc/fuse2fs.c
@@ -118,14 +118,18 @@ typedef struct {
 
 typedef struct {
 	u_int32_t	a_version;
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 8)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wpedantic"
+#endif
 #endif
 	acl_ea_entry	a_entries[0];
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 8)
 #pragma GCC diagnostic pop
 #endif
+#endif
 } acl_ea_header;
 
 static inline size_t acl_ea_size(int count)
--- debugfs/set_fields.c
+++ debugfs/set_fields.c
@@ -74,11 +74,12 @@ static errcode_t parse_bmap(struct field_set_info *info, char *field, char *arg)
 static errcode_t parse_gd_csum(struct field_set_info *info, char *field, char *arg);
 static errcode_t parse_mmp_clear(struct field_set_info *info, char *field,
 				 char *arg);
-
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
 #endif
+#endif
 
 static struct field_set_info super_fields[] = {
 	{ "inodes_count", &set_sb.s_inodes_count, NULL, 4, parse_uint },
@@ -291,9 +292,11 @@ static struct field_set_info mmp_fields[] = {
 	{ "checksum", &set_mmp.mmp_checksum, NULL, 4, parse_uint },
 	{ 0, 0, 0, 0 }
 };
+#ifdef __GNUC_PREREQ
 #if __GNUC_PREREQ (4, 6)
 #pragma GCC diagnostic pop
 #endif
+#endif
 
 #ifdef UNITTEST
 
