<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=http://email.email.llvm.org/c/eJylVtty4jgQ_Rrz0gUFNtcHHgiQytQmk9SEqdQ-UUJu29rIkkuSw_D30xLmkgVm9uIyxpbV0jl9TjdsdLqbcslU3uYShFVRPHJgnRHcASpd5wVshStAafzBsXIdmGtlRYomSmZRdxF1m-uHFilkUTyO4slxdpTcXXkL0eguGi3Oo_dXLjv4A6Fk72jBFcICU4DGaAMUyiykml4EuCAU7aLaB-ztUqdIi_8NVZTMra4NxyhZ0hLxfkaz5jxOaIQeiTRhG_lbgylmQgkntCL0kIosQ4OKshEY0TDYCrnIBGf-yV7dqNdspLRD_20RIUUCa0IQ6Oy46UUWvjgatqCV3AGDLTNK7PkeuP6KYzLzjIZ-zybyjCAJDKWw1q93g46felSPIqLBXfutFNxoqzPXPka1fVQ0WPxOXvBHNFiePfnjuMUZj5kjzREsKxGcKEnNOZxZE5zWB2cGS67XPqMBRzymRBdGby8dcGMWBMj5HvJnmzaDV1za-DO48OvziszB8sanDpiUnc-TG-heB_trzQbXNcv_uWbrNXOUm03tcL0OBM5T4s9_peW1HNyQ8rc7XyPc90YdnldIZfBD6Np-KhPiXlD1_Qcl4dZxJHBVK1voWqZBXC9F2B2Q3Iam43vQTFrtfSkc1DY0KYSt0aQN4ZLSi0Sl7UePSfGV6we8WXwojYHIYOt9tG-3wUZ7B9FMti9_FtobCV8jZNSsgs0qZpzgNeUHwpvOKb8X15UPKAkGGgsb5IwAByCviz-Aa-WYuLRlnIT2R5NWi6fl6uF5QaRLdIVOQ6qFcTWTMH9-Wi-W88fXl-V8Tcl6-Pb8Bg_flq_fH1en0Pns8XH158sSmgUuIL7qwPl8L9qFuJtDt8T0Zpk3qTwwCu3SV-aVfFyy-vL0cm6Km9CvYg5qYsZq6U4R5I77z-tXIffUtlmwyqmVh-51ag_-iYKtS0kNInlHZ28U7BY0DO2GiEPBqgpVCNDEnJ2iIJMsvzBDPOa6EpTC4B39gQYyo8uAn1MaS1GXlENqYYbxd_pFp5RqI3KhSJUdZEJS7GYHUb-rBCffT1rpNEknyYS1WE0gzJSVu_eiJiat2shp4VwVLBXf05kTznrT4bqkByk_Dl_tyui_kJPN74OJLd0M4vGw2yqmY-zz8WiT9iaDfpdPhtm4P-qzlAb6k36fbVqSbVDaKbWyKI4Vbvd1QPfUv1r_H4GYxt2414vjJKbPYNhJ02GajEcJy3pdxgc9ygWWTMiOX6ejTd4y07Ak5dHSSymss6eXjBp3rhAbwMd0NYCdcBJP_79O_d23BKUtFbs9tgmqZe59E36DbrimFfhMA5mfbT4Djw>52860</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-cl exception diagnostics don't match cl.exe with /std:c++17
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
amykhuang
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
amykhuang
</td>
</tr>
</table>
<pre>
clang-cl isn't strict enough with noexcept. Consider:
void f() noexcept;
void f() {}
cl.exe makes this an error (as does clang in non-clang-cl-mode):
<source>(2): error C2382: 'f': redefinition; different exception specifications
<source>(1): note: see declaration of 'f'
It's only a warning in clang-cl:
<source>:2:6: warning: 'f' is missing exception specification 'noexcept' [-Wmicrosoft-exception-spec]
void f() {}
^
noexcept
At the same time, clang-cl is too strict with __declspec(nothrow):
__declspec(nothrow) void g();
void g() {}
cl.exe does NOT diag this at all.
clang-cl warns:
<source>:5:6: warning: 'g' is missing exception specification '__attribute__((nothrow))' [-Wmicrosoft-exception-spec]
void g() {}
^
__attribute__((nothrow))
<source>:4:26: note: previous declaration is here
__declspec(nothrow) void g();
^
clang-cl should NOT warn here either. (Also, it uses the wrong spelling of the attribute in the diag, but if we don't diag at all that's a non-issue for this particular issue.)
This matters because the SDK contains:
#define STDMETHOD(method) virtual COM_DECLSPEC_NOTHROW HRESULT STDMETHODCALLTYPE method
So all STDMETHOD()s are declared __declspec(nothrow), but the SDK only does
#define STDMETHODIMP HRESULT STDMETHODCALLTYPE
So the default STDMETHOD / STDMETHODIMP pattern causes a warning with clang-cl with /std:c++17. (This does not happen without a /std: flag.)
(copied this over from the chromium bug tracker, originally filed by @nico)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJydVktz4jgQ_jXm0gUF9vDIgQMBUpnaZJOasDW1J0pIbVsbWXJJchj-_baEeWSBmd11GWPLanV_DzVsjNhNuWK66HIF0ukkHXtw3kruAbVpihK20pegDf7gWPsezI12UqBNslnSXyT99vphpIA8SSdJenecnWT3V95CMr5Pxovz6P2Vqx7-QKjYOzrwpXTANKC1xgKFMgfC0ItYLkhNWXT3UHu3MgJp8X9UlWRzZxrLMcmWtES6n9GuOU8zGqFHAk21jcOtRYG51NJLo6l6EDLP0aImNiIiGgZXI5e55Cw8uauJBm0ibTyGb4cIAqlYG4PA5MekFyx89TTswGi1AwZbZrXc4z1g_RnGbBYQjULONvIMIAkMlXQurHcDTph6VI8ikuF993sluTXO5L57jOqGqGS4-JW8EI5kuDx7CscxxRmOmSfNERyrELysSM05nFkTvDEHZ0ZLrteB0VhHOiGiS2u2lw64MQtiycW-5M82bQevuLT1Z3Th7y8rMgcrWp96YEr1Pk9uSw86uJ9rNryuWfHvNVuvmSduNo3H9ToCOKcknP9Jy2sc3JDyl5mvAf4SjDo63yG1xQ9pGvdpmxD2knbf_1ASbh1HAFe1cqVplIjiBilidkByG9pe6EEz5UzwpfTQuNikELbWkDZUl1JBJNraYfRISti5YSCYJYTSGMgctsFH-3YbbbR3EM1k--3PYnsj4RuEnJpVtFnNrJe8IX4gvumd-L24rkJARWWgdbBBzqjgWMjb4jfgRnsmL22ZZrH90aTV4nm5enxZEOgKfWlEpFpa3zAF85fn9WI5f3p7Xc7XRNbjt5fv8Pht-fbH0-oUOp89Pa3-fF1Cu8BFiW8mYj7PRVkIuz10SxQ3t3lL5QFRbJdhZ17h4xLV1-fXc1PcLP1qzVFNzFmj_CmC3PHwef06ck9tm0WrnFp57F6n9hCeKNh5QWoQyHs6B-Not6hhbDcEHEpW16hjgCHk7BQFuWLFhRnSCTe1JAqjd8wHWsitqWL9nGisZFMRh9TCLOPv9ItOlBorC6lJlR3kUlHsZgfJl76WnHx_1xHTTNxld6zjpVd4-udw6kzBzNo4sqk7GpxcyAPi2D1v4O00Vk1L7-voyfSBzoJmNpseNxU9KPVx-OrW1vyFnPbJQ9wFjm6G6WTU75TTHMcoBsj4KOf94d1wjDgWfcH7o3E-4aNJR7ENKjelXpikqcbtfiPRPTXAjpym_XQwSNMspc9w1BNiJLLJOGP5oM_4cEBUYMWk6oU6esYWHTuNJRGNjl4q6bw7vWTUtwuN2KZj1e69bIiyNh1rSEk7PQ53Yi3TiOVvUfnu0w">