diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-03-29 23:34:08 +0000 | 
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-03-29 23:34:08 +0000 | 
| commit | 8933623b91df29c3689a0fa5c0e48d72ebb760c9 (patch) | |
| tree | 2db899fdf51f0bcd897fb4f73edb2022d00fe5cc /clang/lib/Sema/SemaCXXCast.cpp | |
| parent | b551aa4da514f71dc8c0e1e07a44b754d3a68d94 (diff) | |
| download | bcm5719-llvm-8933623b91df29c3689a0fa5c0e48d72ebb760c9.tar.gz bcm5719-llvm-8933623b91df29c3689a0fa5c0e48d72ebb760c9.zip | |
Optimize PartialDiagnostic's memory-allocation behavior by placing a
cache of PartialDiagnostic::Storage objects into an allocator within
the ASTContext. This eliminates a significant amount of malloc
traffic, for a 10% performance improvement in -fsyntax-only wall-clock
time with 403.gcc's combine.c.
Also, eliminate the RequireNonAbstractType hack I put in earlier,
which was but a symptom of this larger problem.
Fixes <rdar://problem/7806091>.
llvm-svn: 99849
Diffstat (limited to 'clang/lib/Sema/SemaCXXCast.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaCXXCast.cpp | 8 | 
1 files changed, 4 insertions, 4 deletions
| diff --git a/clang/lib/Sema/SemaCXXCast.cpp b/clang/lib/Sema/SemaCXXCast.cpp index 285ee4945d8..2b93d38e2ab 100644 --- a/clang/lib/Sema/SemaCXXCast.cpp +++ b/clang/lib/Sema/SemaCXXCast.cpp @@ -315,7 +315,7 @@ CheckDynamicCast(Sema &Self, Expr *&SrcExpr, QualType DestType,      assert(DestPointer && "Reference to void is not possible");    } else if (DestRecord) {      if (Self.RequireCompleteType(OpRange.getBegin(), DestPointee, -                                 PDiag(diag::err_bad_dynamic_cast_incomplete) +                               Self.PDiag(diag::err_bad_dynamic_cast_incomplete)                                     << DestRange))        return;    } else { @@ -353,7 +353,7 @@ CheckDynamicCast(Sema &Self, Expr *&SrcExpr, QualType DestType,    const RecordType *SrcRecord = SrcPointee->getAs<RecordType>();    if (SrcRecord) {      if (Self.RequireCompleteType(OpRange.getBegin(), SrcPointee, -                                 PDiag(diag::err_bad_dynamic_cast_incomplete) +                             Self.PDiag(diag::err_bad_dynamic_cast_incomplete)                                     << SrcExpr->getSourceRange()))        return;    } else { @@ -698,8 +698,8 @@ TryStaticDowncast(Sema &Self, CanQualType SrcType, CanQualType DestType,                    QualType OrigDestType, unsigned &msg,                     CastExpr::CastKind &Kind) {    // We can only work with complete types. But don't complain if it doesn't work -  if (Self.RequireCompleteType(OpRange.getBegin(), SrcType, PDiag(0)) || -      Self.RequireCompleteType(OpRange.getBegin(), DestType, PDiag(0))) +  if (Self.RequireCompleteType(OpRange.getBegin(), SrcType, Self.PDiag(0)) || +      Self.RequireCompleteType(OpRange.getBegin(), DestType, Self.PDiag(0)))      return TC_NotApplicable;    // Downcast can only happen in class hierarchies, so we need classes. | 

