<div dir="ltr">Accidental WIP commit?</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 17, 2015 at 1:35 PM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: majnemer<br>
Date: Tue Mar 17 15:35:00 2015<br>
New Revision: 232537<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=232537&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=232537&view=rev</a><br>
Log:<br>
WIP<br>
<br>
Modified:<br>
    cfe/trunk/lib/CodeGen/CGCXXABI.h<br>
    cfe/trunk/lib/CodeGen/CGException.cpp<br>
    cfe/trunk/lib/CodeGen/CodeGenModule.cpp<br>
    cfe/trunk/lib/CodeGen/CodeGenModule.h<br>
    cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp<br>
    cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp<br>
<br>
Modified: cfe/trunk/lib/CodeGen/CGCXXABI.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCXXABI.h?rev=232537&r1=232536&r2=232537&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCXXABI.h?rev=232537&r1=232536&r2=232537&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CGCXXABI.h (original)<br>
+++ cfe/trunk/lib/CodeGen/CGCXXABI.h Tue Mar 17 15:35:00 2015<br>
@@ -224,7 +224,8 @@ public:<br>
   emitTerminateForUnexpectedException(CodeGenFunction &CGF,<br>
                                       llvm::Value *Exn);<br>
<br>
-  virtual llvm::Constant *getAddrOfRTTIDescriptor(QualType Ty, bool ForEH) = 0;<br>
+  virtual llvm::Constant *getAddrOfRTTIDescriptor(QualType Ty) = 0;<br>
+  virtual llvm::Constant *getAddrOfCXXCatchDescriptor(QualType Ty) = 0;<br>
<br>
   virtual bool shouldTypeidBeNullChecked(bool IsDeref,<br>
                                          QualType SrcRecordTy) = 0;<br>
<br>
Modified: cfe/trunk/lib/CodeGen/CGException.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGException.cpp?rev=232537&r1=232536&r2=232537&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGException.cpp?rev=232537&r1=232536&r2=232537&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CGException.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CGException.cpp Tue Mar 17 15:35:00 2015<br>
@@ -567,7 +567,7 @@ void CodeGenFunction::EnterCXXTryStmt(co<br>
       if (CaughtType->isObjCObjectPointerType())<br>
         TypeInfo = CGM.getObjCRuntime().GetEHType(CaughtType);<br>
       else<br>
-        TypeInfo = CGM.GetAddrOfRTTIDescriptor(CaughtType, /*ForEH=*/true);<br>
+        TypeInfo = CGM.getAddrOfCXXCatchDescriptor(CaughtType);<br>
       CatchScope->setHandler(I, TypeInfo, Handler);<br>
     } else {<br>
       // No exception decl indicates '...', a catch-all.<br>
<br>
Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=232537&r1=232536&r2=232537&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=232537&r1=232536&r2=232537&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Tue Mar 17 15:35:00 2015<br>
@@ -3644,6 +3644,10 @@ llvm::Constant *CodeGenModule::EmitUuido<br>
   return llvm::ConstantStruct::getAnon(Fields);<br>
 }<br>
<br>
+llvm::Constant *CodeGenModule::getAddrOfCXXCatchDescriptor(QualType Ty) {<br>
+  return getCXXABI().getAddrOfCXXCatchDescriptor(Ty);<br>
+}<br>
+<br>
 llvm::Constant *CodeGenModule::GetAddrOfRTTIDescriptor(QualType Ty,<br>
                                                        bool ForEH) {<br>
   // Return a bogus pointer if RTTI is disabled, unless it's for EH.<br>
@@ -3656,7 +3660,7 @@ llvm::Constant *CodeGenModule::GetAddrOf<br>
       LangOpts.ObjCRuntime.isGNUFamily())<br>
     return ObjCRuntime->GetEHType(Ty);<br>
<br>
-  return getCXXABI().getAddrOfRTTIDescriptor(Ty, ForEH);<br>
+  return getCXXABI().getAddrOfRTTIDescriptor(Ty);<br>
 }<br>
<br>
 void CodeGenModule::EmitOMPThreadPrivateDecl(const OMPThreadPrivateDecl *D) {<br>
<br>
Modified: cfe/trunk/lib/CodeGen/CodeGenModule.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.h?rev=232537&r1=232536&r2=232537&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.h?rev=232537&r1=232536&r2=232537&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/CodeGen/CodeGenModule.h (original)<br>
+++ cfe/trunk/lib/CodeGen/CodeGenModule.h Tue Mar 17 15:35:00 2015<br>
@@ -719,6 +719,8 @@ public:<br>
   /// Get the address of the RTTI descriptor for the given type.<br>
   llvm::Constant *GetAddrOfRTTIDescriptor(QualType Ty, bool ForEH = false);<br>
<br>
+  llvm::Constant *getAddrOfCXXCatchDescriptor(QualType Ty);<br>
+<br>
   /// Get the address of a uuid descriptor .<br>
   llvm::Constant *GetAddrOfUuidDescriptor(const CXXUuidofExpr* E);<br>
<br>
<br>
Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=232537&r1=232536&r2=232537&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=232537&r1=232536&r2=232537&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Tue Mar 17 15:35:00 2015<br>
@@ -125,7 +125,10 @@ public:<br>
<br>
   void EmitFundamentalRTTIDescriptor(QualType Type);<br>
   void EmitFundamentalRTTIDescriptors();<br>
-  llvm::Constant *getAddrOfRTTIDescriptor(QualType Ty, bool ForEH) override;<br>
+  llvm::Constant *getAddrOfRTTIDescriptor(QualType Ty) override;<br>
+  llvm::Constant *getAddrOfCXXCatchDescriptor(QualType Ty) {<br>
+    return getAddrOfRTTIDescriptor(Ty);<br>
+  }<br>
<br>
   bool shouldTypeidBeNullChecked(bool IsDeref, QualType SrcRecordTy) override;<br>
   void EmitBadTypeidCall(CodeGenFunction &CGF) override;<br>
@@ -3101,8 +3104,7 @@ ItaniumRTTIBuilder::BuildPointerToMember<br>
       ItaniumRTTIBuilder(CXXABI).BuildTypeInfo(QualType(ClassType, 0)));<br>
 }<br>
<br>
-llvm::Constant *ItaniumCXXABI::getAddrOfRTTIDescriptor(QualType Ty,<br>
-                                                       bool ForEH) {<br>
+llvm::Constant *ItaniumCXXABI::getAddrOfRTTIDescriptor(QualType Ty) {<br>
   return ItaniumRTTIBuilder(*this).BuildTypeInfo(Ty);<br>
 }<br>
<br>
<br>
Modified: cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp?rev=232537&r1=232536&r2=232537&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp?rev=232537&r1=232536&r2=232537&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp Tue Mar 17 15:35:00 2015<br>
@@ -83,7 +83,8 @@ public:<br>
   llvm::GlobalVariable *getMSCompleteObjectLocator(const CXXRecordDecl *RD,<br>
                                                    const VPtrInfo *Info);<br>
<br>
-  llvm::Constant *getAddrOfRTTIDescriptor(QualType Ty, bool ForEH) override;<br>
+  llvm::Constant *getAddrOfRTTIDescriptor(QualType Ty) override;<br>
+  llvm::Constant *getAddrOfCXXCatchDescriptor(QualType Ty) override;<br>
<br>
   bool shouldTypeidBeNullChecked(bool IsDeref, QualType SrcRecordTy) override;<br>
   void EmitBadTypeidCall(CodeGenFunction &CGF) override;<br>
@@ -3094,8 +3095,7 @@ MSRTTIBuilder::getBaseClassDescriptor(co<br>
   // Initialize the BaseClassDescriptor.<br>
   llvm::Constant *Fields[] = {<br>
       ABI.getImageRelativeConstant(<br>
-          ABI.getAddrOfRTTIDescriptor(Context.getTypeDeclType(Class.RD),<br>
-                                      /*ForEH=*/false)),<br>
+          ABI.getAddrOfRTTIDescriptor(Context.getTypeDeclType(Class.RD))),<br>
       llvm::ConstantInt::get(CGM.IntTy, Class.NumBases),<br>
       llvm::ConstantInt::get(CGM.IntTy, Class.OffsetInVBase),<br>
       llvm::ConstantInt::get(CGM.IntTy, VBPtrOffset),<br>
@@ -3186,22 +3186,21 @@ static QualType decomposeTypeForEH(ASTCo<br>
   return T;<br>
 }<br>
<br>
-/// \brief Gets a TypeDescriptor.  Returns a llvm::Constant * rather than a<br>
-/// llvm::GlobalVariable * because different type descriptors have different<br>
-/// types, and need to be abstracted.  They are abstracting by casting the<br>
-/// address to an Int8PtrTy.<br>
-llvm::Constant *MicrosoftCXXABI::getAddrOfRTTIDescriptor(QualType Type,<br>
-                                                         bool ForEH) {<br>
+llvm::Constant *MicrosoftCXXABI::getAddrOfCXXCatchDescriptor(QualType Type) {<br>
   // TypeDescriptors for exceptions never has qualified pointer types,<br>
   // qualifiers are stored seperately in order to support qualification<br>
   // conversions.<br>
-  if (ForEH) {<br>
-    // FIXME: This is only a 50% solution, we need to actually do something with<br>
-    // these qualifiers.<br>
-    bool IsConst, IsVolatile;<br>
-    Type = decomposeTypeForEH(getContext(), Type, IsConst, IsVolatile);<br>
-  }<br>
+  bool IsConst, IsVolatile;<br>
+  Type = decomposeTypeForEH(getContext(), Type, IsConst, IsVolatile);<br>
<br>
+  return getAddrOfRTTIDescriptor(Type);<br>
+}<br>
+<br>
+/// \brief Gets a TypeDescriptor.  Returns a llvm::Constant * rather than a<br>
+/// llvm::GlobalVariable * because different type descriptors have different<br>
+/// types, and need to be abstracted.  They are abstracting by casting the<br>
+/// address to an Int8PtrTy.<br>
+llvm::Constant *MicrosoftCXXABI::getAddrOfRTTIDescriptor(QualType Type) {<br>
   SmallString<256> MangledName, TypeInfoString;<br>
   {<br>
     llvm::raw_svector_ostream Out(MangledName);<br>
@@ -3419,8 +3418,7 @@ llvm::Constant *MicrosoftCXXABI::getCatc<br>
<br>
   // The TypeDescriptor is used by the runtime to determine if a catch handler<br>
   // is appropriate for the exception object.<br>
-  llvm::Constant *TD =<br>
-      getImageRelativeConstant(getAddrOfRTTIDescriptor(T, /*ForEH=*/true));<br>
+  llvm::Constant *TD = getImageRelativeConstant(getAddrOfRTTIDescriptor(T));<br>
<br>
   // The runtime is responsible for calling the copy constructor if the<br>
   // exception is caught by value.<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>