rjmccall added inline comments.

================
Comment at: lib/AST/MicrosoftMangle.cpp:448
     mangleVariableEncoding(VD);
-  else
+  else if (!isa<ObjCInterfaceDecl>(D))
     llvm_unreachable("Tried to mangle unexpected NamedDecl!");
----------------
I don't think we want `ObjCInterfaceDecl`s to enter this function normally; I'd 
prefer to leave that assertion intact.


================
Comment at: lib/AST/MicrosoftMangle.cpp:2574
   mangleTagTypeKind(TTK_Struct);
-  mangleName(T->getDecl());
+  mangle(T->getDecl(), ".objc_cls_");
 }
----------------
You're not really reusing any interesting logic from `mangle` here; please just 
stream the literal directly into `Out`.

Also, this will add the actual identifier to the substitution set, whereas your 
implementation below in the case for ObjCObjectType adds the prefixed 
identifier to the substitution set.


================
Comment at: lib/CodeGen/CGBlocks.cpp:1262
+  if (IsWindows) {
+    auto *Init = llvm::Function::Create(llvm::FunctionType::get(CGM.VoidTy,
+          {}), llvm::GlobalValue::InternalLinkage, ".block_isa_init",
----------------
theraven wrote:
> DHowett-MSFT wrote:
> > Is there value in emitting a list of blocks that need to be initialized, 
> > then initializing them in one go in a COMDAT-foldable function?
> I think that the best solution is to move this into the back end, so that 
> this code goes away in the front end, but anything that's referring to a 
> dllimport global in a global initialiser is transformed in the back end to a 
> list of initialisations and a comdat function that walks the list and sets 
> them up.  That said, this seems sufficiently generally useful that it would 
> be nice for the function to be in the CRT bits.  
> 
> 
> I should be in Redmond some time in October, so maybe we can discuss it with 
> some of the VS team then?
Can the blocks part of this patch be split out?  It's basically a totally 
different bugfix.


================
Comment at: lib/CodeGen/CGBlocks.cpp:1216
   bool IsOpenCL = CGM.getLangOpts().OpenCL;
+  bool IsWindows = CGM.getTarget().getTriple().isOSWindows();
   if (!IsOpenCL) {
----------------
Should this be a PE/COFF-specific restriction?  Or otherwise somehow restricted 
to the "native" environment?  I don't know enough about all the UNIX-on-Windows 
approaches to know whether the same restriction would apply to all of them.  I 
did think they generally used the Itanium C++ ABI, and the Itanium ABI relies 
on linking v-tables from the C++ standard library.  Maybe those environments 
just all use static linking to get around that.


================
Comment at: lib/CodeGen/CGBlocks.cpp:1276
+    InitVar->setSection(".CRT$XCLa");
+    CGM.addUsedGlobal(InitVar);
+  }
----------------
Is the priority system not good enough?


================
Comment at: lib/CodeGen/CGObjCGNU.cpp:915
+    return name;
+  }
   /// The GCC ABI superclass message lookup function.  Takes a pointer to a
----------------
Can this section-names cleanup also just be in a separate patch?


================
Comment at: lib/CodeGen/CGObjCGNU.cpp:2262
 llvm::Constant *CGObjCGNUstep::GetEHType(QualType T) {
+  if (CGM.getContext().getTargetInfo().getTriple().isWindowsMSVCEnvironment())
+    return CGM.getCXXABI().getAddrOfRTTIDescriptor(T);
----------------
I think this is the third different way that you test for Windows in this 
patch. :) Is there a reason why this is just testing for MSVC and the others 
are testing for PE/COFF or for Windows generally?


================
Comment at: lib/CodeGen/CGObjCGNU.cpp:3817
+  if (isRethrow && CGF.CGM.getTarget().getTriple().isWindowsMSVCEnvironment()) 
{
+    CGF.EmitRuntimeCallOrInvoke(ExceptionReThrowFn).setDoesNotReturn();
+  }
----------------
You're sure here that the static information aligns with the dynamic?


================
Comment at: lib/CodeGen/CGObjCRuntime.cpp:125
     llvm::Constant *TypeInfo;
+    unsigned Flags;
   };
----------------
Please add some sort of comment about the meaning and source of these flags.


================
Comment at: lib/CodeGen/EHScopeStack.h:424
+       void Emit(CodeGenFunction &CGF, Flags F) override;
+};
+
----------------
Please add a function on SGF to push this cleanup or something instead of 
globally declaring it.


Repository:
  rC Clang

https://reviews.llvm.org/D50144



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

Reply via email to