From e63764f40426287525add4cc39d961e11597a0f9 Mon Sep 17 00:00:00 2001 From: Rafael Santos Date: Thu, 5 Apr 2018 16:22:55 +0200 Subject: [PATCH] Resolves #1555627 - fix compilation error with latest llvm/clang Signed-off-by: Rafael Santos --- bcc.spec | 6 ++++- clang-api.patch | 71 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 clang-api.patch diff --git a/bcc.spec b/bcc.spec index 9530a6e..900fda0 100644 --- a/bcc.spec +++ b/bcc.spec @@ -7,11 +7,12 @@ Name: bcc Version: 0.5.0 -Release: 3%{?dist} +Release: 4%{?dist} Summary: BPF Compiler Collection (BCC) License: ASL 2.0 URL: https://github.com/iovisor/bcc Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz +Patch0: clang-api.patch # Arches will be included as upstream support is added and dependencies are # satisfied in the respective arches @@ -163,6 +164,9 @@ mv %{buildroot}%{_datadir}/%{name}/examples %{buildroot}%{_docdir}/%{name}/ %changelog +* Thu Apr 05 2018 Rafael Santos - 0.5.0-4 +- Resolves #1555627 - fix compilation error with latest llvm/clang + * Wed Feb 07 2018 Fedora Release Engineering - 0.5.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild diff --git a/clang-api.patch b/clang-api.patch new file mode 100644 index 0000000..8194bba --- /dev/null +++ b/clang-api.patch @@ -0,0 +1,71 @@ +From c0d1694e28336cbe4a57f420dd33c5e3bfaa2df9 Mon Sep 17 00:00:00 2001 +From: Yonghong Song +Date: Thu, 28 Dec 2017 13:34:06 -0800 +Subject: [PATCH] fix a compilation error with latest llvm/clang trunk +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +bcc build with latest llvm/clang trunk failed with the +below error: +...... +[ 35%] Built target api-static +/home/yhs/work/bcc/src/cc/frontends/clang/tp_frontend_action.cc: In member function ‘bool ebpf::TracepointTypeVisitor::Visit +FunctionDecl(clang::FunctionDecl*)’: +/home/yhs/work/bcc/src/cc/frontends/clang/tp_frontend_action.cc:163:60: error: no matching function for call to ‘clang::Qual +Type::getAsString(clang::SplitQualType)’ + auto type_name = QualType::getAsString(type.split()); + ^ +...... + +The error is caused by the below clang commit: +commit fcc28fd8cc8139cf1e4763459447880768579d8e +Author: Aaron Ballman +Date: Thu Dec 21 21:42:42 2017 +0000 + + Re-commit r321223, which adds a printing policy to the ASTDumper. +...... +- std::string getAsString() const { +- return getAsString(split()); ++ static std::string getAsString(SplitQualType split, ++ const PrintingPolicy &Policy) { ++ return getAsString(split.Ty, split.Quals, Policy); + } ++ static std::string getAsString(const Type *ty, Qualifiers qs, ++ const PrintingPolicy &Policy); + +- static std::string getAsString(SplitQualType split) { +- return getAsString(split.Ty, split.Quals); +- } +- +- static std::string getAsString(const Type *ty, Qualifiers qs); +- ++ std::string getAsString() const; + std::string getAsString(const PrintingPolicy &Policy) const; +...... + +The signature of static function getAsString(), which is used +in src/cc/frontends/clang/tp_frontend_action.cc, got changed, +and this caused the compilation error. + +The patch chooses a different way to get type_name which works +for llvm 4.0 to 6.0 (tested). + +Signed-off-by: Yonghong Song +--- + src/cc/frontends/clang/tp_frontend_action.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/cc/frontends/clang/tp_frontend_action.cc b/src/cc/frontends/clang/tp_frontend_action.cc +index b8818baff..3b46a62a9 100644 +--- a/src/cc/frontends/clang/tp_frontend_action.cc ++++ b/src/cc/frontends/clang/tp_frontend_action.cc +@@ -160,7 +160,7 @@ bool TracepointTypeVisitor::VisitFunctionDecl(FunctionDecl *D) { + auto type = arg->getType(); + if (type->isPointerType() && + type->getPointeeType()->isStructureOrClassType()) { +- auto type_name = QualType::getAsString(type.split()); ++ auto type_name = type->getPointeeType().getAsString(); + string tp_cat, tp_evt; + if (_is_tracepoint_struct_type(type_name, tp_cat, tp_evt)) { + string tp_struct = GenerateTracepointStruct(