Hi,
yes, since SparseLU is for general square problems, you need to build a full version explicitly using A.selfadjointView<Upper>(). Note that Upper is a template parameter, not an argument of the method.
On the other hand, solvers specialized for self-adjoint problems (e.g., Simplicial*, ConjugateGradient) read only the triangular part as specified by their 2nd template argument. For them, calling sefladjointView is thus not required, and even counter productive. Here is an example:
ConjugateGradient<SparseMatrix<double>, Upper> cg;
cg.compute(A);
cheers,
Gaël