Author: akirtzidis Date: Tue Jul 27 07:56:10 2010 New Revision: 109501 URL: http://llvm.org/viewvc/llvm-project?rev=109501&view=rev Log: Always deserialize from PCH file scoped variables with non trivial constructor/destructor.
Fixes http://llvm.org/PR7692 Added: cfe/trunk/test/PCH/cxx-required-decls.cpp cfe/trunk/test/PCH/cxx-required-decls.h Modified: cfe/trunk/lib/Frontend/PCHWriterDecl.cpp Modified: cfe/trunk/lib/Frontend/PCHWriterDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHWriterDecl.cpp?rev=109501&r1=109500&r2=109501&view=diff ============================================================================== --- cfe/trunk/lib/Frontend/PCHWriterDecl.cpp (original) +++ cfe/trunk/lib/Frontend/PCHWriterDecl.cpp Tue Jul 27 07:56:10 2010 @@ -1114,6 +1114,14 @@ } else { const VarDecl *VD = cast<VarDecl>(D); + // Structs that have non-trivial constructors or destructors must be seen. + if (const RecordType *RT = VD->getType()->getAs<RecordType>()) { + if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(RT->getDecl())) { + if (!RD->hasTrivialConstructor() || !RD->hasTrivialDestructor()) + return true; + } + } + // In C++, this doesn't need to be seen if it is marked "extern". if (Context.getLangOptions().CPlusPlus && !VD->getInit() && (VD->getStorageClass() == VarDecl::Extern || Added: cfe/trunk/test/PCH/cxx-required-decls.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/PCH/cxx-required-decls.cpp?rev=109501&view=auto ============================================================================== --- cfe/trunk/test/PCH/cxx-required-decls.cpp (added) +++ cfe/trunk/test/PCH/cxx-required-decls.cpp Tue Jul 27 07:56:10 2010 @@ -0,0 +1,8 @@ +// Test this without pch. +// RUN: %clang_cc1 -include %S/cxx-required-decls.h %s -emit-llvm -o - | FileCheck %s + +// Test with pch. +// RUN: %clang_cc1 -x c++-header -emit-pch -o %t %S/cxx-required-decls.h +// RUN: %clang_cc1 -include-pch %t %s -emit-llvm -o - | FileCheck %s + +// CHECK: @_ZL5globS = internal global %struct.S zeroinitializer Added: cfe/trunk/test/PCH/cxx-required-decls.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/PCH/cxx-required-decls.h?rev=109501&view=auto ============================================================================== --- cfe/trunk/test/PCH/cxx-required-decls.h (added) +++ cfe/trunk/test/PCH/cxx-required-decls.h Tue Jul 27 07:56:10 2010 @@ -0,0 +1,7 @@ +// Header for PCH test cxx-required-decls.cpp + +struct S { + S(); +}; + +static S globS; _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
