r213841 - MS ABI: -fno-rtti-data wasn't data-free enough

David Majnemer david.majnemer at gmail.com
Wed Jul 23 23:09:19 PDT 2014


Author: majnemer
Date: Thu Jul 24 01:09:19 2014
New Revision: 213841

URL: http://llvm.org/viewvc/llvm-project?rev=213841&view=rev
Log:
MS ABI: -fno-rtti-data wasn't data-free enough

While -fno-rtti-data would correctly avoid referencing the RTTI complete
object locator in the VFTable itself, it would emit them anyway.

Modified:
    cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp
    cfe/trunk/test/CodeGenCXX/microsoft-no-rtti-data.cpp

Modified: cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp?rev=213841&r1=213840&r2=213841&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp (original)
+++ cfe/trunk/lib/CodeGen/MicrosoftCXXABI.cpp Thu Jul 24 01:09:19 2014
@@ -1179,7 +1179,9 @@ void MicrosoftCXXABI::emitVTableDefiniti
     if (VTable->hasInitializer())
       continue;
 
-    llvm::Constant *RTTI = getMSCompleteObjectLocator(RD, Info);
+    llvm::Constant *RTTI = getContext().getLangOpts().RTTIData
+                               ? getMSCompleteObjectLocator(RD, Info)
+                               : nullptr;
 
     const VTableLayout &VTLayout =
       VFTContext.getVFTableLayout(RD, Info->FullOffsetInMDC);

Modified: cfe/trunk/test/CodeGenCXX/microsoft-no-rtti-data.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/microsoft-no-rtti-data.cpp?rev=213841&r1=213840&r2=213841&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/microsoft-no-rtti-data.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/microsoft-no-rtti-data.cpp Thu Jul 24 01:09:19 2014
@@ -1,6 +1,7 @@
 // RUN: %clang_cc1 %s -fno-rtti-data -triple=i386-pc-win32 -o - -emit-llvm | FileCheck %s
 
 // vftable shouldn't have RTTI data in it.
+// CHECK-NOT: @"\01??_R4S@@6B@"
 // CHECK: @"\01??_7S@@6B@" = linkonce_odr unnamed_addr constant [1 x i8*] [i8* bitcast ({{.*}} @"\01??_GS@@UAEPAXI at Z" to i8*)]
 
 struct type_info;





More information about the cfe-commits mailing list