diff --git a/src/pkg/syscall/syscall_windows.go b/src/pkg/syscall/syscall_windows.go
index e21415ea9c5641f64f705667bba8c3d15620756a..ee57f1d0190b9f3eea865e03f715728c59bcd716 100644
--- a/src/pkg/syscall/syscall_windows.go
+++ b/src/pkg/syscall/syscall_windows.go
@@ -84,9 +84,10 @@ func (e Errno) Error() string {
 	b := make([]uint16, 300)
 	n, err := FormatMessage(flags, 0, uint32(e), langid(LANG_ENGLISH, SUBLANG_ENGLISH_US), b, nil)
 	if err != nil {
-		// TODO(brainman): Call FormatMessage again asking for "native" error message.
-		// http://code.google.com/p/go/issues/detail?id=3376 must be resolved first.
-		return "winapi error #" + itoa(int(e))
+		n, err = FormatMessage(flags, 0, uint32(e), 0, b, nil)
+		if err != nil {
+			return "winapi error #" + itoa(int(e))
+		}
 	}
 	// trim terminating \r and \n
 	for ; n > 0 && (b[n-1] == '\n' || b[n-1] == '\r'); n-- {