Index: subversion/libsvn_wc/update_editor.c
===================================================================
--- subversion/libsvn_wc/update_editor.c	(revision 32393)
+++ subversion/libsvn_wc/update_editor.c	(working copy)
@@ -1084,19 +1084,16 @@
     if (tmp_err->apr_err == SVN_ERR_WC_LEFT_LOCAL_MOD)
       break;
 
-  /* If we found a "left a local mod" error, wrap and return it.
-     Otherwise, we just return our top-most error. */
+  /* If we found a "left a local mod" error, tolerate it
+     and clear the whole error. In that case we continue with
+     modified files left on the disk. */
   if (tmp_err)
     {
-      /* Remove the LOGFILE (and eat up errors from this process). */
-      svn_error_clear(svn_io_remove_file(logfile, pool));
-
-      return svn_error_createf
-        (SVN_ERR_WC_OBSTRUCTED_UPDATE, tmp_err,
-         _("Won't delete locally modified directory '%s'"),
-         svn_path_local_style(path, pool));
+      svn_error_clear(err);
+      return SVN_NO_ERROR;
     }
 
+  /* Otherwise, we just return our top-most error. */
   return err;
 }
 
@@ -1177,7 +1174,7 @@
                    (child_access,
                     SVN_WC_ENTRY_THIS_DIR,
                     TRUE, /* destroy */
-                    TRUE, /* instant error */
+                    FALSE, /* instant error */
                     eb->cancel_func,
                     eb->cancel_baton,
                     pool),
Index: subversion/tests/cmdline/switch_tests.py
===================================================================
--- subversion/tests/cmdline/switch_tests.py	(revision 32393)
+++ subversion/tests/cmdline/switch_tests.py	(working copy)
@@ -2108,6 +2108,53 @@
                                         expected_disk,
                                         expected_status)
 
+#----------------------------------------------------------------------
+# Make sure that switch continue after deleting locally modified
+# directories, as it update and merge do.
+
+def tolerate_local_mods(sbox):
+  "tolerate deletion of a directory with local mods"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  A_path = os.path.join(wc_dir, 'A')
+  L_path = os.path.join(A_path, 'L')
+  LM_path = os.path.join(L_path, 'local_mod')
+  A_url = sbox.repo_url + '/A'
+  A2_url = sbox.repo_url + '/A2'
+
+  svntest.actions.run_and_verify_svn(None,
+                                     ['\n', 'Committed revision 2.\n'], [],
+                                     'cp', '-m', 'make copy', A_url, A2_url)
+
+  os.mkdir(L_path)
+  svntest.main.run_svn(None, 'add', L_path)
+  svntest.main.run_svn(None, 'ci', '-m', 'Commit added folder', wc_dir)
+
+  # locally modified unversioned file
+  svntest.main.file_write(LM_path, 'Locally modified file.\n', 'w+')
+
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/L' : Item(status='D '),
+    })
+
+  expected_disk = svntest.main.greek_state.copy()
+  expected_disk.add({
+    'A/L' : Item(),
+    'A/L/local_mod' : Item(contents='Locally modified file.\n'),
+    })
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
+  expected_status.tweak('', 'iota', wc_rev=1)
+  expected_status.tweak('A', switched='S')
+
+  # Used to fail with locally modified or unversioned files
+  svntest.actions.run_and_verify_switch(wc_dir, A_path, A2_url,
+                                        expected_output,
+                                        expected_disk,
+                                        expected_status)
+
 ########################################################################
 # Run the tests
 
@@ -2142,6 +2189,7 @@
               switch_urls_with_spaces,
               switch_to_dir_with_peg_rev2,
               switch_to_root,
+              tolerate_local_mods,
              ]
 
 if __name__ == '__main__':
