rjmccall added a comment.

You should add a __has_feature check for this 
(__has_feature(objc_arc_fields)?), as well as documentation.  The documentation 
would go in the ARC spec.



================
Comment at: include/clang/AST/Decl.h:3575
+  /// Functions to query basic properties of non-trivial C structs.
+  bool nonTrivialToDefaultInitialize() const {
+    return NonTrivialToDefaultInitialize;
----------------
Naming style would be "isNonTrivialToDefualtInitialize" and so on for all of 
these.

If these aren't guaranteed to be consistent with the C++ definitions (and the 
copying one almost certainly isn't, since there isn't a single definition of 
copying in C++), I think you probably need to name these in a way that makes it 
clear that it's the C bit that's being queried/changed.  Perhaps adding 
"Primitive" to each one, e.g. isNonTrivialToPrimitiveCopy?  Richard is probably 
opinionated about this.


================
Comment at: lib/AST/ASTContext.cpp:5780
+  // Return true if Ty is a non-trivial C struct type that is non-trivial to
+  // destructly move or destroy.
+  if (Ty.hasNonTrivialToDestructiveMoveStruct() ||
----------------
"Return true" is just a description of the code that follows.  I would suggest 
something like "The block needs copy/destroy helpers if...".


================
Comment at: lib/CodeGen/CGBlocks.cpp:2244
+        CGM, byrefInfo, NonTrivialCStructByrefHelpers(valueAlignment, type));
+
   // Otherwise, if we don't have a retainable type, there's nothing to do.
----------------
You've updated the code for __block captures, but I think you missed 
computeBlockInfo for direct captures.


================
Comment at: lib/CodeGen/CGDecl.cpp:1421
+    destroyer = CodeGenFunction::destroyNonTrivialCStruct;
+    cleanupKind = getARCCleanupKind();
+    break;
----------------
This can only be getARCCleanupKind() if it's non-trivial to destroy solely 
because of __strong members.  Since the setup here is significantly more 
general than ARC, I think you need to default to the more-correct behavior; if 
you want to add a special-case check for only __strong members, you ought to do 
that explicitly.


================
Comment at: lib/CodeGen/CGExprAgg.cpp:315
+    }
+  }
 }
----------------
Do these functions have a memcpy as a precondition?  I would expect them to do 
the full copy (for code size if nothing else).


================
Comment at: lib/CodeGen/CMakeLists.txt:73
   CodeGenAction.cpp
+  CodeGenCStruct.cpp
   CodeGenFunction.cpp
----------------
I think CGNonTrivialStruct.cpp would be a better name.


https://reviews.llvm.org/D41228



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to