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

    <tr>
        <th>Summary</th>
        <td>
            [C++17] boost/url, Assertion failed: (isa<To>(Val) && "cast<Ty>() argument of incompatible type!"), function cast, file llvm/include/llvm/Support/Casting.h, line 579.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            c++17,
            clang:frontend,
            new issue
      </td>
    </tr>

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

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

<pre>
    As reported in https://bugs.freebsd.org/269067, compiling boost 1.81.0 using clang with assertions enabled, results in an assertion while compiling `boost_1_81_0/libs/url/src/src.cpp`:

```text
Starting program: /home/dim/ins/llvmorg-15-init-00019-g9d6a6159730/bin/clang -cc1 -triple x86_64-unknown-freebsd14.0 -emit-obj --mrelax-relocations -disable-free -clear-ast-before-backend -main-file-name src.cpp -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -mframe-pointer=all -relaxed-aliasing -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debugger-tuning=gdb -fcoverage-compilation-dir=/usr0/freebsd/ports/work/usr/ports/devel/boost-libs/work/boost_1_81_0 -D LIBICONV_PLUG -D LIBICONV_PLUG -D LIBICONV_PLUG -D BOOST_ALL_NO_LIB=1 -D BOOST_URL_DYN_LINK=1 -D BOOST_URL_SOURCE -D NDEBUG -O3 -Wall -Wno-inline -std=gnu++17 -fdeprecated-macro -fdebug-compilation-dir=/usr0/freebsd/ports/work/usr/ports/devel/boost-libs/work/boost_1_81_0 -ferror-limit 19 -fvisibility hidden -fvisibility-inlines-hidden -pthread -stack-protector 2 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -vectorize-loops -vectorize-slp -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -x c++ src-ba0416.cpp
Assertion failed: (isa<X>(Val) && "cast<Ty>() argument of incompatible type!"), function cast, file /home/dim/src/llvm/llvm-project/llvm/include/llvm/Support/Casting.h, line 269.

Program received signal SIGABRT, Aborted.
Sent by thr_kill() from pid 88589 and user 1236.
thr_kill () at thr_kill.S:4
4 thr_kill.S: No such file or directory.
(gdb) bt
#0  thr_kill () at thr_kill.S:4
#1  0x0000000806a469c4 in __raise (s=s@entry=6) at /usr/src/lib/libc/gen/raise.c:52
#2  0x0000000806af7779 in abort () at /usr/src/lib/libc/stdlib/abort.c:67
#3  0x0000000806a297a1 in __assert (func=<optimized out>, file=<optimized out>, line=<optimized out>, failedexpr=<optimized out>) at /usr/src/lib/libc/gen/assert.c:51
#4 0x000000000529a5e8 in clang::Sema::BuildDelegatingInitializer(clang::TypeSourceInfo*, clang::Expr*, clang::CXXRecordDecl*) ()
#5  0x0000000005299ec9 in clang::Sema::BuildBaseInitializer(clang::QualType, clang::TypeSourceInfo*, clang::Expr*, clang::CXXRecordDecl*, clang::SourceLocation) ()
#6 0x00000000052988d8 in clang::Sema::BuildMemInitializer(clang::Decl*, clang::Scope*, clang::CXXScopeSpec&, clang::IdentifierInfo*, clang::OpaquePtr<clang::QualType>, clang::DeclSpec const&, clang::SourceLocation, clang::Expr*, clang::SourceLocation) ()
#7 0x000000000529934d in clang::Sema::ActOnMemInitializer(clang::Decl*, clang::Scope*, clang::CXXScopeSpec&, clang::IdentifierInfo*, clang::OpaquePtr<clang::QualType>, clang::DeclSpec const&, clang::SourceLocation, clang::SourceLocation, llvm::ArrayRef<clang::Expr*>, clang::SourceLocation, clang::SourceLocation) ()
#8  0x0000000004f81a04 in clang::Parser::ParseMemInitializer(clang::Decl*) ()
#9  0x0000000004f80e0c in clang::Parser::ParseConstructorInitializer(clang::Decl*) ()
#10 0x0000000004f6540f in clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) ()
#11 0x0000000004f9a164 in clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::SourceLocation*, clang::Parser::ForRangeInit*) ()
#12 0x0000000004f645b0 in clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec&, clang::AccessSpecifier) ()
#13 0x0000000004f64072 in clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*, clang::AccessSpecifier) ()
#14 0x0000000004f629fd in clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) ()
#15 0x0000000004f6f1a1 in clang::Parser::ParseInnerNamespace(llvm::SmallVector<clang::Parser::InnerNamespaceInfo, 4u> const&, unsigned int, clang::SourceLocation&, clang::ParsedAttributes&, clang::BalancedDelimiterTracker&) ()
#16 0x0000000004f6e961 in clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&, clang::SourceLocation) ()
#17 0x0000000004f935a9 in clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributesWithRange&, clang::SourceLocation*) ()
#18 0x0000000004f6214f in clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) ()
#19 0x0000000004f6f1a1 in clang::Parser::ParseInnerNamespace(llvm::SmallVector<clang::Parser::InnerNamespaceInfo, 4u> const&, unsigned int, clang::SourceLocation&, clang::ParsedAttributes&, clang::BalancedDelimiterTracker&) ()
#20 0x0000000004f6e961 in clang::Parser::ParseNamespace(clang::DeclaratorContext, clang::SourceLocation&, clang::SourceLocation) ()
#21 0x0000000004f935a9 in clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributesWithRange&, clang::SourceLocation*) ()
#22 0x0000000004f6214f in clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&, clang::ParsingDeclSpec*) ()
#23 0x0000000004f60874 in clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool) ()
#24 0x0000000004f5a78d in clang::ParseAST(clang::Sema&, bool, bool) ()
#25 0x0000000004671fc3 in clang::FrontendAction::Execute() ()
#26 0x00000000045fc869 in clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) ()
#27 0x0000000004723621 in clang::ExecuteCompilerInvocation(clang::CompilerInstance*) ()
#28 0x000000000202682d in cc1_main(llvm::ArrayRef<char const*>, char const*, void*) ()
#29 0x000000000202408a in ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) ()
#30 0x0000000002023e12 in main ()
```

Minimized test case:

```c++
// clang -cc1 -triple x86_64-- -S -O0 -std=c++17 boost-url-min.cpp

namespace urls {
struct segments_view {
 segments_view();
};
struct segments_encoded_view {
  operator segments_view();
} __trans_tmp_1;
segments_view::segments_view() : segments_view(__trans_tmp_1) {}
} // namespace urls
```

This reproduces with both the oldest and the newest versions of clang that I have, so it is a very long standing bug. It is also specifically C++17 related, since using `-std=c++11` or `-std=c++14` makes the assertion disappear.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWltz4zay_jX0CwoqEpQo8sEPsmTNcR1nPGfszOQ8qUCwSSEDAlwA9CW_fgsgdSElX5JNpVK7m0pprAbR3V_f0GCLGsMrCXAZzK6C2eqCtnar9OWK19zql4UsNGcXuSpeLhcGaWiUtlAgLtHW2sYE8SIg64Cs87Yyk1ID5KaYKF0FZE2SLEzmAVkipuqGCy4rlCtlLIomaTQJUWsciQkqK_TE7RZRY0BbrqRBIGkuoHC7NZhWWONkUnl4Bj1tuYAj3kESevabaJNGmzAga8FzE5B1q0VA1kaz7nPCmiZIQqd6uArC3WcSdv9beLYd6d5SbR3nRqtK0zqIFygg662qISDrgtcBWXPpJAjxWCtd4WiGueQWh2EYZbjKioQm0Sybx06bnMuArDu4mLEIYat5IwA9p8kmmeJW_pDqSeLeitF0EiIMNbdY5b8ijGsNgj5jDUIx2lkJF9w4O_k9CDMBVGNqLM6hVBpwTtkPkAXCNeUSl1wAlrQG1FsBeZ49N1yrAgRqOEO44QwLeASBCMLllooSS4UN1FRazjCXFnSjDPd-wHWpaQ24UZ4exCsqBMJeWygwFZx6R-OybDBT0mrKbBCv3NZSKqxVKwsuK1xTu0W4Zkoaq1tmle42g0G4bOUTlwW2Dq4J4hVB2FJdgcWsaZ0JcTJF2LYSPKECCdpBqZ1vnKmBWmwYFZ29uFMNtHYyDH6iWnoVC8jbqgLtGHFZBfGqKnKES6YeQdMKcBduncEK7sC6ADPaObh3XEDWLktcXDwp_aNbPyIWzrAuHlyw4j5G-yePAxjhFbq9ubpZ3n3-tvly-_OnjxGu7u7uHzaL29vN57vN7c1VEK-iA_3nr7eb1f9_3tzefP7f05X7u5-_Lq8d7fPq-srxu4sR_u79-V0qzKXgEhA2tnCmkW1ArgJyFc0RLgtoNDBqocA1ZVp5Ut5Wf63Jys6nwpUvFGUIl4_c8JwLbl_QlhcFyAGth2Twbq2xWw20cBgp-4EbrSy4UPSZUMmW4UfQhisZxKvphEwiFx3PzxieGTR9VpbHXx79dv4bYKFUMyAY0SBc0qLQhlcIrzabT8vl5n8W3643q--Lr2uyWa5vNov7nzpPPSPW2dvlL85pOI0SX8x8tVrsC2NJuSudvlql3NAgXv4SxNcBSb9REZAMBSQJSIICQhg1NoiXDy_dulukumprkBapEnHpnEctzwUg-9JAQKKAkIBkrjCXrWReoOfiCK4gjytkV3ddFvb_OJv-CsweqFwy0RZwINy3jXN9QNZLalwJnmwdfx98JMkmx4X7S1eckQYG_BEK5M4zKtD9zafF1dcHt2-R-1Or33bvwOUvyG715gcXosddalWjhhcoTWdphqgsUGtAo4jESb9ztwPtTGX3TCb3QbyYdo9Nh1T0WSHTsm1nHqVRwbUPgZcdDpJWRe4Y5nZHiUOEPiguIHGEUPgcdv-lYUKnScam7sDcbDTlxjkldUXTBNMQpNUvQbxKepb7ZOsdxfPu032pwB1ZnsWEBfFiRvYiyUhkOZ_PM39GO2MfqfwWf2OL7rvf5EUk872IeCSCZHMadai6LsBJcUHoSkq8VI3lNf8NCqRa6-O5i8jXV108vbHXpxE8N_q1Zz5ov07ZzoDRHt30AC4MZySjM0gdON8guOYkXtxDTbu_rlouihUIqKhLhxvJLaeC_wY6IOnRjoeXBu5VqxncyFIFZOHbr8P6tUNzQl3-8stXYEoXK2DCL2e9A_faztBI3QxY9ra6V9TAq4r-X0vFgy8oA03-LP0Hyx3D277POQMuGWFL0-IdV_wE9avQXlGCKYf2jOp-5b4B5svyYPWmAGl5yUGfN8ddQ__Rwherg3h5zrhdII90c6KQb7JOBY5N9QHjv2vd-Thy4mnxqnUXzN7J_0jrni76w7Czitb05SuUQ0V2_jjR43fJOfFXOkj1aZlGNJyOHPaFauNa_f3fH3LZiahsLCqEkL0nanm4H_wBkVE4FJnMpmH5nsh13-msoHT3O2-3dLSBy8pJpZpapU99f8KzeIC6EdT6SvdaxBzvuqUWup0La_Utd8-fRRgNEWY0St71n1P9k1Zt8yqw8zl0gLxU0l-d3462cY4dK7JW-iuVlT80XoFGRs6bzvLwI9Du9JELb9w1VbpWeAy1My3PWwvmO7dbr855r7xplQVjYIxb8-XlHJJ4jCSck48gccbmSg4AvRqTfxTP2EsfwDMd4SFZOa7yJ3iunztHHOH6UzGcajkbaVlGXUf5lpY3UoL-TGswDWUQkPRQl-9rKsQ338wPS_Mxk-H-7qhZomkbxNeDtG-lfxPnrPZeFp0tE0d2On3iigoqGbge0l2NQT9oyn5AV6hO7ZSM7ARZ8q6djk30L1SI9w7NU2Xno3oXz-i4NX0rlf5cdX9HyJ6pjafg0nFeRdN3j6u_Pq-y_-bVR_KKjJuPv3NekXEf8e-UV2TcSfwt84qMu4Qwnb_byj2o5hYeQXQ9cPr-hWbf-_kbxnWva66UOKfS6KCf0Xl69qBf3D8MpftL3jHv12UMj-lkHpUsHslYaxdGslj4Jmh3IQLWWujfPY2ZDs-0WcnSZBzOS_-q2t0HjXVpPWDbSxpgGmlxPumH59OcxAkZJ30v4iD_cR-96Vv6nY-awZlBQpKkpHMRizY15XJQa4_vlluqd6Vzf60c0MgSPSpevCI3G8mdhil1cnfoltGDd_j5Sn9TN-KsEueMGocjWTFEvn92-IYP7wZ7xy-Nf-Kyf5dnwVjEqPG-PjcP7N-57ySvA7JGrw_xMML3CN-FuxkJ209IutlFqwWuuTy8tu8-5a7Go1YLg4J5L6-76CIDVQ3Sms0jh6fD6pDeg453qs5X-7_HbEAyVUAxZodUA75Ev8cYbTZWU2k2tm420UHMYJf37xlGKIhPNR8ydA_NrxyCvcTe8kNDveHhhy3382qtipaB6QbMubJbZLeAlCic36ks_FcJT-5rP9kxSJW9i-2WWnSDtvTRv6k0CnGLuEHUPfuChJIVcqlY-OF2W03QTbcujEKmuy8xKsQLWu4DQYO79fvRtuHSITH9-HoUM1GQhEjpMytTt1LTH2C8-oeZeMENbRqguh8tXBSXcZHFGb2AyyiZT-MwyZL5xfaSToscivksSedZHEYFocU0pkkW5YTMszS84JcuqcKIRFEcJeF8EqYFSVk-m85m0-lsBsE0hJpyMXHJPFG6uuDGtHCZhFFKLgTNQRj_owJC9kngZ0dLR-lrWtnXz_2ChCfk-TjKbHWhL_3IKG8rE0xDwY01B4GWW-F_uLA3bjBbdYm2G_sv0ZtzsQf11w3G_siwazbPJhetFpfDX1tU3G7bfMJU_epozRvRBGTt_fHPAAAA__8or2Vg">