leonardchan created this revision.
leonardchan added reviewers: phosek, mcgrathr.
leonardchan added a project: clang.
Herald added a reviewer: jansvoboda11.
leonardchan requested review of this revision.
And also remove `-fexperimental-relative-c++-abi-vtables` from tests that
already have fuchsia as the target.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D95182
Files:
clang/lib/Frontend/CompilerInvocation.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/available_externally-vtable.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/child-inheritted-from-parent-in-comdat.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/child-vtable-in-comdat.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/cross-translation-unit-1.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/cross-translation-unit-2.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/diamond-inheritance.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/diamond-virtual-inheritance.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/dynamic-cast.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/inheritted-virtual-function.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/inlined-key-function.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/member-function-pointer.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/multiple-inheritance.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/no-alias-when-dso-local.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/override-pure-virtual-method.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/overriden-virtual-function.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/relative-vtables-flag.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/simple-vtable-definition.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/thunk-mangling.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/type-info.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/vbase-offset.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/virtual-function-call.cpp
clang/test/CodeGenCXX/RelativeVTablesABI/vtable-hidden-when-in-comdat.cpp
clang/test/CodeGenCXX/constructor-destructor-return-this.cpp
clang/test/Lexer/has_feature_cxx_abi_relative_vtable.cpp
Index: clang/test/Lexer/has_feature_cxx_abi_relative_vtable.cpp
===================================================================
--- clang/test/Lexer/has_feature_cxx_abi_relative_vtable.cpp
+++ clang/test/Lexer/has_feature_cxx_abi_relative_vtable.cpp
@@ -2,6 +2,7 @@
// RUN: %clang_cc1 -E %s -triple x86_64-linux-gnu -x c++ -fexperimental-relative-c++-abi-vtables -o - | FileCheck %s --check-prefix=RELATIVE-VTABLE
// RUN: %clang_cc1 -E %s -triple x86_64-linux-gnu -x c++ -fno-experimental-relative-c++-abi-vtables -o - | FileCheck %s --check-prefix=NO-RELATIVE-VTABLE
// RUN: %clang_cc1 -E %s -triple x86_64-linux-gnu -x c -fexperimental-relative-c++-abi-vtables -o - | FileCheck %s --check-prefix=NO-RELATIVE-VTABLE
+// RUN: %clang_cc1 -E %s -triple x86_64-unknown-fuchsia -x c++ -o - | FileCheck %s --check-prefix=RELATIVE-VTABLE
#if __has_feature(cxx_abi_relative_vtable)
int has_relative_vtable();
Index: clang/test/CodeGenCXX/constructor-destructor-return-this.cpp
===================================================================
--- clang/test/CodeGenCXX/constructor-destructor-return-this.cpp
+++ clang/test/CodeGenCXX/constructor-destructor-return-this.cpp
@@ -3,8 +3,12 @@
//RUN: %clang_cc1 %s -emit-llvm -o - -triple=thumbv7-apple-ios5.0 -target-abi apcs-gnu | FileCheck --check-prefix=CHECKIOS5 %s
//RUN: %clang_cc1 %s -emit-llvm -o - -triple=wasm32-unknown-unknown \
//RUN: | FileCheck --check-prefix=CHECKARM %s
-//RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-unknown-fuchsia | FileCheck --check-prefix=CHECKFUCHSIA %s
-//RUN: %clang_cc1 %s -emit-llvm -o - -triple=aarch64-unknown-fuchsia | FileCheck --check-prefix=CHECKFUCHSIA %s
+//RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-unknown-fuchsia | FileCheck --check-prefixes=CHECKFUCHSIA,CHECKFUCHSIA-RELVTABLE %s
+//RUN: %clang_cc1 %s -emit-llvm -o - -triple=aarch64-unknown-fuchsia | FileCheck --check-prefixes=CHECKFUCHSIA,CHECKFUCHSIA-RELVTABLE %s
+//RUN: %clang_cc1 %s -emit-llvm -o - -triple=x86_64-unknown-fuchsia -fno-experimental-relative-c++-abi-vtables \
+//RUN: | FileCheck --check-prefixes=CHECKFUCHSIA,CHECKFUCHSIA-NORELVTABLE %s
+//RUN: %clang_cc1 %s -emit-llvm -o - -triple=aarch64-unknown-fuchsia -fno-experimental-relative-c++-abi-vtables \
+//RUN: | FileCheck --check-prefixes=CHECKFUCHSIA,CHECKFUCHSIA-NORELVTABLE %s
//RUN: %clang_cc1 %s -emit-llvm -o - -triple=i386-pc-win32 -fno-rtti | FileCheck --check-prefix=CHECKMS %s
// FIXME: these tests crash on the bots when run with -triple=x86_64-pc-win32
@@ -151,8 +155,10 @@
// Verify that virtual calls to destructors are not marked with a 'returned'
// this parameter at the call site...
-// CHECKARM,CHECKFUCHSIA: [[VFN:%.*]] = getelementptr inbounds %class.E* (%class.E*)*, %class.E* (%class.E*)**
-// CHECKARM,CHECKFUCHSIA: [[THUNK:%.*]] = load %class.E* (%class.E*)*, %class.E* (%class.E*)** [[VFN]]
+// CHECKARM,CHECKFUCHSIA-NORELVTABLE: [[VFN:%.*]] = getelementptr inbounds %class.E* (%class.E*)*, %class.E* (%class.E*)**
+// CHECKARM,CHECKFUCHSIA-NORELVTABLE: [[THUNK:%.*]] = load %class.E* (%class.E*)*, %class.E* (%class.E*)** [[VFN]]
+// CHECKFUCHSIA-RELVTABLE: [[VFN:%.*]] = call i8* @llvm.load.relative.i32
+// CHECKFUCHSIA-RELVTABLE: [[THUNK:%.*]] = bitcast i8* [[VFN]] to %class.E* (%class.E*)*
// CHECKARM,CHECKFUCHSIA: call %class.E* [[THUNK]](%class.E* {{[^,]*}} %
// ...but static calls create declarations with 'returned' this
Index: clang/test/CodeGenCXX/RelativeVTablesABI/vtable-hidden-when-in-comdat.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/vtable-hidden-when-in-comdat.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/vtable-hidden-when-in-comdat.cpp
@@ -2,7 +2,7 @@
// is not dso_local. The vtable will need to be hidden and not private so it can
// be used as acomdat key signature.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm | FileCheck %s
// CHECK: @_ZTV1B.local = linkonce_odr hidden unnamed_addr constant
// CHECK: @_ZTV1B = linkonce_odr unnamed_addr alias { [3 x i32] }, { [3 x i32] }* @_ZTV1B.local
Index: clang/test/CodeGenCXX/RelativeVTablesABI/virtual-function-call.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/virtual-function-call.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/virtual-function-call.cpp
@@ -1,6 +1,6 @@
// Check that we call llvm.load.relative() on a vtable function call.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O3 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O3 -S -o - -emit-llvm | FileCheck %s
// CHECK: define{{.*}} void @_Z5A_fooP1A(%class.A* %a) local_unnamed_addr
// CHECK-NEXT: entry:
Index: clang/test/CodeGenCXX/RelativeVTablesABI/vbase-offset.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/vbase-offset.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/vbase-offset.cpp
@@ -1,7 +1,7 @@
// Check that the pointer adjustment from the virtual base offset is loaded as a
// 32-bit int.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm | FileCheck %s
// CHECK-LABEL: @_ZTv0_n12_N7Derived1fEi(
// CHECK-NEXT: entry:
Index: clang/test/CodeGenCXX/RelativeVTablesABI/type-info.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/type-info.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/type-info.cpp
@@ -1,6 +1,6 @@
// Check typeid() + type_info
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O3 -S -o - -emit-llvm -fcxx-exceptions -fexceptions -fexperimental-relative-c++-abi-vtables | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O3 -S -o - -emit-llvm -fcxx-exceptions -fexceptions | FileCheck %s
// CHECK: %class.A = type { i32 (...)** }
// CHECK: %class.B = type { %class.A }
Index: clang/test/CodeGenCXX/RelativeVTablesABI/thunk-mangling.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/thunk-mangling.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/thunk-mangling.cpp
@@ -5,7 +5,7 @@
// Running that linked binary still won't work since we're using conflicting
// ABIs, but we should still be able to link.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm | FileCheck %s
// This would be normally n24 (3 ptr widths) but is 12 since the vtable is
// entierely made of i32s now.
Index: clang/test/CodeGenCXX/RelativeVTablesABI/simple-vtable-definition.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/simple-vtable-definition.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/simple-vtable-definition.cpp
@@ -1,6 +1,6 @@
// Check the layout of the vtable for a normal class.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fhalf-no-semantic-interposition | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fhalf-no-semantic-interposition | FileCheck %s
// We should be emitting comdats for each of the virtual function RTTI proxies
// CHECK: $_ZTI1A.rtti_proxy = comdat any
Index: clang/test/CodeGenCXX/RelativeVTablesABI/relative-vtables-flag.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/relative-vtables-flag.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/relative-vtables-flag.cpp
@@ -3,9 +3,12 @@
// of a soft incremental rollout. This ABI should only be used if the flag for
// it is passed on Fuchsia.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fhalf-no-semantic-interposition | FileCheck --check-prefix=RELATIVE-ABI %s
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm -fno-experimental-relative-c++-abi-vtables | FileCheck --check-prefix=DEFAULT-ABI %s
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm | FileCheck --check-prefix=DEFAULT-ABI %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables \
+// RUN: -fhalf-no-semantic-interposition | FileCheck --check-prefix=RELATIVE-ABI %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm -fno-experimental-relative-c++-abi-vtables \
+// RUN: -fhalf-no-semantic-interposition | FileCheck --check-prefix=DEFAULT-ABI %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm -fhalf-no-semantic-interposition \
+// RUN: | FileCheck --check-prefix=RELATIVE-ABI %s
// VTable contains offsets and references to the hidden symbols
// RELATIVE-ABI: @_ZTV1A.local = private unnamed_addr constant { [3 x i32] } { [3 x i32] [i32 0, i32 trunc (i64 sub (i64 ptrtoint ({ i8*, i8* }** @_ZTI1A.rtti_proxy to i64), i64 ptrtoint (i32* getelementptr inbounds ({ [3 x i32] }, { [3 x i32] }* @_ZTV1A.local, i32 0, i32 0, i32 2) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (void (%class.A*)* dso_local_equivalent @_ZN1A3fooEv to i64), i64 ptrtoint (i32* getelementptr inbounds ({ [3 x i32] }, { [3 x i32] }* @_ZTV1A.local, i32 0, i32 0, i32 2) to i64)) to i32)] }, align 4
Index: clang/test/CodeGenCXX/RelativeVTablesABI/overriden-virtual-function.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/overriden-virtual-function.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/overriden-virtual-function.cpp
@@ -1,7 +1,7 @@
// Check the layout of the vtable for a child class that inherits a virtual
// function but does override it.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fhalf-no-semantic-interposition | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fhalf-no-semantic-interposition | FileCheck %s
// CHECK: @_ZTV1B.local = private unnamed_addr constant { [4 x i32] } { [4 x i32] [i32 0, i32 trunc (i64 sub (i64 ptrtoint ({ i8*, i8*, i8* }** @_ZTI1B.rtti_proxy to i64), i64 ptrtoint (i32* getelementptr inbounds ({ [4 x i32] }, { [4 x i32] }* @_ZTV1B.local, i32 0, i32 0, i32 2) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (void (%class.B*)* dso_local_equivalent @_ZN1B3fooEv to i64), i64 ptrtoint (i32* getelementptr inbounds ({ [4 x i32] }, { [4 x i32] }* @_ZTV1B.local, i32 0, i32 0, i32 2) to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (void (%class.B*)* dso_local_equivalent @_ZN1B3barEv to i64), i64 ptrtoint (i32* getelementptr inbounds ({ [4 x i32] }, { [4 x i32] }* @_ZTV1B.local, i32 0, i32 0, i32 2) to i64)) to i32)] }, align 4
Index: clang/test/CodeGenCXX/RelativeVTablesABI/override-pure-virtual-method.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/override-pure-virtual-method.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/override-pure-virtual-method.cpp
@@ -2,7 +2,7 @@
// We instead emit zero for the pure virtual function component. See PR43094 for
// details.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fhalf-no-semantic-interposition | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fhalf-no-semantic-interposition | FileCheck %s
// CHECK: @_ZTV1A.local = private unnamed_addr constant { [4 x i32] } { [4 x i32] [i32 0, i32 trunc (i64 sub (i64 ptrtoint ({ i8*, i8* }** @_ZTI1A.rtti_proxy to i64), i64 ptrtoint (i32* getelementptr inbounds ({ [4 x i32] }, { [4 x i32] }* @_ZTV1A.local, i32 0, i32 0, i32 2) to i64)) to i32), i32 0, i32 trunc (i64 sub (i64 ptrtoint (void (%class.A*)* dso_local_equivalent @_ZN1A3barEv to i64), i64 ptrtoint (i32* getelementptr inbounds ({ [4 x i32] }, { [4 x i32] }* @_ZTV1A.local, i32 0, i32 0, i32 2) to i64)) to i32)] }, align 4
Index: clang/test/CodeGenCXX/RelativeVTablesABI/no-alias-when-dso-local.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/no-alias-when-dso-local.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/no-alias-when-dso-local.cpp
@@ -1,8 +1,8 @@
// Check that no alias is emitted when the vtable is already dso_local. This can
// happen if the class is hidden.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fhalf-no-semantic-interposition | FileCheck %s --check-prefix=DEFAULT-VIS
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fvisibility hidden | FileCheck %s --check-prefix=HIDDEN-VIS
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm -fhalf-no-semantic-interposition | FileCheck %s --check-prefix=DEFAULT-VIS
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -S -o - -emit-llvm -fvisibility hidden | FileCheck %s --check-prefix=HIDDEN-VIS
// DEFAULT-VIS: @_ZTV1A.local = private unnamed_addr constant
// DEFAULT-VIS: @_ZTV1A ={{.*}} unnamed_addr alias { [3 x i32] }, { [3 x i32] }* @_ZTV1A.local
Index: clang/test/CodeGenCXX/RelativeVTablesABI/multiple-inheritance.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/multiple-inheritance.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/multiple-inheritance.cpp
@@ -1,6 +1,6 @@
// Multiple inheritance.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fhalf-no-semantic-interposition | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fhalf-no-semantic-interposition | FileCheck %s
// CHECK: %class.C = type { %class.A, %class.B }
// CHECK: %class.A = type { i32 (...)** }
Index: clang/test/CodeGenCXX/RelativeVTablesABI/member-function-pointer.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/member-function-pointer.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/member-function-pointer.cpp
@@ -1,6 +1,6 @@
// Member pointer to virtual function.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O3 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O3 -S -o - -emit-llvm | FileCheck %s
// CHECK: define{{.*}} void @_Z4funcP1AMS_FvvE(%class.A* %a, [2 x i64] %fn.coerce) local_unnamed_addr
// CHECK-NEXT: entry:
Index: clang/test/CodeGenCXX/RelativeVTablesABI/inlined-key-function.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/inlined-key-function.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/inlined-key-function.cpp
@@ -1,7 +1,7 @@
// Inline comdat method definition example.
// The VTable is in a comdat and defined anywhere the inline definition is.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm | FileCheck %s
// CHECK: $_ZTV1A = comdat any
// CHECK: $_ZTS1A = comdat any
Index: clang/test/CodeGenCXX/RelativeVTablesABI/inheritted-virtual-function.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/inheritted-virtual-function.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/inheritted-virtual-function.cpp
@@ -1,7 +1,7 @@
// Check the layout of the vtable for a child class that inherits a virtual
// function but does not override it.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fhalf-no-semantic-interposition | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fhalf-no-semantic-interposition | FileCheck %s
class A {
public:
Index: clang/test/CodeGenCXX/RelativeVTablesABI/dynamic-cast.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/dynamic-cast.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/dynamic-cast.cpp
@@ -1,7 +1,7 @@
// dynamic_cast
// Ensure that dynamic casting works normally
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O3 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O3 -S -o - -emit-llvm | FileCheck %s
// CHECK: define{{.*}} %class.A* @_Z6upcastP1B(%class.B* readnone %b) local_unnamed_addr
// CHECK-NEXT: entry:
Index: clang/test/CodeGenCXX/RelativeVTablesABI/diamond-virtual-inheritance.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/diamond-virtual-inheritance.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/diamond-virtual-inheritance.cpp
@@ -1,7 +1,7 @@
// Diamond virtual inheritance.
// This should cover virtual inheritance, construction vtables, and VTTs.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fhalf-no-semantic-interposition | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fhalf-no-semantic-interposition | FileCheck %s
// Class A contains a vtable ptr, then int, then padding
// CHECK-DAG: %class.B = type { i32 (...)**, %class.A.base }
Index: clang/test/CodeGenCXX/RelativeVTablesABI/diamond-inheritance.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/diamond-inheritance.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/diamond-inheritance.cpp
@@ -1,7 +1,7 @@
// Diamond inheritance.
// A more complicated multiple inheritance example that includes longer chain of inheritance and a common ancestor.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fhalf-no-semantic-interposition | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fhalf-no-semantic-interposition | FileCheck %s
// CHECK-DAG: %class.B = type { %class.A }
// CHECK-DAG: %class.A = type { i32 (...)** }
Index: clang/test/CodeGenCXX/RelativeVTablesABI/cross-translation-unit-2.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/cross-translation-unit-2.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/cross-translation-unit-2.cpp
@@ -1,7 +1,7 @@
// Check the vtable layout for classes with key functions defined in different
// translation units. This TU manifests the vtable for B.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fhalf-no-semantic-interposition | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fhalf-no-semantic-interposition | FileCheck %s
#include "cross-tu-header.h"
Index: clang/test/CodeGenCXX/RelativeVTablesABI/cross-translation-unit-1.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/cross-translation-unit-1.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/cross-translation-unit-1.cpp
@@ -1,7 +1,7 @@
// Check the vtable layout for classes with key functions defined in different
// translation units. This TU only manifests the vtable for A.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fhalf-no-semantic-interposition | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fhalf-no-semantic-interposition | FileCheck %s
#include "cross-tu-header.h"
Index: clang/test/CodeGenCXX/RelativeVTablesABI/child-vtable-in-comdat.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/child-vtable-in-comdat.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/child-vtable-in-comdat.cpp
@@ -1,7 +1,7 @@
// Cross comdat example
// Child VTable is in a comdat section.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm | FileCheck %s
// A comdat is emitted for B but not A
// CHECK-DAG: $_ZTV1B = comdat any
Index: clang/test/CodeGenCXX/RelativeVTablesABI/child-inheritted-from-parent-in-comdat.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/child-inheritted-from-parent-in-comdat.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/child-inheritted-from-parent-in-comdat.cpp
@@ -1,7 +1,7 @@
// Cross comdat example
// Parent VTable is in a comdat section.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fhalf-no-semantic-interposition | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fhalf-no-semantic-interposition | FileCheck %s
// The inline function is emitted in each module with the same comdat
// CHECK: $_ZTS1A = comdat any
Index: clang/test/CodeGenCXX/RelativeVTablesABI/available_externally-vtable.cpp
===================================================================
--- clang/test/CodeGenCXX/RelativeVTablesABI/available_externally-vtable.cpp
+++ clang/test/CodeGenCXX/RelativeVTablesABI/available_externally-vtable.cpp
@@ -2,7 +2,7 @@
// We check this specifically under the legacy pass manager because the new pass
// manager seems to remove available_externally vtables from the IR entirely.
-// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fexperimental-relative-c++-abi-vtables -fno-experimental-new-pass-manager | FileCheck %s
+// RUN: %clang_cc1 %s -triple=aarch64-unknown-fuchsia -O1 -S -o - -emit-llvm -fno-experimental-new-pass-manager | FileCheck %s
// The VTable for A is available_externally, meaning it can have a definition in
// IR, but is never emitted in this compilation unit. Because it won't be
Index: clang/lib/Frontend/CompilerInvocation.cpp
===================================================================
--- clang/lib/Frontend/CompilerInvocation.cpp
+++ clang/lib/Frontend/CompilerInvocation.cpp
@@ -2450,6 +2450,13 @@
/*Default=*/false) &&
Opts.FixedPoint;
+ // Relative VTables ABI
+ Opts.RelativeCXXABIVTables =
+ Args.hasFlag(OPT_fexperimental_relative_cxx_abi_vtables,
+ OPT_fno_experimental_relative_cxx_abi_vtables,
+ /*Default=*/T.isOSFuchsia()) &&
+ Opts.CPlusPlus;
+
Opts.RTTI = Opts.CPlusPlus && !Args.hasArg(OPT_fno_rtti);
Opts.RTTIData = Opts.RTTI && !Args.hasArg(OPT_fno_rtti_data);
Opts.Blocks = Args.hasArg(OPT_fblocks) || (Opts.OpenCL
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits