diff --git a/Doc/library/macostools.rst b/Doc/library/macostools.rst
index 96d2897..fc26d2f 100644
--- a/Doc/library/macostools.rst
+++ b/Doc/library/macostools.rst
@@ -17,6 +17,8 @@
 
    This module has been removed in Python 3.0.
 
+
+
 The :mod:`macostools` module defines the following functions:
 
 
@@ -28,17 +30,30 @@
    modification and backup times (default is to copy them). Custom icons, comments
    and icon position are not copied.
 
+   .. note::
+
+      This function does not work in 64-bit code because it uses APIs that
+      are not available in 64-bit mode.
 
 .. function:: copytree(src, dst)
 
    Recursively copy a file tree from *src* to *dst*, creating folders as needed.
    *src* and *dst* should be specified as pathnames.
 
+   .. note::
+
+      This function does not work in 64-bit code because it uses APIs that
+      are not available in 64-bit mode.
 
 .. function:: mkalias(src, dst)
 
    Create a finder alias *dst* pointing to *src*.
 
+   .. note::
+
+      This function does not work in 64-bit code because it uses APIs that
+      are not available in 64-bit mode.
+
 
 .. function:: touched(dst)
 
diff --git a/Lib/test/test_macostools.py b/Lib/test/test_macostools.py
index 5c83d28..ac965ac 100644
--- a/Lib/test/test_macostools.py
+++ b/Lib/test/test_macostools.py
@@ -57,37 +57,39 @@
                                     DeprecationWarning)
             macostools.touched(test_support.TESTFN)
 
-    def test_copy(self):
-        try:
-            os.unlink(TESTFN2)
-        except:
-            pass
-        macostools.copy(test_support.TESTFN, TESTFN2)
-        self.assertEqual(self.compareData(), '')
+    if sys.maxint < 2**32:
+        def test_copy(self):
+            try:
+                os.unlink(TESTFN2)
+            except:
+                pass
+            macostools.copy(test_support.TESTFN, TESTFN2)
+            self.assertEqual(self.compareData(), '')
 
-    def test_mkalias(self):
-        try:
-            os.unlink(TESTFN2)
-        except:
-            pass
-        macostools.mkalias(test_support.TESTFN, TESTFN2)
-        fss, _, _ = Carbon.File.ResolveAliasFile(TESTFN2, 0)
-        self.assertEqual(fss.as_pathname(), os.path.realpath(test_support.TESTFN))
+    if sys.maxint < 2**32:
+        def test_mkalias(self):
+            try:
+                os.unlink(TESTFN2)
+            except:
+                pass
+            macostools.mkalias(test_support.TESTFN, TESTFN2)
+            fss, _, _ = Carbon.File.ResolveAliasFile(TESTFN2, 0)
+            self.assertEqual(fss.as_pathname(), os.path.realpath(test_support.TESTFN))
 
-    def test_mkalias_relative(self):
-        try:
-            os.unlink(TESTFN2)
-        except:
-            pass
-        # If the directory doesn't exist, then chances are this is a new
-        # install of Python so don't create it since the user might end up
-        # running ``sudo make install`` and creating the directory here won't
-        # leave it with the proper permissions.
-        if not os.path.exists(sys.prefix):
-            return
-        macostools.mkalias(test_support.TESTFN, TESTFN2, sys.prefix)
-        fss, _, _ = Carbon.File.ResolveAliasFile(TESTFN2, 0)
-        self.assertEqual(fss.as_pathname(), os.path.realpath(test_support.TESTFN))
+        def test_mkalias_relative(self):
+            try:
+                os.unlink(TESTFN2)
+            except:
+                pass
+            # If the directory doesn't exist, then chances are this is a new
+            # install of Python so don't create it since the user might end up
+            # running ``sudo make install`` and creating the directory here won't
+            # leave it with the proper permissions.
+            if not os.path.exists(sys.prefix):
+                return
+            macostools.mkalias(test_support.TESTFN, TESTFN2, sys.prefix)
+            fss, _, _ = Carbon.File.ResolveAliasFile(TESTFN2, 0)
+            self.assertEqual(fss.as_pathname(), os.path.realpath(test_support.TESTFN))
 
 
 def test_main():
