From c82b167e9b487046f0a70e0bf9d5a4ea271c05f9 Mon Sep 17 00:00:00 2001 From: Vassil Vassilev Date: Tue, 16 Feb 2016 16:10:32 +0100 Subject: [PATCH] Teach clang_delta how to break "trivial" inheritance chains. This is helpful to remove dependencies on other headers/libraries, allowing creduce to converge more quickly. --- clang_delta/RemoveTrivialBaseTemplate.cpp | 3 +-- clang_delta/test/RemoveTrivialBaseTemplate.cpp | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 clang_delta/test/RemoveTrivialBaseTemplate.cpp diff --git a/clang_delta/RemoveTrivialBaseTemplate.cpp b/clang_delta/RemoveTrivialBaseTemplate.cpp index 7ca61bfa..6fbd6741 100644 --- a/clang_delta/RemoveTrivialBaseTemplate.cpp +++ b/clang_delta/RemoveTrivialBaseTemplate.cpp @@ -104,9 +104,8 @@ void RemoveTrivialBaseTemplate::handleOneCXXRecordDecl( const CXXBaseSpecifier *BS = I; const Type *Ty = BS->getType().getTypePtr(); const CXXRecordDecl *Base = getBaseDeclFromType(Ty); - if (!Base || Base->hasDefinition()) { + if (!Base) continue; - } const ClassTemplateDecl *TmplD = Base->getDescribedClassTemplate(); if (!TmplD) continue; diff --git a/clang_delta/test/RemoveTrivialBaseTemplate.cpp b/clang_delta/test/RemoveTrivialBaseTemplate.cpp new file mode 100644 index 00000000..da28e354 --- /dev/null +++ b/clang_delta/test/RemoveTrivialBaseTemplate.cpp @@ -0,0 +1,16 @@ +//RUN: %clang_delta --transformation=remove-trivial-base-template --counter=1 %s | FileCheck %s +namespace std { + template class iterator{}; +} +template +struct TriaRawIterator : public std::iterator { + int pinHere; +}; + +//CHECK: namespace std { +//CHECK-NEXT: template class iterator{}; +//CHECK-NEXT: } +//CHECK-NEXT: template +//CHECK-NEXT: struct TriaRawIterator { +//CHECK-NEXT: int pinHere; +//CHECK-NEXT: };