Info-read-node-name is useful even when the current buffer is not an
Info buffer because it can be used to specify a file from which to read
Info node name completions, e.g. if you want to produce a link within an
Emacs Lisp file to a specific Info node.

Unfortunately, when this function is called outside of an Info buffer,
it produces an error when it calls `Info-build-node-completions' and
that calls `Info-build-node-completions-1' which fails to produce any
completions.  By wrapping that last call in a condition-case to catch
the error, the problem is solved and Info-read-node-name works properly
in any buffer.  At first, it will report there are no completions, then
when you specify an Info file, it will complete for that file as
desired.  For example, try the unpatched and then the patched code
in an Emacs Lisp buffer, evaluating this expression:

(Info-read-node-name "(File)Node: ")

The patch is included below.

Bob
--------

*** info-orig.el.gz 2016-06-27 15:57:29.000000000 -0400
--- info.el.gz 2016-06-27 15:57:29.000000000 -0400
***************
*** 1882,1888 ****
     (push (cons filename Info-current-file-completions) Info-file-completions)
     Info-current-file-completions))
      (or Info-current-file-completions
! (Info-build-node-completions-1))))
  
  (defun Info-build-node-completions-1 ()
    (let ((compl nil)
--- 1882,1890 ----
     (push (cons filename Info-current-file-completions) Info-file-completions)
     Info-current-file-completions))
      (or Info-current-file-completions
! (condition-case nil
!    (Info-build-node-completions-1)
!  (error nil)))))
  
  (defun Info-build-node-completions-1 ()
    (let ((compl nil)