[llvm-bugs] [Bug 45521] New: [c++17] can't implicitly cast lvalue to rvalue with this cast kind

via llvm-bugs llvm-bugs at lists.llvm.org
Mon Apr 13 15:23:30 PDT 2020


https://bugs.llvm.org/show_bug.cgi?id=45521

            Bug ID: 45521
           Summary: [c++17] can't implicitly cast lvalue to rvalue with
                    this cast kind
           Product: clang
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++17
          Assignee: unassignedclangbugs at nondot.org
          Reporter: dimitry at andric.com
                CC: blitzrakete at gmail.com, erik.pilkington at gmail.com,
                    llvm-bugs at lists.llvm.org, richard-llvm at metafoo.co.uk

As reported in https://bugs.freebsd.org/245530, compiling ceph-master with
recent clang results in:

can't implicitly cast lvalue to rvalue with this cast kind
UNREACHABLE executed at
/usr/srcs/head/src/contrib/llvm-project/clang/lib/Sema/Sema.cpp:538!
Stack dump:
0.      Program arguments: /usr/bin/c++ -Wall -fno-strict-aliasing
-fsigned-char -Wtype-limits -Wignored-qualifiers -Wpointer-arith
-Werror=format-security -Winit-self -Wno-unknown-pragmas -Wno-unused-function
-Wno-unused-local-typedef -Wno-varargs -Wno-gnu-designator -Wno-missing-braces
-Wno-parentheses -Wno-deprecated-register -Wno-unknown-pragmas
-Wno-non-virtual-dtor -Wno-ignored-qualifiers -ftemplate-depth-1024
-Wpessimizing-move -Wredundant-move -Wno-inconsistent-missing-override
-Wno-mismatched-tags -Wno-unused-private-field -Wno-address-of-packed-member
-fdiagnostics-color=auto -fno-builtin-malloc -fno-builtin-calloc
-fno-builtin-realloc -fno-builtin-free -O0 -g -fPIC -std=c++17
-DCEPH_DATADIR="/usr/local/share/ceph" -DCEPH_LIBDIR="/usr/local/lib"
-DCEPH_PKGLIBDIR="/usr/local/lib/ceph" -D_FILE_OFFSET_BITS=64
-I/home/jenkins/workspace/ceph-master/build/src/include
-I/home/jenkins/workspace/ceph-master/src -isystem /usr/local/include -isystem
/home/jenkins/workspace/ceph-master/build/include -isystem
/home/jenkins/workspace/ceph-master/src/xxHash -isystem
/home/jenkins/workspace/ceph-master/src/rapidjson/include -isystem
/home/jenkins/workspace/ceph-master/src/fmt/include -DCEPH_DEBUG_MUTEX
-D_GLIBCXX_ASSERTIONS -DHAVE_CONFIG_H -D__CEPH__ -D_REENTRANT -D_THREAD_SAFE
-D__STDC_FORMAT_MACROS -c -o CMakeFiles/common-common-objs.dir/config.cc.o
/home/jenkins/workspace/ceph-master/src/common/config.cc
1.      <eof> parser at end of file
2.      /usr/local/include/boost/variant/detail/apply_visitor_unary.hpp:66:1:
instantiating function definition 'boost::apply_visitor<(anonymous
namespace)::assign_visitor<ConfigValues>, boost::variant<long ConfigValues::*,
unsigned long ConfigValues::*, std::__1::basic_string<char> ConfigValues::*,
double ConfigValues::*, bool ConfigValues::*, entity_addr_t ConfigValues::*,
entity_addrvec_t ConfigValues::*, uuid_d ConfigValues::*> &>'
3.      /usr/local/include/boost/variant/variant.hpp:2384:5: instantiating
function definition 'boost::variant<long ConfigValues::*, unsigned long
ConfigValues::*, std::__1::basic_string<char> ConfigValues::*, double
ConfigValues::*, bool ConfigValues::*, entity_addr_t ConfigValues::*,
entity_addrvec_t ConfigValues::*, uuid_d ConfigValues::*>::apply_visitor<const
(anonymous namespace)::assign_visitor<ConfigValues> >'
4.      /usr/local/include/boost/variant/variant.hpp:2344:5: instantiating
function definition 'boost::variant<long ConfigValues::*, unsigned long
ConfigValues::*, std::__1::basic_string<char> ConfigValues::*, double
ConfigValues::*, bool ConfigValues::*, entity_addr_t ConfigValues::*,
entity_addrvec_t ConfigValues::*, uuid_d
ConfigValues::*>::internal_apply_visitor<boost::detail::variant::invoke_visitor<const
(anonymous namespace)::assign_visitor<ConfigValues>, false> >'
5.      /usr/local/include/boost/variant/variant.hpp:2319:5: instantiating
function definition 'boost::variant<long ConfigValues::*, unsigned long
ConfigValues::*, std::__1::basic_string<char> ConfigValues::*, double
ConfigValues::*, bool ConfigValues::*, entity_addr_t ConfigValues::*,
entity_addrvec_t ConfigValues::*, uuid_d
ConfigValues::*>::internal_apply_visitor_impl<boost::detail::variant::invoke_visitor<const
(anonymous namespace)::assign_visitor<ConfigValues>, false>, void *>'
6.      /usr/local/include/boost/variant/detail/visitation_impl.hpp:194:1:
instantiating function definition
'boost::detail::variant::visitation_impl<mpl_::int_<0>,
boost::detail::variant::visitation_impl_step<boost::mpl::l_iter<boost::mpl::l_item<mpl_::long_<8>,
long ConfigValues::*, boost::mpl::l_item<mpl_::long_<7>, unsigned long
ConfigValues::*, boost::mpl::l_item<mpl_::long_<6>,
std::__1::basic_string<char> ConfigValues::*,
boost::mpl::l_item<mpl_::long_<5>, double ConfigValues::*,
boost::mpl::l_item<mpl_::long_<4>, bool ConfigValues::*,
boost::mpl::l_item<mpl_::long_<3>, entity_addr_t ConfigValues::*,
boost::mpl::l_item<mpl_::long_<2>, entity_addrvec_t ConfigValues::*,
boost::mpl::l_item<mpl_::long_<1>, uuid_d ConfigValues::*, boost::mpl::l_end> >
> > > > > > >, boost::mpl::l_iter<boost::mpl::l_end> >,
boost::detail::variant::invoke_visitor<const (anonymous
namespace)::assign_visitor<ConfigValues>, false>, void *, boost::variant<long
ConfigValues::*, unsigned long ConfigValues::*, std::__1::basic_string<char>
ConfigValues::*, double ConfigValues::*, bool ConfigValues::*, entity_addr_t
ConfigValues::*, entity_addrvec_t ConfigValues::*, uuid_d
ConfigValues::*>::has_fallback_type_>'
7.      /usr/local/include/boost/variant/detail/visitation_impl.hpp:138:1:
instantiating function definition
'boost::detail::variant::visitation_impl_invoke<boost::detail::variant::invoke_visitor<const
(anonymous namespace)::assign_visitor<ConfigValues>, false>, void *, long
ConfigValues::*, boost::variant<long ConfigValues::*, unsigned long
ConfigValues::*, std::__1::basic_string<char> ConfigValues::*, double
ConfigValues::*, bool ConfigValues::*, entity_addr_t ConfigValues::*,
entity_addrvec_t ConfigValues::*, uuid_d ConfigValues::*>::has_fallback_type_>'
8.      /usr/local/include/boost/variant/detail/visitation_impl.hpp:105:1:
instantiating function definition
'boost::detail::variant::visitation_impl_invoke_impl<boost::detail::variant::invoke_visitor<const
(anonymous namespace)::assign_visitor<ConfigValues>, false>, void *, long
ConfigValues::*>'
9.      /usr/local/include/boost/variant/variant.hpp:1026:85: instantiating
function definition 'boost::detail::variant::invoke_visitor<const (anonymous
namespace)::assign_visitor<ConfigValues>, false>::internal_visit<long
ConfigValues::*&>'
10.     /home/jenkins/workspace/ceph-master/src/common/config.cc:1496:8:
instantiating function definition '(anonymous
namespace)::assign_visitor<ConfigValues>::operator()'
#0 0x0000000003e068fe PrintStackTrace
/usr/srcs/head/src/contrib/llvm-project/llvm/lib/Support/Unix/Signals.inc:564:13
#1 0x0000000003e04a85 RunSignalHandlers
/usr/srcs/head/src/contrib/llvm-project/llvm/lib/Support/Signals.cpp:69:18
#2 0x0000000003e08a0e HandleCrash
/usr/srcs/head/src/contrib/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:77:5
#3 0x0000000003e08b91 CrashRecoverySignalHandler
/usr/srcs/head/src/contrib/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:0:51
#4 0x000000080502e990 handle_signal
/usr/srcs/head/src/lib/libthr/thread/thr_sig.c:0:3


Reduced test case:

// clang -cc1 -triple x86_64-- -S -std=c++17 config-min.cpp
template <class a> struct b { typedef a c; };
template <class a> struct B { typedef a const &d; };
template <class a> struct e : b<B<a>>::c { e(typename B<a>::d); };
template <class a> void ab(e<a> const &);
template <typename> struct f;
template <typename g> struct h {
  typedef typename g::al ao;
  typedef typename f<ao>::template m<g>::c c;
};
template <typename a> struct n {
  typedef int al;
  typedef n;
  typedef a ar;
};
template <typename as> struct o { typedef typename as::ar c; };
template <> struct f<int> {
  template <typename au> struct m { typedef o<au> c; };
};
template <typename av, typename> struct p : n<av> {};
namespace bf {
template <typename... a> struct q { typedef p<a...> c; };
template <typename bi> struct r { typedef typename bi::c c; };
template <typename bk, typename bl, typename a> void bm(bk bn, bl, a *) {
  a bo;
  bn.i(bo, 0);
}
template <typename bk, typename bl, typename a, typename j>
void bp(bk bn, bl br, a k, j) {
  bm(bn, 0, k);
}
template <typename bs, typename bt, typename bk, typename bl, typename j>
void bu(bk bn, bl br, j bv, bs, bt *) {
  bp(bn, 0, static_cast<typename bt::c *>(0), 0);
}
} // namespace bf
template <typename bk, typename by> void bz(bk bn, by) { by().bz(bn); }
namespace bf {
template <typename bk> struct ca {
  bk cb;
  ca(bk bn) : cb(bn) {}
  template <typename a> void i(a cc, int) { cb(cc); }
};
} // namespace bf
template <typename cd, typename... ce> struct s {
  template <typename bk, typename bl> void ck(bk bn, bl br) {
    bu(bn, 0, 0, 0,
       static_cast<bf::r<typename h<typename bf::q<cd, ce...>::c>::c> *>(0));
  }
  template <typename bk> void cl(bk bn) { ck(bn, 0); }
  template <typename bk> void bz(bk bn) {
    bf::ca invoker(bn);
    cl(invoker);
  }
};
struct co;
template <class cp> struct cq {
  cq(cp *, int);
  template <typename a> void operator()(a cp::*cr) { ab<const a cp::*>(cr); }
};
void cs(co &ct, s<int co::*, int> cu) {
  int l;
  bz(cq(&ct, 0), cu);
}

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20200413/6b400001/attachment-0001.html>


More information about the llvm-bugs mailing list