<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 17, 2016 at 2:51 PM, Puetz Kevin A via cfe-dev <span dir="ltr"><<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Although not specifically mentioned in the documentation, MSVC accepts __uuidof(...) and declspec(uuid("...")) attributes on enumeration types in addition to structs/classes. This is meaningful, as such types *do* have associated UUIDs in ActiveX typelibs, and such attributes are included by default in the wrappers generated by their #import construct, so they are not particularly unusual.<br>
<br>
clang currently rejects the declspec with a -Wignored-attributes warning, and errors on __uuidof() with "cannot call operator __uuidof on a type with no GUID" (because it rejected the uuid attribute, and therefore finds no value). This is causing problems for us while trying to use clang-tidy on a codebase that makes heavy use of ActiveX.<br>
<br>
I believe I have found the relevant places to add this functionality, and attached are two patches adding this case to clang's implementation of these MS extensions.<br>
enum-uuidof-master.patch against r285994 (or actually the git mirror 80464680ce)<br>
enum-uuidof-39.patch is the same, but based on release_39@282636. I don't seriously think this warrants a backport to 3.9, though I wouldn't object :-) However, I prepared the patch for our own use in the meantime, so I might as well include it. They differ only due to some reformatting of the error messages in include/clang/Basic/<wbr>DiagnosticSemaKinds.td.<br>
<br>
Both include an update to test/Parser/<wbr>MicrosoftExtensions.cpp to exercise the new functionality.<br>
<br>
This is my first time contributing to LLVM, so if I've missed anything else needed to prepare this for review just let me know!<br></blockquote><div><br></div><div>I'd appreciate it if you could create a differential on phabricator: <a href="http://llvm.org/docs/Phabricator.html">http://llvm.org/docs/Phabricator.html</a></div><div><br></div><div>Thanks!</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
__uuidof: <a href="https://msdn.microsoft.com/en-us/library/zaah6a61.aspx" rel="noreferrer" target="_blank">https://msdn.microsoft.com/en-<wbr>us/library/zaah6a61.aspx</a><br>
declspec(uuid("...")): <a href="https://msdn.microsoft.com/en-us/library/3b6wkewa.aspx
#import" rel="noreferrer" target="_blank">https://msdn.microsoft.com/en-<wbr>us/library/3b6wkewa.aspx<br>
#import</a>: <a href="https://msdn.microsoft.com/en-us/library/8etzzkb6.aspx" rel="noreferrer" target="_blank">https://msdn.microsoft.com/en-<wbr>us/library/8etzzkb6.aspx</a><br>
<br>______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div></div>