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

    <tr>
        <th>Summary</th>
        <td>
            Unexpected AST for consteval constructor call
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          Abramo-Bagnara
      </td>
    </tr>
</table>

<pre>
    The presence of CXXFunctionalCastExpr is triggered by consteval, but I don't see any reason for that.

Note also how -ast-print is confused by that.

```
abramo@igor:/tmp$ cat p.cc
struct A {
  consteval A () {}
};

void f() {
  A{};
}
abramo@igor:/tmp$ clang++-16 -cc1 -std=c++20 -ast-print p.cc
p.cc:6:3: warning: expression result unused [-Wunused-value]
  A{};
  ^~~
struct A {
    consteval A() {
    }
};
void f() {
    AA{};
}
1 warning generated.
abramo@igor:/tmp$ clang++-16 -cc1 -std=c++20 -ast-dump p.cc
p.cc:6:3: warning: expression result unused [-Wunused-value]
  A{};
  ^~~
TranslationUnitDecl 0x55768bf3ce98 <<invalid sloc>> <invalid sloc>
|-TypedefDecl 0x55768bf3d720 <<invalid sloc>> <invalid sloc> implicit __int128_t '__int128'
| `-BuiltinType 0x55768bf3d460 '__int128'
|-TypedefDecl 0x55768bf3d798 <<invalid sloc>> <invalid sloc> implicit __uint128_t 'unsigned __int128'
| `-BuiltinType 0x55768bf3d480 'unsigned __int128'
|-TypedefDecl 0x55768bf3db50 <<invalid sloc>> <invalid sloc> implicit __NSConstantString '__NSConstantString_tag'
| `-RecordType 0x55768bf3d8a0 '__NSConstantString_tag'
|   `-CXXRecord 0x55768bf3d7f8 '__NSConstantString_tag'
|-TypedefDecl 0x55768bf3dbf8 <<invalid sloc>> <invalid sloc> implicit __builtin_ms_va_list 'char *'
| `-PointerType 0x55768bf3dbb0 'char *'
|   `-BuiltinType 0x55768bf3cf40 'char'
|-TypedefDecl 0x55768bf88910 <<invalid sloc>> <invalid sloc> implicit __builtin_va_list '__va_list_tag[1]'
| `-ConstantArrayType 0x55768bf888b0 '__va_list_tag[1]' 1 
|   `-RecordType 0x55768bf3dd00 '__va_list_tag'
|     `-CXXRecord 0x55768bf3dc58 '__va_list_tag'
|-CXXRecordDecl 0x55768bf88970 <p.cc:1:1, line:3:1> line:1:8 referenced struct A definition
| |-DefinitionData pass_in_registers empty standard_layout trivially_copyable literal has_user_declared_ctor has_constexpr_non_copy_move_ctor can_const_default_init
| | |-DefaultConstructor exists non_trivial user_provided constexpr defaulted_is_constexpr
| | |-CopyConstructor simple trivial has_const_param implicit_has_const_param
| | |-MoveConstructor exists simple trivial
| | |-CopyAssignment simple trivial has_const_param needs_implicit implicit_has_const_param
| | |-MoveAssignment exists simple trivial needs_implicit
| | `-Destructor simple irrelevant trivial constexpr
| |-CXXRecordDecl 0x55768bf88ab0 <col:1, col:8> col:8 implicit referenced struct A
| |-CXXConstructorDecl 0x55768bf88bf0 <line:2:3, col:19> col:13 used consteval A 'void ()' implicit-inline
| | `-CompoundStmt 0x55768bf88cc8 <col:18, col:19>
| |-CXXConstructorDecl 0x55768bf88f80 <line:1:8> col:8 implicit constexpr A 'void (const A &)' inline default trivial noexcept-unevaluated 0x55768bf88f80
| | `-ParmVarDecl 0x55768bf890a0 <col:8> col:8 'const A &'
| |-CXXConstructorDecl 0x55768bf89150 <col:8> col:8 implicit constexpr A 'void (A &&)' inline default trivial noexcept-unevaluated 0x55768bf89150
| | `-ParmVarDecl 0x55768bf89270 <col:8> col:8 'A &&'
| `-CXXDestructorDecl 0x55768bf893b0 <col:8> col:8 implicit referenced constexpr ~A 'void () noexcept' inline default trivial
`-FunctionDecl 0x55768bf88dc0 <line:5:1, line:7:1> line:5:6 f 'void ()'
  `-CompoundStmt 0x55768bf89500 <col:10, line:7:1>
    `-CXXFunctionalCastExpr 0x55768bf894d8 <line:6:3, col:5> 'A':'A' functional cast to A <NoOp>
      `-ConstantExpr 0x55768bf89348 <col:3, col:5> 'A':'A'
        |-value: Struct
        `-CXXTemporaryObjectExpr 0x55768bf89318 <col:3, col:5> 'A':'A' 'void ()' list
1 warning generated.
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzFWEuP4jgQ_jXhYgXlQR4cOPCYkfawM6Ptnt2-RY7jgFfBjmyHaf79lh0CIZBmmF1ppdDt-FH11VdVdjm5KI6L1x1FtaSKckKRKNH67e1zw4lmguNqjZX-9F5LxBTSkm23VNIC5UdEBFeaHnDlBGuUNxr9hgrBnSDRSFGKMD8iSbESHJVCIr3Deup4G8dbtn-_CA2TKiXQTvxALmhxa8m4NnpAdNmoVs3NQif2To99xbnEe-HMPLYV0gmXTvBZ72snmCGCNaqnhLTzlJYN0WiJnGTV9qCLCaY7SJ1gbkeTzUkTNMJVX_dBsAKVvaknQcvTsvPsTsQH6CrMt06wgsf1Y-QS4iNX6cIJN6TtDrw-LRdLbCtcxvAL4Yd-YMkZyIImfTd-VOA44F41lUYNt0Q60cr9q227YG9DnWgzBh7B7E9OYp9R6q7IuyUEZNxjcYw_ADFKod8ZiLaUU4k1Lab_HblFs6__T25fJeaqwibXvnOmN5RUyHuPoiRO8zIkdJ4iJ1zDwzjIBvZUJQDhJ3jQnd4TdWv39VjTgpYDeUUCdj8hD7F9XTHCNMoyCEI_SDMNmZJ0b9A8q0SQku6qYZVm3Gjvq53F3tiyUaTPWd5H2vShNlyxLQc3PY059R6uHwOfR79M85eXtUkszPULbLcQ9Za3YW-m8fbGkD8oEbIY2pFi7ydlICsFdv9W0JU3yvTnhIwyUv6yO_PWP9leZQecVUxZv5IdlvB_ecPCNwF-onJIQ557o8vQB3FAytl54WND03Tu_7LrO0N7Vmbdi-U5Wvlmbxla3HlkKSU-XsNP0zT3PhCEfDSk4X4UFd4dMdccfhA-JEo_XH1ZdUNnYuk87cu-_UG9UTFOT3u0b1g8vZvxFLbnEooUKGaA5e7oAk8x2F9hm-1xB4o35_4N1hjVWCnI80zSLcCkUiG6r_URGX4LLIuswkcBtQ7E_oHhqjpmRNRHnFcUIMB8OA13WGVwFsisAFMwFEsZ0VAAme72yIRzJOOC25XZXhxoO4Fg3k6AhSWG8yUzwK7QdojNqHW6MQ6W0ncAq5ARegKGLIJaigMrgIazYnSSDahYD8-tljWA66tQJk5pZ_fFmqzGcAifozgbDNwK_h0MvoP9Wv59PEtltuI9hWroARxOaQF-7FLrOXQ9NXfBDaQPhEAKbOiQNiYlraBW4ufIQfe5H08EnNtEIKLqcqBtpib8T83LZnInBW709LwwVJaXVtkpqwKbaWeN_vyi0g-RrYGuK-nE1nltmWc2mQ6Wy7gVecPYWuxr0fDiRe91Hwchac_odIDhGYvKtG-RP0rcJVOuDLHdtivubLKmdPl0iQ1B3wmttdtwQ0djytUBjlvzv2G5_xMPMc893HP5FVxzHvURJU9QMfejMbGPWDhp-3cUGP0_TUGQfEDBBc7wQHx7u-TgUGSYPzS_lz0XJqBkH8b22dRxNs53Vre7Ug8jsyD9yIwGJ1wyOOHMeIzK2yQ73y_G02keef09xLujpnd_a3m88yGgJ3BWpD3s8fU-EdmKB9xk0JnbmW2h8iwRjjwIYS1MkIXrL-JrfYUAXRU3Q9XhrLc1PNTal4psjrQ3NbjXvdg4GUxojX-Fw19ILI9f878puYXgPwPhzr5oSqFHl9zz544JXfhxDMkTxeF8UizCYh7O8UQzXdHFdw4xChAhYpcvr_aLy2VLJr3jlkDRMmlktdhpXav20gzPluldk0-J2MNLVR26fy6UEMZ0eGVKNVRBI0rCNJzsFmVRhuUsCoo4SHxShtSPaBQREpI8CXEaTSqc00otoNqEYnPCFoEXBF4axN488ML5NE1pUQYznM_TIqDxHC7ydI9ZNTWKp0JuJ3JhMeTNVsGgYUtdBrE9pint5ONG74RcLO1HAXeFtxyO-IlFvbCQ_wGrTrc4">