]> granicus.if.org Git - clang/commitdiff
MS ABI: -fno-rtti-data wasn't data-free enough
authorDavid Majnemer <david.majnemer@gmail.com>
Thu, 24 Jul 2014 06:09:19 +0000 (06:09 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Thu, 24 Jul 2014 06:09:19 +0000 (06:09 +0000)
While -fno-rtti-data would correctly avoid referencing the RTTI complete
object locator in the VFTable itself, it would emit them anyway.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213841 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MicrosoftCXXABI.cpp
test/CodeGenCXX/microsoft-no-rtti-data.cpp

index a69d4dd3fe86802c6e591da112c6de71ec158f3a..0ab0940f96f750797fcd2ddc2abecde54cd2b36d 100644 (file)
@@ -1179,7 +1179,9 @@ void MicrosoftCXXABI::emitVTableDefinitions(CodeGenVTables &CGVT,
     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);
index d4002c28b1a20bb66379d60e3a1aba3f6994911c..fded4c91e4f1caa5d8ade6db7f040d9ee81a67c5 100644 (file)
@@ -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@Z" to i8*)]
 
 struct type_info;