-
Notifications
You must be signed in to change notification settings - Fork 13.6k
[ItaniumMangle] Add substitutions for record types when mangling vtables #109970
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 5 commits
f9a2525
9599a60
f228000
b2c397b
3c40e37
de40fd8
8cfc05b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,8 @@ | ||
// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s | ||
// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin9 -fclang-abi-compat=19 | FileCheck %s --check-prefix=CHECK-CLANG-19 | ||
|
||
//CHECK: @_ZTCN16MangleCtorVTable4InstE0_NS_1A4ImplINS1_4WrapEEE | ||
//CHECK-CLANG-19: @_ZTCN16MangleCtorVTable4InstE0_NS_1A4ImplINS0_4WrapEEE | ||
Comment on lines
+4
to
+5
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you move these two checks directly above the corresponding codes? Thanks! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The construction vtable is a global variable, so it cannot be moved above the corresponding code. |
||
|
||
struct X {}; | ||
|
||
|
@@ -96,3 +100,26 @@ typename X<T>::template Y<T>::type f(typename X<T>::template Y<T>::type2) { retu | |
// CHECK: @_ZN12ManglePrefix1fIiEENS_1XIT_E1YIS2_E4typeENS5_5type2E | ||
template int f<int>(int); | ||
} | ||
|
||
namespace MangleCtorVTable { | ||
namespace A { | ||
|
||
class VBase { | ||
public: | ||
virtual ~VBase() {}; | ||
}; | ||
|
||
struct Wrap {}; | ||
|
||
template <typename T> | ||
class Impl : public virtual VBase { | ||
public: | ||
}; | ||
|
||
} // namespace A | ||
|
||
struct Inst : public A::Impl<A::Wrap> {}; | ||
|
||
void Test() { Inst a; } | ||
|
||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be great if you could flesh out the behavior changes here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks. Updated.