diff options
| -rw-r--r-- | clang/lib/AST/RecordLayoutBuilder.cpp | 3 | ||||
| -rw-r--r-- | clang/test/CodeGenCXX/cxx11-vtable-key-function.cpp | 11 |
2 files changed, 14 insertions, 0 deletions
diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp index 86a881481c9..747b3529ceb 100644 --- a/clang/lib/AST/RecordLayoutBuilder.cpp +++ b/clang/lib/AST/RecordLayoutBuilder.cpp @@ -2351,6 +2351,9 @@ RecordLayoutBuilder::ComputeKeyFunction(const CXXRecordDecl *RD) { if (MD->hasInlineBody()) continue; + if (!MD->isUserProvided()) + continue; + // We found it. return MD; } diff --git a/clang/test/CodeGenCXX/cxx11-vtable-key-function.cpp b/clang/test/CodeGenCXX/cxx11-vtable-key-function.cpp new file mode 100644 index 00000000000..705a4addf63 --- /dev/null +++ b/clang/test/CodeGenCXX/cxx11-vtable-key-function.cpp @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - -std=c++11 | FileCheck %s +// PR13424 + +struct X { + virtual ~X() = default; + virtual void f(); +}; + +void X::f() {} + +// CHECK: @_ZTV1X = unnamed_addr constant |

