Index: cfe/trunk/lib/CodeGen/CGClass.cpp =================================================================== --- cfe/trunk/lib/CodeGen/CGClass.cpp +++ cfe/trunk/lib/CodeGen/CGClass.cpp @@ -1297,6 +1297,10 @@ if (BaseClassDecl->hasTrivialDestructor()) return true; + // Give up if the destructor is not accessible. + if (!BaseClassDecl->getDestructor()) + return false; + if (!BaseClassDecl->getDestructor()->hasTrivialBody()) return false; Index: cfe/trunk/test/CodeGenCXX/destructor-crash.cpp =================================================================== --- cfe/trunk/test/CodeGenCXX/destructor-crash.cpp +++ cfe/trunk/test/CodeGenCXX/destructor-crash.cpp @@ -0,0 +1,19 @@ +// RUN: %clang_cc1 %s -emit-llvm -std=c++11 -o %t + +struct A { + ~A(); +}; + +struct B { + A a; +}; + +struct C { + union { + B b; + }; + + ~C() noexcept; +}; + +C::~C() noexcept {}