diff --git a/src/multiset.c b/src/multiset.c
index 2838993df1711852aeef7e97a07d0ef052cf66ef..54b3ba1762d2659e7b76a765ed013450c63827e8 100644
--- a/src/multiset.c
+++ b/src/multiset.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: multiset.c,v 1.96 2006/01/14 13:03:26 mast Exp $
+|| $Id: multiset.c,v 1.97 2006/01/14 14:01:16 nilsson Exp $
 */
 
 #include "global.h"
@@ -4245,18 +4245,8 @@ size_t gc_free_all_unreferenced_multisets (void)
 void init_multiset()
 {
 #ifdef PIKE_DEBUG
-  /* This test is buggy in GCC 4 */
-  /* Perhaps it works better if the test variable is made volatile? (I
-   * can't really test since it works well anyway in my gcc 4.0.2
-   * 20050808 (prerelease).) /mast */
-#ifndef __GNUC__
-#define __GNUC__ 5
-#endif
-#if __GNUC__ > 4 || \
-    (__GNUC__ == 4 && (__GNUC_MINOR__ > 0 || \
-                       (__GNUC_MINOR__ == 0 && \
-                        __GNUC_PATCHLEVEL__ > 2)))
-  union msnode test;
+  /* This test is buggy in GCC 4.0.1, hence the volatile. */
+  volatile union msnode test;
   HDR (&test)->flags = 0;
   test.i.ind.type = (1 << 8) - 1;
   test.i.ind.subtype = (1 << 16) - 1;
@@ -4282,7 +4272,6 @@ void init_multiset()
 	       RB_FLAG_MASK, MULTISET_FLAG_MARKER,
 	       test.i.ind.type);
 #endif
-#endif
 #ifndef HAVE_UNION_INIT
   svalue_int_one.u.integer = 1;
 #endif