diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-11-11 19:35:06 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-11-11 19:35:06 +0000 |
commit | b15683e6357b1786ac26779cf377ea6cdebb8497 (patch) | |
tree | 5ab58e17e20f68fd0fee6e68d8bfc33612a64a99 /clang | |
parent | 124e93de93f14baed40411113623f1e3b652100d (diff) | |
download | bcm5719-llvm-b15683e6357b1786ac26779cf377ea6cdebb8497.tar.gz bcm5719-llvm-b15683e6357b1786ac26779cf377ea6cdebb8497.zip |
Fix pr17875.
The assert this patch deletes was valid only when aliasing D2 to D1, not when
looking at a base class. Since the assert was in the path where we had already
decided to not produce an alias, just drop it.
llvm-svn: 194411
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/CodeGen/CGCXX.cpp | 4 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/ctor-dtor-alias.cpp | 15 |
2 files changed, 16 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CGCXX.cpp b/clang/lib/CodeGen/CGCXX.cpp index f79e079745c..0f55616ea6b 100644 --- a/clang/lib/CodeGen/CGCXX.cpp +++ b/clang/lib/CodeGen/CGCXX.cpp @@ -150,10 +150,8 @@ bool CodeGenModule::TryEmitDefinitionAsAlias(GlobalDecl AliasDecl, // Don't create an alias to a linker weak symbol unless we know we can do // that in every TU. This avoids producing different COMDATs in different // TUs. - if (llvm::GlobalValue::isWeakForLinker(TargetLinkage)) { - assert(Linkage == TargetLinkage); + if (llvm::GlobalValue::isWeakForLinker(TargetLinkage)) return true; - } } // Create the alias with no name. diff --git a/clang/test/CodeGenCXX/ctor-dtor-alias.cpp b/clang/test/CodeGenCXX/ctor-dtor-alias.cpp index 745495ac68f..1ab66a04d0d 100644 --- a/clang/test/CodeGenCXX/ctor-dtor-alias.cpp +++ b/clang/test/CodeGenCXX/ctor-dtor-alias.cpp @@ -88,3 +88,18 @@ namespace test6 { B X; // CHECK-DAG: call i32 @__cxa_atexit({{.*}}@_ZN5test61AD2Ev } + +namespace test7 { + // Test that we don't produce an alias from ~B to ~A<int> (or crash figuring + // out if we should). + // pr17875. + // CHECK-DAG: define void @_ZN5test71BD2Ev + template <typename> struct A { + ~A() {} + }; + class B : A<int> { + ~B(); + }; + template class A<int>; + B::~B() {} +} |