diff --git a/ChangeLog b/ChangeLog
index 4301ce6fd9..9eaee2b403 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sun Mar 18 23:21:17 2012  Nobuyoshi Nakada  <nobu@ruby-lang.org>
+
+	* gc.c (aligned_free): fix condition for free.  memalign() and
+	  posix_memalign() are not defined together normally.
+
 Sun Mar 18 18:31:45 2012  Yuki Sonoda (Yugui)  <yugui@yugui.jp>
 
 	* gc.c (aligned_malloc, aligned_free): added fallback implementations
diff --git a/gc.c b/gc.c
index 538830e344..d260168088 100644
--- a/gc.c
+++ b/gc.c
@@ -1100,7 +1100,8 @@ aligned_malloc(size_t alignment, size_t size)
 #elif defined(HAVE_POSIX_MEMALIGN)
     if (posix_memalign(&res, alignment, size) == 0) {
         return res;
-    } else {
+    }
+    else {
         return NULL;
     }
 #elif defined(HAVE_MEMALIGN)
@@ -1129,7 +1130,7 @@ aligned_free(void *ptr)
     __mingw_aligned_free(ptr);
 #elif defined _WIN32 && !defined __CYGWIN__
     _aligned_free(ptr);
-#elif defined(HAVE_MEMALIGN) && defined(HAVE_POSIX_MEMALIGN)
+#elif defined(HAVE_MEMALIGN) || defined(HAVE_POSIX_MEMALIGN)
     free(ptr);
 #else
     free(((void**)ptr)[-1]);