Skip to content

reference and reference_omp grb::dot do not handle aliasing properly #387

@anyzelman

Description

@anyzelman

If the two inputs are the same vector, then we should not take restricted pointers from both-- yet the reference and reference_omp implementations presently do do that.

Possibly relatedly in the context of #379 , the internal CI emits a warning that may be indirectly related:

In file included from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas/internalops.hpp:29,
                 from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas/ops.hpp:30,
                 from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas.hpp:519,
                 from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/tests/smoke/conjugate_gradient.cpp:28:
/builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas/base/internalops.hpp: In function 'grb::RC grb::internal::dot_generic(OutputType&, const grb::Vector<InputType, grb::reference, Coords>&, const grb::Vector<MaskType, grb::reference, Coords>&, const AddMonoid&, const AnyOp&, const grb::Phase&) [with unsigned int descr = 0; AddMonoid = grb::Monoid<grb::operators::add<double, double, double, grb::hyperdags>, grb::identities::zero>; AnyOp = grb::operators::conjugate_left_mul<double, double, double, grb::hyperdags>; OutputType = double; InputType1 = double; InputType2 = double; Coords = grb::internal::Coordinates<grb::reference>]':
/builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas/base/internalops.hpp:2772:60: warning: 'yy[0]' may be used uninitialized in this function [-Wmaybe-uninitialized]
 2772 |        *c = grb::utils::is_complex< IN1 >::conjugate( *a ) * *b;
      |             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
In file included from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas/blas1.hpp:29,
                 from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas.hpp:538,
                 from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/tests/smoke/conjugate_gradient.cpp:28:
/builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas/reference/blas1.hpp:9400:27: note: 'yy[0]' was declared here
 9400 |        typename AnyOp::D2 yy[ AnyOp::blocksize ];
      |                           ^~
In file included from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas/internalops.hpp:29,
                 from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas/ops.hpp:30,
                 from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas.hpp:519,
                 from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/tests/smoke/conjugate_gradient.cpp:28:
/builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas/base/internalops.hpp:2772:60: warning: 'xx[0]' may be used uninitialized in this function [-Wmaybe-uninitialized]
 2772 |        *c = grb::utils::is_complex< IN1 >::conjugate( *a ) * *b;
      |             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
In file included from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas/blas1.hpp:29,
                 from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas.hpp:538,
                 from /builds/zrc-von-neumann-lab/spatial-computing/graphblas/tests/smoke/conjugate_gradient.cpp:28:
/builds/zrc-von-neumann-lab/spatial-computing/graphblas/include/graphblas/reference/blas1.hpp:9399:27: note: 'xx[0]' was declared here
 9399 |        typename AnyOp::D1 xx[ AnyOp::blocksize ];
      |                           ^~

The resolution/suppression of this warning I'll leave to this issue also

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions