<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/62397>62397</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Declaring the same structure in anonymous spaces in two different files will result in an error in the link
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          4465464
      </td>
    </tr>
</table>

<pre>
    The anonymous space in the first file has a structure valid_ table_ filter:
namespace {
// Returns true if the mask is true for index i in at least keep_threshold
// columns
struct valid_table_filter {
  __device__ inline bool operator()(cudf::size_type i)
  {
    auto valid = [i](auto column_device_view) { return column_device_view.is_valid(i); };

    auto count =
      thrust::count_if(thrust::seq, keys_device_view.begin(), keys_device_view.end(), valid);

    return (count >= keep_threshold);
  }

  valid_table_filter()  = delete;
  ~valid_table_filter() = default;

  valid_table_filter(cudf::table_device_view const& keys_device_view,
                     cudf::size_type keep_threshold)
    : keep_threshold(keep_threshold), keys_device_view(keys_device_view)
  {
  }

 protected:
  cudf::size_type keep_threshold;
  cudf::size_type num_columns;
  cudf::table_device_view keys_device_view;
};
}  // namespace

The anonymous space in the second file also has a struct valid_table_ filter:
namespace {
struct valid_table_filter {
  __device__ inline bool operator()(cudf::size_type i)
  {
    auto valid = [i](auto col_device_view) {
      return cudf::type_dispatcher(
        col_device_view.type(), dispatch_is_not_nan{}, col_device_view, i);
    };

    auto count =
      thrust::count_if(thrust::seq, keys_device_view.begin(), keys_device_view.end(), valid);

    return (count >= keep_threshold);
  }

  valid_table_filter()  = delete;
  ~valid_table_filter() = default;

  valid_table_filter(cudf::table_device_view const& keys_device_view,
                     cudf::size_type keep_threshold)
    : keep_threshold(keep_threshold), keys_device_view(keys_device_view)
  {
  }

 protected:
  cudf::size_type keep_threshold;
  cudf::size_type num_columns;
  cudf::table_device_view keys_device_view;
};

}  // namespace


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsVsuSqzYQ_Rp503VdjHgYFizs8fUHpLKnBGqMMkIieszEWeTbUzw8BsMkWWYxbKhSv45Ot041s1ZcFWJO4hOJzzvmXaNNHkVJHCXRrtT8lv_aIDCl1a3V3oLtWIUgFLgGoRbGOqiFRGiYBQbWGV85bxDemRS8AMdKiUXv4tCQnxdyeiXZkQRnEhwVa3FMRw6n8YjQC6EX-AWdN8qCMx5B1EOtltk3ENNZrQ0IxfEPED0W5kAisw7eELvCNQZtoyVf5Ky09K2y49mIcwI5YhwhPqAAFAXHd1FhUYBQUiiEUmsJukPDnDaEpoRmhKaV5zUJjyQ8WvEnFu7WIYjeNOWZpQRg3umxLpDwDCQ-CRKfCU0HwwjyXvdd4AehWZ8AzEDJhsNe2GLIR2g6VA1PQA5nEt4pXZautFeuL_04B3CN8daNdxgcClETms6PLf5O6Cu84c0uqpd4FepOxYYdFX9YJ5zZBrjpfj2dE8KfPT9PDZ2FwnDLRZZ1O8fSMFDNUaLDWfxfX_qP7jXz0q2gbgY9RmA0zBiASivrCE1W3BD6Om_C07c1VWs2PuNJeFyZ07X_RosGv-ejreF95rsz2mHlkPcwJ5__gPrRgC1n5dvi_lS3PNf8rsB_dmz-Cg5ngEkJPnVnfpt_UDmLlVZ8lDkmrV5o3WIe7joXfq1w_2Pl2ZCd-XzeFejRiluHBRe2Y65qxrezGOenlPve_6EF98BC2EJpVyim-oKHc29coXkFsXz88C1y3yL3LXLH9Sv4V6nb8TzkWZixHeYvSUrjJIzTeNfkZfbC8YWVQXVI4prVrOIswBB5HVIah3wnchrQMIjoIaBRQuN9yaukTuPqwF-yKE5SEgXYMiH3Ur63e22uO2GtxzyhYXbYSVaitMOuSanCDxiMhNJ-9TR5H_Oj9FdLokAK6-wjixNOYn7GSjIj1HWUZdbibOHs18ClfttBwD80cFHXaFCNq6qFDyElGLReujEM0JhhoxwSS6Hedt7IvHGus31HBjKvwjW-3Fe6JfTSI5t-Pzqjf8PKEXoZ7mMJvQz3_TsAAP__J_qL-w">