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

    <tr>
        <th>Summary</th>
        <td>
            Catching function types turns into catching their respective pointers
        </td>
    </tr>

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

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

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

<pre>
    ```c++
template<typename T>
void fn()
{
 try {}
    catch (T) {}
}
int main() { fn<int(int)>(); }
```

https://godbolt.org/z/K8rdsKbMT

Expected: Error. T is a function type, can't have a variable like that.

Actual: Clang thinks it says catch (T\*), as can be seen if you add a second catch. https://godbolt.org/z/q7T43oW6n

(Fun fact: GCC is equally wrong in the opposite direction, by erroring so hard it segfaults. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120754)
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEU02PozgQ_TXFpTQIDA7hwIGmmz2M9hZpj6vCVMA7jp22TXrTv37lkFXvx2EkyxiV69V7z1UUgl4scwfyBeRrRltcne96o8i7bHLzvYNDsS8F4iWtoo98uRqKDNUQ71e2dGE8QfUGRX9zesazBXEE0ULRQ5MSMPo7pmPzmv4QUVFUK4I4nkC0X6F91zbihfQTJUUTZDVoG0EcH3ubyu1Fqhd8Jv_NNJ2Lfo3xGqDqQYwgxsXNkzMxd34BMX6CGL8f_Ry-T7-e9utvf15ZRZ6h6vHNe-dzPKEOSHjerIraWUxiQQyoyIJoIq50YyS8kdc0GUajfzDGlWK-Q_YqbmQS4GDILhhXbX8E1BED3cM_PZADiD6JEQNSilicGAOzRX3Gu9uQ5hkJAytn5z0zx58pfG9OdeV-O9idDojjuFk8k4qJ0y_DkPTx-0bG3PHDO7ugthhXRne9uqAj46w9P8QnZtMdOTmj7YLB4Up-fojh5UybieF_jJTKF7s9GU3b8qmNIRBjWN3H79O25GrRUI16huq1FEUjaxBtNnfV3FYtZdyVjSxkXZVNna2dlJNsZK3ag6pUQ7IoD6qYWnFs27KSRJnuRCFkcRClKGVb1Tk15-ncHliq8ti2fIa64AtpkxtzuyRamQ5h466sZdkWmaGJTXjMghCWP_ARBSHSaPguJX2btiVAXRgdYviCiToa7ob0LMmcf3VMwLh5G1Db6PaX049eYO3Rc0hdp2-MV6dtZB-yzZvuPz7quG5TrtwFxJhqPj_frt79wSqCGB9MA4jxKeXWib8CAAD__x6cMqU">