rsmith added inline comments.

================
Comment at: include/clang/Sema/AttributeList.h:601
+      sizeof(AttributeList)
+      + (sizeof(DeclSpecUuidDecl) + sizeof(void *) + sizeof(ArgsUnion) - 1)
         / sizeof(void*) * sizeof(void*)
----------------
You're not storing a `DeclSpecUuidDecl` within the attribute, so you don't need 
to reserve enough space for one here. In fact, this constant appears to be 
unused, so you can just remove it.


================
Comment at: lib/AST/Decl.cpp:4561
+
+DeclSpecUuidDecl * DeclSpecUuidDecl::Create(const ASTContext &C, DeclContext 
*DC,
+                                            SourceLocation IdLoc,
----------------
No space after `*`, please.


================
Comment at: lib/AST/Decl.cpp:4564
+                                            StringRef UuidVal)
+{
+  return new (C, DC) DeclSpecUuidDecl(DeclSpecUuid, DC, IdLoc, UuidVal);
----------------
`{` on the previous line, please.


================
Comment at: lib/AST/DeclCXX.cpp:1727
       ((getName() == "IUnknown" &&
-        Uuid->getGuid() == "00000000-0000-0000-C000-000000000046") ||
+        Uuid->getDeclSpecUuidDecl()->getStrUuid() == 
"00000000-0000-0000-C000-000000000046") ||
        (getName() == "IDispatch" &&
----------------
It would be nice to have a convenience accessor on `UuidAttr` to get the UUID 
as a string. (You can add one using `AdditionalMembers` in Attr.td.)


================
Comment at: lib/Parse/ParseDecl.cpp:568-583
+    // Clean up the string from the "\" at begining and at end.
+    StringRef UuidStr1 = UuidStr.ltrim('\"');
+    StringRef TrimmedUuidStr = UuidStr1.rtrim('\"');
+    DeclSpecUuidDecl *ArgDecl =
+      DeclSpecUuidDecl::Create(Actions.getASTContext(),
+                               Actions.getFunctionLevelDeclContext(),
+                               SourceLocation(),
----------------
The `Parser` should not create `Decl`s (that's a layering violation). There are 
two ways to handle this:

1) Add a `Sema` method to act on a UUID attribute string, and return a pointer 
that you can stash in the `Attrs` list.
2) Just store a string in the `Attrs` list, and move the code to convert the 
string into a `DeclSpecUuidDecl*` and store that on the `UuidAttr` into `Sema`.

I'd strongly prefer the second option; from the point of view of the parser, we 
can still just treat this as an attribute that takes a string, and we can do 
the string -> `DeclSpecUuidDecl` handling entirely within the semantic analysis 
for the attribute (in `Sema`).


================
Comment at: lib/Parse/ParseDecl.cpp:572
+    DeclSpecUuidDecl *ArgDecl =
+      DeclSpecUuidDecl::Create(Actions.getASTContext(),
+                               Actions.getFunctionLevelDeclContext(),
----------------
What should happen if multiple declarations (of distinct entities) use the same 
`__declspec(uuid(...))` attribute? Should you get a redefinition error for the 
attribute or should they all share the same UUID entity? Either way, we'll want 
to do some (minimal) UUID lookup and build a redeclaration chain for 
`DeclSpecUuidDecl`s.


================
Comment at: lib/Sema/SemaDeclAttr.cpp:4937-4938
-      return nullptr;
-    Diag(UA->getLocation(), diag::err_mismatched_uuid);
-    Diag(Range.getBegin(), diag::note_previous_uuid);
-    D->dropAttr<UuidAttr>();
----------------
Do we still diagnose UUID mismatches somewhere else?


https://reviews.llvm.org/D43576



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D43576: S... Zahira Ammarguellat via Phabricator via cfe-commits
    • [PATCH] D435... Zahira Ammarguellat via Phabricator via cfe-commits
    • [PATCH] D435... Richard Smith - zygoloid via Phabricator via cfe-commits
    • [PATCH] D435... Zahira Ammarguellat via Phabricator via cfe-commits
    • [PATCH] D435... Zahira Ammarguellat via Phabricator via cfe-commits
    • [PATCH] D435... Zahira Ammarguellat via Phabricator via cfe-commits
    • [PATCH] D435... Zahira Ammarguellat via Phabricator via cfe-commits

Reply via email to