| Issue |
60653
|
| Summary |
Nvcc can be compiled using the -- expt-relaxed-constexpr option, and clang will report an error. I don't know if there is a corresponding option to compile this case
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
4465464
|
#include<bits/stdc++.h>
#include "cuda_runtime.h"
namespace cuco{
namespace detail{
template <typename viewT>
__global__ void insert(viewT view){
view.insert();
}
}
template <typename Key>
class static_multimap{
public:
~static_multimap()=default;
static_multimap(){
}
void insert(){
auto view = get_device_mutable_view();
detail::insert<<<1,1,0>>>(view);
}
static constexpr bool uses_vector_load() noexcept{
return false;
}
class device_view_impl_base;
class device_mutable_view_impl;
template <typename ViewImpl>
class device_view_base{
protected:
__host__ __device__ device_view_base() noexcept:impl_{}{
}
protected:
ViewImpl impl_;
}; //class device_view_base
class device_mutable_view:public device_view_base<device_mutable_view_impl>{
public:
__host__ __device__ device_mutable_view() noexcept{
}
__device__ __forceinline__ void insert() noexcept;
private:
using device_view_base<device_mutable_view_impl>::impl_;
}; //class device mutable view
device_mutable_view get_device_mutable_view() const noexcept{
return device_mutable_view();
}
};
template <typename Key>
__device__ __forceinline__ void
static_multimap<Key>::device_mutable_view::insert() noexcept{
impl_.insert<uses_vector_load()>(23);
}
template <typename Key>
class static_multimap<Key>::device_view_impl_base{
protected:
static constexpr bool uses_vector_load() noexcept{
return false;
}
__host__ __device__ device_view_impl_base() noexcept{
}
}; //class device_view_impl_base
template <typename Key>
class static_multimap<Key>::device_mutable_view_impl:public device_view_impl_base{
public:
__host__ __device__ device_mutable_view_impl() noexcept : device_view_impl_base{}{}
template <bool uses_vector_load>
__device__ __forceinline__ std::enable_if_t<uses_vector_load,void> insert(int a) noexcept{}
template <bool uses_vector_load>
__device__ __forceinline__ std::enable_if_t<not uses_vector_load,void> insert(int a) noexcept{}
}; //class device_mutable_view_impl
} //namespace cuco
template<typename TestType>
void test_cuco(){
cuco::static_multimap<int> map{};
map.insert();
}
int main(){
test_cuco<int64_t>();
}
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs