From c28f4ac7b0939c9bdab72dbcdb4b250d785803f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20M=C3=BCller?= Date: Thu, 15 Nov 2018 18:22:58 +0100 Subject: [PATCH 01/42] Build with LLVM 7.0 and add dependeefinder --- lib/DB/DBConn.cpp | 4 + lib/DB/ProjectIRDB.cpp | 1 + tools/phasar/mytest.cpp | 188 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 193 insertions(+) create mode 100644 tools/phasar/mytest.cpp diff --git a/lib/DB/DBConn.cpp b/lib/DB/DBConn.cpp index 73515ad22b..c3be776db6 100644 --- a/lib/DB/DBConn.cpp +++ b/lib/DB/DBConn.cpp @@ -553,7 +553,11 @@ bool DBConn::insertModule(const string &ProjectName, string identifier(module->getModuleIdentifier()); string ir_mod_buffer; llvm::raw_string_ostream rso(ir_mod_buffer); + #if LLVM_VERSION_MAJOR < 7 llvm::WriteBitcodeToFile(module, rso); + #else + llvm::WriteBitcodeToFile(*module, rso); + #endif rso.flush(); istringstream ist(ir_mod_buffer); size_t hash_value = hash()(ir_mod_buffer); diff --git a/lib/DB/ProjectIRDB.cpp b/lib/DB/ProjectIRDB.cpp index 38af4fb836..2dfeb79c0f 100644 --- a/lib/DB/ProjectIRDB.cpp +++ b/lib/DB/ProjectIRDB.cpp @@ -25,6 +25,7 @@ #include #include #include + #include #include diff --git a/tools/phasar/mytest.cpp b/tools/phasar/mytest.cpp new file mode 100644 index 0000000000..77f81bedc2 --- /dev/null +++ b/tools/phasar/mytest.cpp @@ -0,0 +1,188 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace bpo = boost::program_options; +namespace bfs = boost::filesystem; +using namespace llvm; +using namespace std; +using namespace psr; + +class ControlDependence { +public: + ControlDependence(llvm::Instruction *control, llvm::Instruction *dependee): control(control),dependee(dependee){}; + llvm::Instruction *getControl() const { + return control; + } + llvm::Instruction *getDependee() const { + return dependee; + } +private: + llvm::Instruction *control; + llvm::Instruction *dependee; +}; +// We want to produce a json file: +//[Function] +// Function { +// name: +// cd: [ +// {control: Instruction +// dependee: Instruction} +// ] +// Instruction Representation? +// +// dd: [ +// {def: Instruction +// use: Instruction +// } +// ] +// +// } + +void writeMapToFile(map,vector>> &dependencies) { + auto ec = error_code(); + llvm::raw_fd_ostream outFile(llvm::StringRef("results.json"), ec); + outFile << "["; + for (auto p = dependencies.begin();;){ + outFile << "{\n \"name\": :\"" << p->first->getName().data() << "\",\n" + << "\"cds\": [\n"; + for (auto cd= p->second.first.begin();;){ + outFile << "{ \"control\":\"" + << *((*cd)->getControl()) + << "\",\"dependee\" : \"" + << *((*cd)->getDependee()) + << "\"}"; + cd++; + if (cd == p->second.first.end()){ + break; + } else { + outFile << ",\n"; + } + } + outFile << "],\n\"dds\" : [\n"; + for (auto use = p->second.second.begin();;){ + outFile << "{ \"def\":\""; + (*use)->get()->print(outFile); + outFile << "\", \"use:\"" ; + (*use)->getUser()->print(outFile); + outFile<<"}"; + use++; + if (use == p->second.second.end()){ + break; + } else { + outFile << ",\n"; + } + } + outFile << "]}"; + p++; + if (p == dependencies.end()){ + break; + } else { + outFile << ","; + } + } + outFile << "]\n"; +} + +map*,vector*>> calculateDF(llvm::PostDominatorTree &PDT) { + map*,vector*>> df; + map*>> tieredPDT; + llvm::DomTreeNodeBase* root = PDT.getRootNode(); + llvm::SmallVector*,5> WL; + WL.push_back(root); + + while (!WL.empty()) { + const DomTreeNodeBase *N = WL.pop_back_val(); + tieredPDT[N->getLevel()].push_back(N); + for (auto c : N->getChildren()){ + WL.push_back(c); + } + } + for (size_t i = tieredPDT.size()-1; i > 0; i--){ + for (auto node: tieredPDT[i]){ + for(auto s: successors(node->getBlock())){ + auto y = PDT.getNode(s); + if (y->getIDom() != node){ + df[node].push_back(y); + } + } + for (auto c : node->getChildren()){ + for (auto y : df[c]){ + if (y->getIDom() != c) { + df[node].push_back(y); + } + } + } + } + } + return df; +} + +int main(int argc, const char **argv) { + initializeLogger(true); + ProjectIRDB DB({argv[1]}, IRDBOptions::WPA); + auto result = map,vector>>(); + auto f = DB.getFunction("main"); + if (f){ + auto cds = vector(); + auto dds = vector(); + llvm::PostDominatorTree PDT; + PDT.recalculate(*f); + auto df = calculateDF(PDT); + PDT.print(llvm::dbgs()); + // f->print(llvm::dbgs()); + for (auto &bb : *f) { + llvm::dbgs() << "====================================================\n"; + auto node = PDT.getNode(&bb); + auto sv = llvm::SmallVector(); + llvm::dbgs() << node << "\n"; + llvm::dbgs() << bb << "\n"; + for (auto cd: df[node]) { + dbgs() <<"CD: " << cd << "\n"; + auto control = bb.getTerminator(); + for (auto &i : *(cd->getBlock())){ + cds.push_back(new ControlDependence(control,&i)); + } + } + for (auto &c : node->getChildren()) { + llvm::dbgs() << "\t" <getIDom(); + llvm::dbgs() <<"IDOM: "<< idom << "\n"; + // llvm::dbgs() << PDT.getNode(&bb) << "\n"; + for (auto &i : bb) { + if (i.hasNUsesOrMore(1)) { + for (auto &u: i.uses()){ + dds.push_back(&u); + } + } + } + llvm::dbgs() << "====================================================\n"; + } + result[f] = make_pair(cds,dds); + } else { + llvm::dbgs() << "Did not find Function"; + } + writeMapToFile(result); + return 0; +} + From 185b8e0bd476a772aac78721a906bc028bfd2a5a Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 5 Dec 2019 15:16:20 +0100 Subject: [PATCH 02/42] current state --- CMakeLists.txt | 43 +- .../external/WALi-OpenNWA/wali.cbp | 605 ++++ .../external/googletest/googlemock/gmock.cbp | 523 +++ .../googletest/googlemock/gtest/gtest.cbp | 401 ++ .../googletest/googletest-distribution.cbp | 523 +++ .../external/googletest/googletest/gtest.cbp | 405 +++ .../external/json/DartConfiguration.tcl | 105 + .../external/json/nlohmann_json.cbp | 325 ++ .../external/wise_enum/WiseEnum.cbp | 295 ++ cmake-build-debug-clangself/phasar.cbp | 3211 +++++++++++++++++ cmake-build-debug-clangself/slicer | Bin 0 -> 10074888 bytes .../PhasarLLVM/ControlFlow/LLVMBasedCFG.h | 10 + lib/DB/CMakeLists.txt | 1 + lib/PhasarLLVM/ControlFlow/LLVMBasedCFG.cpp | 327 ++ targets/cd.c | 31 + targets/preparation.c | 43 + targets/slicingEx.c | 77 + targets/slicingEx2.c | 30 + targets/slicingEx2.h | 12 + targets/test.cpp | 24 + tools/phasar/depfinder.cpp | 153 + tools/phasar/slicer.cpp | 397 ++ 22 files changed, 7538 insertions(+), 3 deletions(-) create mode 100644 cmake-build-debug-clangself/external/WALi-OpenNWA/wali.cbp create mode 100644 cmake-build-debug-clangself/external/googletest/googlemock/gmock.cbp create mode 100644 cmake-build-debug-clangself/external/googletest/googlemock/gtest/gtest.cbp create mode 100644 cmake-build-debug-clangself/external/googletest/googletest-distribution.cbp create mode 100644 cmake-build-debug-clangself/external/googletest/googletest/gtest.cbp create mode 100644 cmake-build-debug-clangself/external/json/DartConfiguration.tcl create mode 100644 cmake-build-debug-clangself/external/json/nlohmann_json.cbp create mode 100644 cmake-build-debug-clangself/external/wise_enum/WiseEnum.cbp create mode 100644 cmake-build-debug-clangself/phasar.cbp create mode 100755 cmake-build-debug-clangself/slicer create mode 100644 targets/cd.c create mode 100644 targets/preparation.c create mode 100644 targets/slicingEx.c create mode 100644 targets/slicingEx2.c create mode 100644 targets/slicingEx2.h create mode 100644 targets/test.cpp create mode 100644 tools/phasar/depfinder.cpp create mode 100644 tools/phasar/slicer.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 2155f10fef..7e22e993b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -204,12 +204,16 @@ llvm_map_components_to_libnames(llvm_libs ${LLVM_LINK_COMPONENTS} ) + # Build a stand-alone executable -if(PHASAR_IN_TREE) - add_phasar_executable(phasar - tools/phasar/phasar.cpp + if(PHASAR_IN_TREE) + add_phasar_executable(phasar + tools/phasar/phasar.cpp ) + add_phasar_executable(slicer + tools/phasar/slicer.cpp + ) # Build a small test tool to show how phasar may be used add_phasar_executable(myphasartool tools/phasar/myphasartool.cpp @@ -231,6 +235,10 @@ else() tools/phasar/phasar.cpp ) + add_executable(slicer + tools/phasar/slicer.cpp + ) + # Build a small test tool to show how phasar may be used add_executable(myphasartool tools/phasar/myphasartool.cpp @@ -334,6 +342,35 @@ target_link_libraries(myphasartool gtest ) +target_link_libraries(slicer + phasar_config + phasar_controller + phasar_db + phasar_experimental + phasar_clang + phasar_controlflow + phasar_ifdside + phasar_mono + phasar_passes + ${PHASAR_PLUGINS_LIB} + phasar_pointer + phasar_phasarllvm_utils + phasar_utils + boost_program_options + boost_filesystem + boost_graph + boost_system + boost_log + ${BOOST_THREAD} + ${Boost_LIBRARIES} + ${CMAKE_DL_LIBS} + ${CMAKE_THREAD_LIBS_INIT} + ${CLANG_LIBRARIES} + ${llvm_libs} + curl + gtest + ) + target_link_libraries(wpdstest LINK_PUBLIC phasar_config diff --git a/cmake-build-debug-clangself/external/WALi-OpenNWA/wali.cbp b/cmake-build-debug-clangself/external/WALi-OpenNWA/wali.cbp new file mode 100644 index 0000000000..3894c9a402 --- /dev/null +++ b/cmake-build-debug-clangself/external/WALi-OpenNWA/wali.cbp @@ -0,0 +1,605 @@ + + + + + + diff --git a/cmake-build-debug-clangself/external/googletest/googlemock/gmock.cbp b/cmake-build-debug-clangself/external/googletest/googlemock/gmock.cbp new file mode 100644 index 0000000000..2cac45af94 --- /dev/null +++ b/cmake-build-debug-clangself/external/googletest/googlemock/gmock.cbp @@ -0,0 +1,523 @@ + + + + + + diff --git a/cmake-build-debug-clangself/external/googletest/googlemock/gtest/gtest.cbp b/cmake-build-debug-clangself/external/googletest/googlemock/gtest/gtest.cbp new file mode 100644 index 0000000000..0487ff468e --- /dev/null +++ b/cmake-build-debug-clangself/external/googletest/googlemock/gtest/gtest.cbp @@ -0,0 +1,401 @@ + + + + + + diff --git a/cmake-build-debug-clangself/external/googletest/googletest-distribution.cbp b/cmake-build-debug-clangself/external/googletest/googletest-distribution.cbp new file mode 100644 index 0000000000..0da3043411 --- /dev/null +++ b/cmake-build-debug-clangself/external/googletest/googletest-distribution.cbp @@ -0,0 +1,523 @@ + + + + + + diff --git a/cmake-build-debug-clangself/external/googletest/googletest/gtest.cbp b/cmake-build-debug-clangself/external/googletest/googletest/gtest.cbp new file mode 100644 index 0000000000..fe77bbea41 --- /dev/null +++ b/cmake-build-debug-clangself/external/googletest/googletest/gtest.cbp @@ -0,0 +1,405 @@ + + + + + + diff --git a/cmake-build-debug-clangself/external/json/DartConfiguration.tcl b/cmake-build-debug-clangself/external/json/DartConfiguration.tcl new file mode 100644 index 0000000000..3c2beda26d --- /dev/null +++ b/cmake-build-debug-clangself/external/json/DartConfiguration.tcl @@ -0,0 +1,105 @@ +# This file is configured by CMake automatically as DartConfiguration.tcl +# If you choose not to use CMake, this file may be hand configured, by +# filling in the required variables. + + +# Configuration directories and files +SourceDirectory: /home/pmueller/Arbeit/code/phasar/external/json +BuildDirectory: /home/pmueller/Arbeit/code/phasar/cmake-build-debug-clangself/external/json + +# Where to place the cost data store +CostDataFile: + +# Site is something like machine.domain, i.e. pragmatic.crd +Site: pmueller-pc + +# Build name is osname-revision-compiler, i.e. Linux-2.4.2-2smp-c++ +BuildName: Linux-clang++ + +# Subprojects +LabelsForSubprojects: + +# Submission information +SubmitURL: http:// + +# Dashboard start time +NightlyStartTime: 00:00:00 EDT + +# Commands for the build/test/submit cycle +ConfigureCommand: "/opt/clion/bin/cmake/linux/bin/cmake" "/home/pmueller/Arbeit/code/phasar/external/json" +MakeCommand: /opt/clion/bin/cmake/linux/bin/cmake --build . --config "${CTEST_CONFIGURATION_TYPE}" -- -i +DefaultCTestConfigurationType: Release + +# version control +UpdateVersionOnly: + +# CVS options +# Default is "-d -P -A" +CVSCommand: CVSCOMMAND-NOTFOUND +CVSUpdateOptions: -d -A -P + +# Subversion options +SVNCommand: /usr/bin/svn +SVNOptions: +SVNUpdateOptions: + +# Git options +GITCommand: /usr/bin/git +GITInitSubmodules: +GITUpdateOptions: +GITUpdateCustom: + +# Perforce options +P4Command: P4COMMAND-NOTFOUND +P4Client: +P4Options: +P4UpdateOptions: +P4UpdateCustom: + +# Generic update command +UpdateCommand: /usr/bin/git +UpdateOptions: +UpdateType: git + +# Compiler info +Compiler: /home/pmueller/code/llvm-project/install/bin/clang++ +CompilerVersion: 9.0.0 + +# Dynamic analysis (MemCheck) +PurifyCommand: +ValgrindCommand: +ValgrindCommandOptions: +MemoryCheckType: +MemoryCheckSanitizerOptions: +MemoryCheckCommand: /usr/bin/valgrind +MemoryCheckCommandOptions: +MemoryCheckSuppressionFile: + +# Coverage +CoverageCommand: /usr/bin/gcov +CoverageExtraFlags: -l + +# Cluster commands +SlurmBatchCommand: SLURM_SBATCH_COMMAND-NOTFOUND +SlurmRunCommand: SLURM_SRUN_COMMAND-NOTFOUND + +# Testing options +# TimeOut is the amount of time in seconds to wait for processes +# to complete during testing. After TimeOut seconds, the +# process will be summarily terminated. +# Currently set to 25 minutes +TimeOut: 1500 + +# During parallel testing CTest will not start a new test if doing +# so would cause the system load to exceed this value. +TestLoad: + +UseLaunchers: +CurlOptions: +# warning, if you add new options here that have to do with submit, +# you have to update cmCTestSubmitCommand.cxx + +# For CTest submissions that timeout, these options +# specify behavior for retrying the submission +CTestSubmitRetryDelay: 5 +CTestSubmitRetryCount: 3 diff --git a/cmake-build-debug-clangself/external/json/nlohmann_json.cbp b/cmake-build-debug-clangself/external/json/nlohmann_json.cbp new file mode 100644 index 0000000000..0171a76941 --- /dev/null +++ b/cmake-build-debug-clangself/external/json/nlohmann_json.cbp @@ -0,0 +1,325 @@ + + + + + + diff --git a/cmake-build-debug-clangself/external/wise_enum/WiseEnum.cbp b/cmake-build-debug-clangself/external/wise_enum/WiseEnum.cbp new file mode 100644 index 0000000000..64cacb9686 --- /dev/null +++ b/cmake-build-debug-clangself/external/wise_enum/WiseEnum.cbp @@ -0,0 +1,295 @@ + + + + + + diff --git a/cmake-build-debug-clangself/phasar.cbp b/cmake-build-debug-clangself/phasar.cbp new file mode 100644 index 0000000000..eba471cce1 --- /dev/null +++ b/cmake-build-debug-clangself/phasar.cbp @@ -0,0 +1,3211 @@ + + + + + + diff --git a/cmake-build-debug-clangself/slicer b/cmake-build-debug-clangself/slicer new file mode 100755 index 0000000000000000000000000000000000000000..a6b4d3caadea1af683db71eb8ca8a39a0310c43d GIT binary patch literal 10074888 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 &0b$1?SIQ&qxnDL>4QbUU~e3 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
    PY|w$+FY2 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¬cvMuDi9DY>_{}Fzo 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�VOOCA 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
  1. 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 z%0DfMJbXq_lV;7?k0z$(&;FR_5@Dy>m>yX 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�#T)Mh)M1YH4&dQ<5pLQOM z1(&>mCt!-%aIH&Wj!m0CV$#;WPp=4uy(t{+tbb;x!}?^Io0*hd5+VqhwLw) zzioD^&+F~uINkGlq2R)|IAwnc{b)VMnVq#NIuh-_(csGWIc4k|;64dgf2N2EOzFP~ z;Ntf?<)7TZ4dOU+idzLp?WKVWIO3Fj>AavB4}Pt{6noj=>_?sIeS6J#puMkQX^Q>< zZX?ZK7cO1h{l;K$(I=ehzH(cR)9ouqf=m9{Det8A_icCn&EK8s`(+Ne^4#kCr4)?z zcvyYE3;~y1P<_9Q0vB1#%Ax6(+Ho=-TvQ1w#{<3}Y1g}{;8LEjd4V4{bn`+MxEP^8 zT^HZy?CIu(a&TFe0(D)i$)9$732Kh=dKAdrEoe7>+%Sh&Djb@&Zv?mu&jNX7O>kGZ zbj`zR@?0#qfaeS3;nWY_=KV^0Uo9D2P_qJcyyE+ZZoJ9>7Ygn}dY#gYvuA!qbDfe4 zF7ed@`6%uSSSE7oZ1W0VK7aNWsK0*}$gk7t#L1nPyc~pTb3g%l^DTeus`PvpLTE zs%CtN0~h^ef%-hiIF1`oX-=`10xsaI0(HFljN{DO@hTHs{I><_xI2pDbmNs1oHV*X zeJ)bNX`hP>Xa##SS-TD8?CIJq99+z7mcQN{r^{aqxU3|Wzd;e6^rb9ap3|k9 zPVIqH?*I1U?CJ0Sf=gIlpx&qJ$8oxSAE`CQzfA?|^B`R~PIsR;1YGcz0`+>Z2gkXF zd!^l?z~yW$kYlO8wC6aJ>w#N3Zp4F&N@H9@V=fh3_%_B_jkzpvq1##h%D8^6%U?OT ztc(JAJk8%7jx)J7x@i7_aKkzMc!BbsjpY)@jnw*S1i0`M%-(K})7gs!7jvdSj-l79 z>p9N+PtEmeGPQS}`N2Yt)A>OLxTp&S>UAvg$+_U17Yo$uN@N+$C>(8Ry1vofESTJcb4u}j?<+Z4lYV8l*gdqEK4}f z{6Y5$gVbIOxRl<7>b&1$oNIp5`9UJM^gfJx#h6P67yWUe>MzYWPUkN<;NoIfIs7x&jT}1e=75X1Sg5Wy?r@yh^UwPo&$$`|m$W1cTy9yR{6s*yBRS4|w_+Zo8&6UVZ;a10Z=vx2$Az*t<@<5G?z!q< za5+y3`0Tu6-~wVyQLI9)$U0hbM~7tL!e zjx&W-m{ZD;2`dOjpqCzL&G_#J+VmcCcxeujx)Qy4MFo4@G9ERt4J=Q+!da? zSy7Kly5Zn5eTw9slsn0DFKf6MaPht@e_J`uq|IL`ez)+>92plB|KjwcOoe7M2>U0p<*uz zTt=fJ^*ZTGj?-O-#Dj}yf%>ENKIAyvxR44it7VZofA!!v-MEkiF0?hX*Pi2a_R7IU zgX=_)F28@FD@RaA^!K(bT`Ol#mu>{O*btU(*(jI)>C%k_mkdrx_YTMD(oF{Ee37Ng z?_cQB%>WnGo~6t0U+B`!1s4xaNtfTh(4}h!kopo!cOI8NUAm#*?60tN`TYxBy3yc5 z!71tT`xm-&6R5p6iqv%*f1R#dx21v0ezQn^LeOp+ZhNIe)Bc+c&e^3%eQ!gvKX6#n zFD;!h7QI!ZuCoSkg>;;1hdZ$QkU_!b)XVzX{M1o6wpY>m!)Aipta2eo~{`)qU zuCD*4fXj?#{gU5b(e=wraA^ZsJ@fUVt7j*;fEdDny@T=dsP%I^bPG+ZA|Jtu<81=p9hZ!^xG?z%di=I`4g*(QL~?1x;} z*vp~$iz|{tOyF#sJ+n=7Jt~F4|3($5_q`i(oGC|RF9clN=pwluwbz*A%o8+z6$LJK zY?1n&9?zMyei{!>noy+PFRsVgz>m{1(%pnBs*w(JmA{Rv`15pEN}rw ziqw6F`#h)JcPIxJ4^G*4IL~w1eTSefDDUwib>Bhb_uBWBBfte^vUE@K_O$87f=d9W zq`Q^pwCN^;i#^TKUBYp?{f-Q9+2`2!tLbmr`>na)aFVD14h0u}k(FZ#&uPmM4KDZ>Rt`=7(AHl9xRh*Gj&Zy_Z8_4wWnN|etl_l&oDI%? zjg@04Z%^AEmTnl&!71(0i|4fE2nH8@la-?*$LZQ55?po;D@PBG)6Iu*;DYW{tYOQ!Q<8=Gr0oc!se^4)*o=XQ8RJ&OI z$`4$x(cFCW4?mvE0aqSetX@yG#OPM>yoqkSlCY7V)4W)2K<(AzICEK@3VTh^cS690 zzELcXa)3KO&SkIbIJ3EzqXJdN=>A|k^)HqW`-8nc-o=`i`B#9n%#*-%{iawxMQv`H z$Z_i`4N`71IPZDI>YnAk$u3T}=XM#Ke^Rk}O?8yxbZb2N(XJcwi`8qitsJMjMr#5t zX<@P4md?nKR!3w|P;q`mDdsXL`M&`jmP;2CnOR*2aT4PS?hH;96}!d(d=yah&d6r9Uo4leQGA*CGQrPS=M! zf!n{EwTFh&?i~&WcPzbF-9sMA+0*SE&H$Hppjcjtwzg=>J3~|6o#2`rEmrrC`SR-a z4sU>)aiW-A+i>Y}-+iQhCBB9F`1>xSB^E{?*78cp~;_i5A+N;awAUIpZ4BjF}M!DF+XU=bJ}a0 zz_;K!$$uCy-Si-n;b=Pu9;F>sDzwE+sx_-GI z+;CE&-UDjOao<+Di_$;tg7bGPVc$~WINiM+?{_dB)F@G})f;e}?i#WKxDFmAYQL<- zak_rlAKdV|CFH6g)aDD2PsQvO5$LadzW^nrhOVob(h~v2Spkwr9aDy9{ zsC%?L_r^FgcbiYC8_PeiJ`QDhyu#Vk$TH$4GGHVJwfAIF8FB_5C<- z;SnY3eiqN^=YMb!JxkQF{19hPH zPWyaC4!D3A#=Xtk({d6vn1enmQJKdUX$LZDxDd2L!!CkQ~=Qxw@{tvh`pHlftx<+;9IP*U=Yg8w=INwtF zCCZgeb>+|8P{RfE#{CBWQgsfw&vClWrV9ZS`H(or0z^Or1e zF`Y`~!8F~W9H)CA+gCJ}~r-qlRYnUD!ryHLmz}dU8_HEB` zy61ah!KGJljg7fvaL#v2)%o0y<8GGEgF66^fbq)A{>%Y1+p#6Q! zNBv9HH6YKqnnPJPg@Q|rE>+hrS2%mR^-DCkwY@>Tf#7>FO^8TC&}-2!Bpy>CWakZMvc0?2DNnjN&=%cn}RP9h^EJ@toEV z62K)cWq#0`<8HHuYT+njn2Q4{H=LeSl@aGif2lY5k=Lf;y(pEA* zaOXIkA4Gx+UQ??6Uce*n`pDF~a^Rrzc^tT)wWaDF;B}7E?E$8MlTz8de~06A^L{2c z`^HlBJ*@K_XL4`F7+WQ-c;F6D(%D-BWKb|w+)jU6y4ld>AQaPTMV>NHjHSyDQ zbHGKMDpkKX&fC*{Z(RBq>q&5PslAcBJ=cRm)Lsa<%+sav4_@Ft}^f z*FCp5PIn);9GvBDsT?36Jk4_@l?JK3Alx{OC@hs1;aKZ0u7w!oBEZELm&&84J>Cy= z-?NAXmt9h-zNgLaALxFsA{ktGS*d!zZWN!t9h&@QfQu?GRo`>s_gY6)VoJT_g3EYZ zs=nvci?ipt{7^W1H2m43{+61hBgg6LITT!?N11$!)(gLfYT93!Fs+wpa8WgxJ)5z; z1aR@-lZ@f(x;$zj0^zkmFp%Q1a&lm+V`nuE%?DoNoRI7zlp>*NLXf?}xdDHN{>y zxEMc{ZbQzVF5MV#S^g|tE63^5O$1jCPD!_nyBDTQHyvDBWBmRk?QeHDPWRkO4!D4( zW$OEaS2#}hzMwP+?a_?Y^C6DY)pH2A)Zj9;AMy9daU7@fgH&*q7t7S^p3gW=SI=4CLcuBPoPHdqTj!L6i*3j3_24+2y`aG;FF3_s zdydoDivX9?p4n^6aXNdk-~u`@dp3^K*-Hjz=~yOjbVq3BIP-g&?Jt3zk6R-L_?yzUkFx|jd!Uf!>JiNqUr zVqoVT*m0wV*?)4fk6>x)86}`TEB=#Zq2_0f{Q{XRd_>R5$@K*vav8*BK}>KHZV3C# z_!X%N9Qq4Fy?+c%7KG!1bXO2A2(J<{%jA}066Tpc;7Qn$1&^1#7YL;L=SqD1-ExTI ziJ2S~{E{u?mSEp#AxS3B3l_4@)aj0e6q=+G3x3wd8)uy6gIG3D8!vq3NUA~h2#$3% z$P|+!y$1QktTsDt)F3}t91m-d6w6e#q~N_s4?=qMSSFCU0&R9`!@IZ7QGv`B zyz$#fD+KJD;att`em@E1qj5^%{xAGp?^VBPCeqiwz(l^VuQHJ-g6|gmXsvLHCaB~S z`__>m8097j-B>=Wi&LGhFH?1Vb-H&ePqg2gfei5y+JjkD-2acC`cKG4Zp>fQmfHSE4eP&X8MpKsmTf-vf0!BfDifEQ#$WMe(@}|@E(Rb z^!TUuM1c%^omL<62LEp6{jT1>KWRE&AkzihEmG>;XRzO|0>LMVZwutKFhTWg*m{P% zLC7281%dQzhKCsJ_XILi@GKO_VquT!BgxMS_E?Xrg7Do){HnL$k!}*knBL;Eggn$0 zJjpAByy7uk5W=w|quN*VNBh=UoH#3p>)nK3gx|G&OBOE7;zQ<~ib8g=7_&aXixi!cJ9({z?T?zTd4ISH_bKQ8w|SNY@lCe@qzCnRj30zfLK%XH*2@%nD(5^&7ec!DZWc%s z8bS3fZ#WCVzi!)2AI)2u#=M^Qq>^WHI0t3?ow1YM$8!!O8N=xR!u-X1|ZTaxPbLkN9t3~@XO zZtV2(n2P#Qx*p=SMgjZd!5?XYAjGsFWP#v^--o^_{0o0SHn}Y^3uDcgF*QE%Kk%LU zdcTA3=>3z<57;31y8cOlB(gb=w(oc(I$o&%i$Ipsv&jF`IKNSTTg)U?cqzk7)|x)P zYbI07m{?T4y*Eb5cLKKvWH@Gg<($X6_C$)^M~;bX6YA%g$T@X7 zpjxeD!4CJ@EMWRl>$qvna7`U6ecDaiuJF?rJwGF_e?#N^mv!}j+E@P8_nsAM`}s^2 zgeJk5(L8bRQF~1*{=ZfieuR$a6NEPNP2{}bxe-5FEG%N}Q}a{bxdIs{;4UGnUwt{S zCipr49euVyFUgeldf$7onSAE4&P?tJ&9TJ@ZW^#Df4HG&&@{w~4ok|6BW4&(|;$D*fU8w!A zHrZzKn{Oj$O|{qC$TG9zoQ>=^`{vlN{BumRlWi8?rFJsK&2hp`*17p++sWt}jtRbG zNe$m5Us6!RanKi^WAM%LCHLGNPkhN_(RW52a$R)%REInfeew1GEDuLv9rDP-cak4D zUemF~kKC>4o8d?H)^hyiN3PcL9qmuHN{)5@Hgc}-ju*AwwE?GyE^ z69UM!dJ>Lj2S_uU3%3FsCC`wt^=(rckU8}`V%wv>xUB)nuD=P_DpLZ*^MPb-p!N4a zvL{f&@xwqG=}91-Sv&Qt<6aQ?^I6~WAl%z`ta_e2dd{}AA{`Nfix#4|S z+1W@O-I!c#WS!NR+-oG^cu8YwWqo5F}Wt0D>@d|B-=!3Lrro{6!+C6b3DRuJg1g;wHDc0%le=eIa*7?ad|Bz z@+?n^Zt@gwdy$8p6iv5^CEny$>%b{K|~GKipSB<+9e!M@Kw;{IuzYiN6hmh<#i}}#9x%_k{ti2nGSNeu5E>b{83lJ znRJH|;faGrSXfUyN4aaJ;CY5}`E6QPhkaf8H@CnB0Bde|0c9(8zH%nB+FH z-U=q88#gEjCOM6R);A~1o3z~1oJ?_P3O9W_BwjnOm(KQ`(ZTt^F6ZB|BQv$XTt$qixB&HZ=005OF~}vOA<5 zzQ9o!(syq=lJ%nPOgj?aPQv+uc8ZB*?P;{V?Ztu)WK0Jd?c_`1%$La@FL|zbnUuXG z;dt}Q3YzhX?Nlhqf2HA#Q1aWWR+N9iYmTj9WY=r{hr`IWj*bUmB)*elYB<@{$+{$* z9O~5I$8fT`v*S)Ux!zeS2`A;9#VK!)eXob%_~sj8eiyR#&9>vZlACWj=5!^ayEs;N zB}=;4c6B9Jx=2v(byX6c+l@xv+D*LIofLMXk@xoyCq$5IJv@^lNL~*K$15WgG`nXI zR&_WcCM+ z#nEK%2iDEejx$;=?*4JdgSM3VECKtZyJ8=Zr`k%h@N06Cc+t!aDKYuMj%^sncp7afk zyz(0{`&)AN8yb1bNU?MzIWy9l5QhgCBplC=Q_ykW+5Q+se)-N;Hj2#oUiuLu*_Q9c zLkJ4K52Jt0A0vpVV+FEfjL>c`!iQr7+Zlv&#|jcX{|7=k*vuIxsIkWh;veydK2A{L z?;9_O&72!CIM;vrnKSO}wkrz{u59V-NKaJkU#IKs!v1=|&b%T@>yJ?}(Fv%5D%7)beZ zD+NdP8iC}m6#V}}n6pZ-C1J5TX|*72N4RpeARa?_ceM~k|6aTf&9Ffr>Fb1c^AHxT z6Z)=2cwxQJcQ?YVseA#rU<~739b^<2wy+!*e8}lq);pM~YBebFAxEX4O|{8*&z1*j zlZReb98a)H*K3m%Rx!Uexor)@@ll)jtDXFAYlq*mT57jFv6BqDgfsJeC8Rs1j%}+S zIaDWAIO|77`-?m3l0*JsIG*YdodIOMquqr1L`n@j+zXbN+LK$g+kn z><=O*8s5-UrkuRlU0Ck^U)1HfZ%~&hsLMm{2ZZ$!`Mu_|dnBv}Y*!>wB3UPTkwi~v zz86{PXkVBy~VEqB+J(k zU!Tan*17e`>^cqB)F(xCg09sk+x*(()hDTSKgID9hcxXO%<z{A8 zr4hOPye*><`Js`7GglkYXc>*WgIW5*z-3KIX48Q=eCn@e6k%Sx3#yee3?w?VB7IBIod(`^JS9LL6l!6t6vJk z@r75!yP@RKEA2`{$;MDy!mH$5sDv{sU!`%+zDoJOUKKZWBtO1J`SG2^lby(lPM%jg zk!_tM9N+6i$)laEP)~+Q=iVfz!rSD%NoKwwj_rcqWDCRbN_O6*C4pXsrMY0{z+E#wyyq&Tr?D?3?>}NgwF)+c1rC$`(4kkn5koRL4FSvfv%AegIz9MdsP4)R|%g#0*|S~xXW z#E-bl{5Q3*Y^b<+7}+YloRS$|*e1l1dtW$`V#&rYtsw7y)dYp#^&bbO;miN= z$0WV&YiY>{a^UL}O_x>oC;oO_N3Ti$Pxf!=b)tuE@7GrlZH+z`UJBEVv;PB@?h(?9 zN{<=XBg0h&{=>D&-_OzO-TzPL{r^JUDRuIH!S2)Q|Gzo+-?p9peh#(wjJ30%ncM#d zKKDPaxBulmkN?v;`)}*#zv>tN%d-9dF3-mVVJBA4@VVaw@dq>cQ^>>dRkJwJjTD>v z&UYghE#B+hh|}VMGY8x}uGxhXZdkaIk{aS-k&JPt`!h~a+=jghk0D2Ek});Cf5Bcw zO$lcn)Re%N)qI_hJ+;K&ByzYG#dms&Pdv#*PtO@%X0+*N@&RP=AOp=rc3p}lW(mkaGR@^-nQ>`S~D-6eDy+te~mwFF6=R*>F zymNfWIv)vVN_~`Q8*0-Czt_HOxo0D%{KV;X$xQz+9RFTdOsz-8Ifm@5M;Mv0u+MgsIl8*yC- zNo`9bjDAtv)s8HFG3sPHBEM+6+K#MfC*e$CJ0-&I_DKS$+a08gm&v%7#EUPJBQJ&F zIQ13rQ7Ad_%8>D|l3k&;d9RYIp%Tt)epQKg>s1rz%2IsN(q)9o;F z;f)Cb&gH%-ZsN zk>!y?uD(ZRzGr*z9@+Mugfo-=sTT8}G(z4#n~m#Be(1ASnA4YJ^cBbVBNN{b!||1V z;_?qjNxva!ACS9Iwj&>qgbyT~x&DC?`{KX;0chukVo85e_92aM`Xh1P$K=nCtZP3e zV?LH}y!~SZJv@Lmz;6S@6`zom(X;_dJ`oQLB=ZJZ&krQ)2TC};F;GE|VArS-xiv^k z`8QcLnEFKNzr};tG#X;f8bVTsNI1SZL_ufAP;_&Qm_Lj>ilOMyPsP#0$?u;=%^FUQ zd}d1-PVRjs;mn@lN`ya#(+Cqj7mt2Hj(<)gEc#N+i6y(g98wrd*2UT;eML^iN;tFZ zD<#6uU(pEnz7p4eO*Z_8Mi?_fygPy{8PTG21UWZC!tum!6!h^oj>OTp8~d$o6@tQV z9cK_M9BKOv!Gn>GgfX~x6=z$F;BK7b7=o$a*?vWE^E*d8c8Df?Z^LF0+5SCE@cj4U ze*7_a6isn1_KL2J6G+-P!J3Eg81|6p-;WW}QD$wtK;s;V7sQF!GMYSIps}t_5X6<( zM=zToSa%?tK2eb9-`GJ?V&x$OHgytqSSAbP3^tVTXUY$PI1c+p2Qlu=K{#fL;8=}t z=@g;WE`)z#KZ)wsu#ZI3{$Z+OW%X1+yo>Fmd)Q8bmA%sianVeHWKS2Yn-DIXAvg{o z{Aq^J>O8`U_}&iHixE;QDYFzS2WAQ4Sj-jivlT0s6S3KY3864iupURaZI0l$f-q~2 z(CSZw%jRO!2jQ%Fs+GM6k@%H)f|!g4Xci|aRvymBLlC$ZHDiHby@l}f0>M#$@UI0z ztBJ`1*}YJZsGgdvTDgo6Rtk~@aXTI}*ttltlCVS&?=Qvv+7iL~7~vmF1jqDc*hpF` zv|5Jn!csw^`jKU-m4^snWjgk&&R}2a+;YXrsuXN5twI~52-bNB$64*9zj2^=N~&g7rs)i`EH_LkO{H)e0L` zWb%4JqIxMpTDz;TS%qkaQUx)7BOGmmV&zwCRqevFAjKO6>q&$=HVKZa2rq6DT0KCx zVzVGoJrP?~)XIK@uyXZBL8LoYOSdRioLdF)JiZ$^D^0Nej__=n;3z_vmnO8Dyj>uB zwh0o|H*Qz0{E84(ina^lPOMOV+M!sPwo4HI{0VKaOR&la@9z>EGk0Sf?I)qt3WS$_ z5+tf0+pSu0B7~Kh>4JC;k2+^&`5OA($sjb|DWPCTQ= z+IvP25$nhq;Y)rQB`2?ugd~aJ;jVt-XcHMgS8EqdBAyg*nyj16WRh9J@gB3ZVk4fD zG-F*i#UgIT9Wo0gC)5z}^kPa4E1u=rSwq6{pEVS+qz1^{?&1v*`(l*b?jb($z}-*l zjGE-GhlJxrH5Kwg&DIOO$=q63g$>?BmcHBPP1blh&U%xhUeYaZlH(;7c$3xEFdU!s z5x3MPfB3Y>s7;b+&9BmVZAMRkoLgZ=(8`L{3| zJ_)!l{G5P4=Duk=(S;Pe8ANS#r8yqoO~jY5j&-9sp4CJAwFf>DWzFqDGI~fjF6p6I zx*s8-S|{}s_q|0<_6)=EoVUfRZ1PQlR16G%=gLVz7$>FPrTQU?C)nS??1RvauYFF={YP3gf;{+- zxN`*A@^u)Fr+p({_?D!8Gvv;OAF<>ZkF~}r+{BuPa3u|A-Guczw*6y>*N z!n2f{hZ|P33er|!eUXA2PAk+ZIj~X?Cu1dWeWhSsi0~0s2K4VWSQ*gxTd*=fOP|Kd zV8U8VziWgr{F#lFK?)v=EXB%TJHlz}1d0BA2qBGiHC6D3LzkusLAP=DYVigEk8%?H z@A^-9R`PGp89CjA+irN|p5UK|hty^YbhwWSpv)j?HN=PRp|@n)D%}rWOl8- zJ0y}{%lo)Qrb`meT$d<*Ujn|tQ#|KIws}%~ja9tuO^#Rx6?>B{-rhg>kTc#A&Mftz zc&ZQZzkI~mHd5$A@jq=FU50wfv>6~p7bLd>ri}| zzj()=?DO|5@h4~fB^*zvOTp2OiNeKtB%z+|Zawliz?K?FaL?*QAi4aEg!2W@h<5|Y z&IVyP-utY0E{J45+b)ORr|MgXN#r@(r02=GhMgBYPtt=Vs3)JNMvI=OaT6PfCmWMX zjcD9uO~gN5Ap4rMD|>;IHt9OGDLMawgfpv}QvO_1%0Fl-t_mhwno+(ySUlJqQ;TO- zbCTLz!tu@Kl$_GiF|IAS(=v-@I_e zwK~$Cl(v(g+;2~#&+9-FO6wrre~A=zpz#j8EY1rh*I$lW8%p-S(rR}o851huOjao6 zN54w>MX!qZ2KtRxDZj3xIIS}|)^W(v&SXcYR$Drg;!YCIoa{{bqRvXeUl&h?kxQ>r zep$G9mQFV9ZoNTD!&?=+L3Y0(;mou*DgV=(l)v<*IISyL(1r3jUBz|X$k=Y4>D@?T zHwnkbyHQf^M#<#v;`turdUr~$jS%xA$k7PvxSr%ngoNW6Jt>*ob2i!=|5yBny?u|4 zubvR_BX7znIr*|lIB8NI#}$)JWEAy}hbHkSGnrww!u?as5{`c{OZkC#R347B+9GDU zkxfb`SYAWC;ZF9~7(^Z4-5Xuugu8?@3q*>qqMhKbC{C?O@n-8TG#`pDpq(Jw zM;v1#IZ7wEWE1b%NrA0hxt(mb+ot)FEW3m=t9>axvyOzP*cR2nv(998UB}FNWJ6s% z_LW;#+*FS^>(0dK@d4t`0c1sh^?Cr=5g_3>H-JVhrXTD6slIsq8FH{bEyuP7Vp#)n zzJce|K=OM73C9ZpDYz;SZ^64N8+C0Zp?F{Hn1F?Tys0y49Ot~0bMIziEEA$=BPi$a zwDP|jVGTZA_((ZN_jm1Xtp%4k>>Hx3j+sa-UX7y9hRsl(4O=N73Ei_{i|Mmr?_jk% z$xXuX9yjT5kZ{}$#h6k<-0Y6W#Aq=lh+?KlQbf;dBH1oVIKD4Zu!y$XE)VfqO>#gP zywYlkxHWvP);p&qvRaaGoGnrCE^V=Op5kdQvPEgJl~!@34>@H0LBL)3bKWhF<6g0k zgj3gjD1Vyn48UJXKhW5y;VIcfJ3Iy)OZeqS)F#J(J1wB%REJ$ucv*WFdisB}5Pq z@AZPBh=Pg=3NDCxMcfe;m+KNhc90;8tP((00Rh=TWRpb&f=ECFS(JS-vaj;Lr>Z*X znUG(+_v-h3&tsl+pRV^kb*j3$x~jUiq0Z$EK;M>U{axjuKemFtx*|=f!1|+t`j0_c z6pT3)q;)|9*IklX@xA0Pu~G>NC4XE;IDB^w)+`Brc_hz8y@%+Y2bO5sR4olt2(?<> zY}D80_{gRWumwYnTpn3Rt3v%?x1V;`SxwunrEiE&P=-RAw4LBA50GvA zkEZQaq$9_#f#WU9D!-G$L1@P${c(8fx;wpdoHWdd^&gi< zV*ENO?k+8}R!B;TckxavTC@bp>ni-^WAD?lP-J$~9B9W5(HyfiZA9oaZ;{6FF`;X0 z{nB>QY7thcos%t2EGBPAkygO)3$TB(}zxdg-#Phx6?3} zzBY>HxmtgZnc7jFqfzu}lmVn`G^_WIhWf^6{j@>fiE+xWWAxr`Iu!HdNH-P6dZxSS zWUK*XrJL0Y+)#htqoYzD?%~+ zR2a|dYZLYUNwhyPW=s;DOEhpjJ&6?;CWW_m44IGbrp8r7{Zy6uVR>ag`=dJ|XprNP zdu#o4@xShNL%s7cYR_#e)=MP*LQ|)2x zUMwAX+tHI7Uyf;-HYl`6`2*MGa9zX;Uh_~}U>P@7<8`$;Hep?wEgrx&n`4$;+iAlV z3wQ`6e{zl4RmI!YBo3o0t&8XN=yhBV(m(2R+51;nQg(anzgmuG(LrSIgEse3JME1y zFnT}Lk%ZCvHI4-AzA!a12gvrwWAYJS9ywIgxbp;FW{VN}Beo=rO!u@WV1$0B-5Bqn zyhwK!wA&+%K{_pq)FtC>rjnJrpZFT%IZT>~a}EmPQ%B#%sf(1JL=x zXtyec`o$()a?|A4g#I2B6pR;n0^Pi5touIjQqOXaE%VZ$auX2;YsM4xbwx*8Ee$WJ zg%EXac-c5I*REl0rECrBSad&F^sn@^>jie2V0Z7a(?Yv}>z~oflCE9gPs`6D^gRyD zcHlB+ex$zNNrjQE&N=B*r>Boj8=VG_G5AnP*QW6&%Fnt!D2mRAPs>A5`Y?lfMz`Xb ztkE8PqI5M3Ae#(U-)ZE-uIHE6mj>xV`9`=NlC1xbOtX{SMai@# z*}(OsWDaF=3Tv)P(J!S^uT<9Dl%@}>M8BlPd|ZjTRx)rszY=S%tb_qS>r>%({9C)W z+D=T2(DbD?Y`ehsKE$r0cWbuYU1X;9o^n0Qp2`^+o&)F6lZJYjqQ!iD#qqIR-{V+O5V%zTx@KpwWf_RFn{Tt|hjbLO^u_&fQ>tbKO1jrl;M=Zfo?IN~1Ip%{Y3I3+%tMa3oJTx$L2A6)-& z8q~bPz6IgwBEAX#zDz;+Zs0SF`f#^M;zCy#Y)-3 z_uREHuV^>k98wY?Z|c=u4XF-#G(;V8Wu0>0+dQl6RAlpPwNtMBh{!lstXp_bh8zEj z-}ZPG@;m;z_cZODWZpcY)@F>wXpWPbw)@K8@fk+L&~(GSmsK}baWx3l{S)>GxUBi6 z+bW_1x4;%e34g-oL22LB-Wvts71Q)ec@*o>i!|4VHae&AE6vaGc2^s^S3F1LlTzKRasxpQQ_5OSsa>b?M`ysHdoOE=1`Y4H_2h{?VYV z(MhKaIvHJ~M+_}84B(Svgs(X<@O36e$JfziQTH5o>ucgD&*R>PbwZw`BXM-tQ{&e- zniXdN&o3u@O)Ups$I9sgi${WBZR1m&qaUb)^3i_}h zT@;nj&p~~C3iV5N?@FPslLN<7=x}n*yQzdpi@+zR%KJ*?`%2YER-((PoZ81L=^HaB zFWvoP25m?WoXVhM={Y?x9WlcIKDDy&HNP@^ov*Bq&ZI6?*w?8{Ucfvs%e}8EeUlY9 zTa|vv%IRH=mQ*!>e^O2OT2u|bE>+XV)}U_H+1J?``r6twB-{OcZTclUaI`jkUNe9V z0sG|y23(7UGl6l}(voWebFQTw*W|3emOia*K>t`>VeNcfSX*3A-+djetjE^o)z^DA zpw0E&!y8~JYhY>v`t|z2k_Pnk-vR{YGj(mm)=uB7;}`q}-4e6@7MgI2f$Q&Y5t{pNf#&4K`ubaGW@Fa;sEOY7 zc3R%VJ@|I&d|P1R?Ua98&Vt+N=xqk@A8r@E4&4r4Q=94=o6+p1>}%p3diT5Ni#y!- zEtz-k3{1I;#@(5-_%15C(*VBvF5&CwUGViubN$=9XoHRT??R|{Hmk9$N5>Tz#i zS__(RZ_ei}=)}DS@Sj=;Uqvn8YgS7gYf2WjWM9+n*Za1nukLq$$P*d^Gg{N+RyoUC z)9F?Q@cpfYuM@4|Yt94uwg>662iVt)hxGn!X#GR(F>R>d!+}rR(A0->zGy?|9yWj< zY9oA|ZUbMK?6{*XEq#Q2efp^W{^PXqQTIoWQ{H2NxmbVmSk9Wq>EdGs@S~3lU*{f& zuSNgVcRfKX{>i@Pw$lfcp3;AO znpQo-%1ywa>G! z#U1n!9cfz!_q2{Q?8U(69cliHIU74tw~hwz(;bDcE-%5?%9r$mFVojAv9Hfx(La2Z zcD&-A@hXk%6j=T$E$Wo>?W@%DRRj3BSB0-`uff;q*YqQ=(}vgB*YY>?qq&$i^@jU0 z#G-!%26V<$v^N9eAhx_2m;*8Xt-xxC6K@5+gD8AEa2Vp$+c}pYw&bGU86Ia~G9#CG zi{I4{z^|CoIIcT}*Sm?v_&LmJ{0Lu3AN0WZHstXhT3`+2(woV*7Sf}m>gy}kYrm(yyHZ{8AJl<==sqb|(XaA*``lk?^mNh= zO!LOxb|OB}-EDqs_%+)0EWSh$KM$?NIMiB4>Iac@$btPIMSD0SCTz@;(<3!>-0QOD zCG0-Yue<{K@H@$RKg4Kth=inBdLMGcI+)0 zn8;hK)mUJs4{TT=#(!7-R^z2(U?ip+X!C8?V%Cw(fvudz z*y91LwL8W{XzRnCq}b!PUYpU_UPZ%`T&g)RXKSOFSWt*bCS-Y)Ic}+h(&i0!A3H|O z+@tK+I5_Z$oz7_2F0<3ewj!y``=Ul;6P87qHh?#j3bDcOY51C6q``l!j4iwD{13}V zPG9bYorm<@VbeC*uIB+q$1Xc9x5ooGYIm%O(2mU2|={C-kqhanqFE7n^`$k~TF1Kfzmxji% zovCr29`Up+E-);fcE$NVj;Bj;p3maxay;7^mJk^2$4srHnSN~ZVXW|@10=B7PwyuB z_WNl}qURj8@=9VmXOlde0@TkJ*c+g!KHr%Dt@U|&m8Y-Dvz=Y#QL=Hqb=^>>w?-Xr z~GjE*u9*~;`Lk>ySL%fN{dG2JP&Jil^@n|{g?Mv<@@_1?23Iz zud*KEu5UM%bUo$9s@wZUzT=+`)H>}=$jlgSM$$ z8&)rH^?uH#FS64hyL+9TCfQxM-ez~rkJEnSCpbPr$As5u5v({WQeWl7=z6QIP8#g= z9OBV+7m!??)q8RG`d7MMh>jHvI7Hh_F$7*JotkMWYB zkB!CNTAW&EWA!C&8sd&AaAOUFf$JS^Ry^q50~Y`0-{q0H5gJA$MgaTGvFSb8ziVt7 z>c3}f8tT7iY#QpnXKWhk=Xm|aqC|Zc?;pmgG}otJ^x@}PV&3!9KA(Z>5q<-T6a74h zy(JJhUV%;reAq?nz4B;bt}CxkuSlEA^C0%SVr+VB&}|)?hSxJegs}j#2vTTSGKVoc zRX?9f-=xO$O{1Su4O|aP<1ogj@gVlRN`XVz;k1(PVih`8iJMR3Gg2pHV#$VgekKj6 zY~cFS%6efYovz#n*Hg3flUej-mb-gZ`XS4}^}woZ?enUvxxK1BusV&d#+nDK>z~x1 z9yMZ?)u3TD3|z0T!J6A@@T10m$=?<0?vdN=XbfLnzUce=@&(kdlrJXooP|~k3_20* z`O2UHh5=-^VL<&T=WpzU`fV)D6Zw0JTmQ~OYuv34duY7Ja|yf8c?=)}<5+z(&so?V zr+4>au_r%-?OuIQ0-g6hI3al}z4yvGE#7=7!V&221a}^9+kEqCshbsp9B~$O9 zZ*($^4WcWAjwS~_sZ4!Se9N#BJ_T(XI-Z(%xH9cet91#x08~mXsDkk#@1833eY%0` zv*~(nCdP{z;kqzW|1gVAX1Zr&QO_&`*Pmr^CoR zmd|ri_C)AC&{rdBpdFEVU!5*Qw!)S!Tb-U6I-PbJKvwCj{tcI3gIxN8C>kk-2m43s zOAMM8-KxN#-i8MoyG$|+AZHC$f0xGvSHdx}1W-0t>T7SE5y^Tv(i{q<@x91Jm6b zuw7odf$Qz*?Dar8LYk7HZ>UVOGB~91RrJGEXhoHnOI2ud6$973Gg)y+CKncyvH~Y+ z(CRE-w`|&(wE@WVYN?-O)3?>U%d%;7bpzLntLr=xSmr}zf_Yp)pYmA!rz(( zu1DsuwKX}cxi?22S&JrJ!GNw-UhSAKYtz`;2Clc%X3ZaK^A|Jzi~lZfmj6u!q6|8@{JG=KbyZ7CTL|yAR^WI_w6nPuq=I*Jxch->i(#4?5^;k#9ba)Q>r7 zM`Wv9ofbMh?{n@kfK1X^eKzNt)4GnGl7AKT-Y-#lKGx_(x0+?pk!a6K&OHW@Z3e6F z<8onAjJ_@wKaRrDz&?_P-L%Z@#3e-NMYLQN`Sq>=`p)kj9N=;R z*JA_hX*y?|qJTcQ0-Y75!{G}0OtfDr#;mBwO2v8!tmUgWF^g7IN?eeI=1aA&vgoJu+B>j9uX5^X?4(%P z+p`*dP{qLY>?-<%YILSbBV1psrmw6{!>hXstJC!A2Cjds&cXJt!J1QR=s#v-gB#Xd zP*cBLleW~18IVHgMJXtePg7KC;oF}D?IV9ot}?$>~L;y9?)5R6+ic$E*%?3 z=ZW&7YqY-9pfSn;;rYp+DTV>$yus?-xx82tqvOYN3dD0?;nt61>Y%&TyKz{Y z<{1))AEz^bOvTRFb+q|hUYw89M|-J@C@)TV^+gFZF#f4^3Dh~kyEB2tV_)n9Ug;0@ zce%V+m8c(1qV=M@Smx7v`Dv%mJ;F~XdQ|KukIaC6B}+CxITt>2j zXk3naXAaHFF>rkZTW8nNhF-&(bFR^k)S|Q3u;%jGde3WVSM8YL*V6IY2CgSw%bK5F z8(E9R;FHO}{^jPv0)f4;RPU16@;yTW}X|LwVN|0~`T+*d>IV&%4&Yyih94B6GYdl45%s5%yf2}F_YfZslYYP6nH3k0@Wx)T%xmEvX z8&Tb=tteN$VHu929S*|1AZ^LSbunw{(Usdnf$Iw?thqat^>=?1PZrnBax4A%T2L+@UN zdRAu5?N#)#nRLEN48|M!W*WF&mdTpyGT+1msVp56!8c}I!lPJUO&@~aMXKhWRGo6G z8@Qf>@B18WS#>lay4KKVWmBITtk|=rzP=_+s2Q`XCe5#D;QDAyRyQ3pP-*hqzehGzd@`3IGXhIBtLEUc^CRA*Kc4=z$QQIuL$t7z!&@& zY&cV%pT(I9`sWq#gJ$lH6=`xs1J^%PWX(er@htWQ^}#80EXYZGI7R=I7X!M#NJVdr zf$MKlS@DNdJd6A^eM2Rhl*WqV({+qKtw@i#lunz|4P5umV8tOB;m-oUx%gxNebJrO z?+|jie|7WWe2Z;~_%Y5OY)LEabl&DEv{P?$9$>lUwxof~d9VS>F&lSA<6D_+Utu0# zX{@aA%d&94W|WWl(S}(dL$vR$Qwk9#{9Jj>(f{x|qB7#eX%s#ehq3DJyF$J>u*L`J zk1<=MKl(I~^>>7E_48P-{5uy{%AetB z&*^Zr-(FXk&*o_4!0+vfS3>jxiTA=6Rl@?wcjZ65m;WG+rQgXb2TF^oB#Lc ziK;OVh31ogqrWk{e8F6-viFL($~moNm9xBePd)uKA~&G(cd!9=E$|vVq0Ic z&Itbvd)}Mq6{1%vVqW_D+M~*j2g7eXrS%#t^IWIhCDKyA(en=7jh<~h$Hbds=Go{z z*9sd(@)I}MXr}pl$tW)z;d?vbcend!p2gU8_4obmHkUo&Ys!(2A2+Za!wWBSRAm`j zS|_SSEWS)0!+!0i&Q<-sJ?hC?!8f($*m19<=vHkS{U4$4`Qyr;+30l-a%?XRyBbiwZL=L)MxJ*h z?T@4(k@4pu>61uLA18hRB>;Sbo;*DY8yNM|zK){PQ8P7QQ;nR?G4xSP9Ik(e32cj{ zOEC#YV(I-@erGtp;l1l?3of_O6dO{wk$Mg)fwG%4v(mlvnu6eGLt6%U^TlZ$>37 z3cz1Zx|F6$zH%33gyJpwgxcS#?0PCoy|V1)kP1iXh1-2u*$t29b+5~Kw>9l+(oT51 za}__M4Ey8Cu%Dvhzf1X}Dk`2zn(5J2xo0SuVpI2DoLnVmD7j0?l*c8X zr=;hfq46pVvs+iW+ba8Jn5H{N`EM9z#|+QZFH4>Y3$Me!&2Sqkw;67ca+~%hD|=@AP2BZ)trNT4yj^|0deHh+E;kjY>B^BP#FueI&@;*FWWc*W@d=_tv2 zK9thDo&3x4FI<}O%u)KymF%Eo+xJ853{`f*Wm$IeO*;ca?c^yt;j%0{1!lbPYd-w9 zROKUIu1x1#{JakTrMw#|Cn2C9e@uJf z`R6z7gykR8PI&(LEjt}l{xSUz7%0m%)BSyz+c_wdzb4FG&7vOxBdt{au+NtnyuIn3 zA>FT;?n%nk$*BWPy?$mPy{c&*Nd`-V)``RrXB1_6pAn z!%cUQX?J<3eNUL%w3pLE#<%$jsoz1#d?ii2x`RW@=~U%TQT|Om)7^HZvZtiUo3eG7 zz4^*c!`;$fu97p9q&*VPSJJf8Q`s@^-^9UjB9d4E~U&-bVN_U=;9UhkM zhVzyFS5mh9T1qp%t5kTVn|iC~a6yiL>{8NmQMyxiuWv^}Q?LswQ$pR%)+!9}^ zq-pPX8TPg+d(F!!drB54Y5IR?*p=TWPhWX|MK@sZ6@N2YNNM`(ru>=iJf)wKCg0!u z5mJ9?igf?G`TbiJj`=>B;f+xEYbsn5H{CPxW%vb3{=4s8LuL3nC3BR_R5C?LQ+U*c zDNVdASu{kZbKU|O-?j^-%u~{=pLZ$uu6astk(5i7Oj#`5`ARPROuAE+NZDM;JSCSZ zNuNvJqhyMbZB6%5$?sBf#xm*duv|)7A!S=7XDC^uzOR2v`ohx7)Hl=1bpLLt(v?=q z_@yY>P|18H=?ir~N){-Yvr6L4mCRGJz{KZE-i+rib-&@#e7@oFz|ZyyuWiHHQ(Kjt za9Ng}9A(FBXB8;_zgL!Jzpb)gpk%`}GTsGBHe4&+YgD+uCCdtDhO$$jWRa3)`Yu)W z!)00aQofY&%2Us&eLwl09T*^G{`;ZQ#4`s-{dvUpQ`tXG$~P9`$^4!rsSl|G(GWybOEc@Aq%TBmDg~;}QOT|CSx|{WksomJEOY zf6M-F*(-|=f8YPpaKhj3-?C@E-)8(K443U0(`_3O>aH5*u4&Qd{xkFY-L4XFl6pVv zs=sW$>CTr0(i+n}RJzS@e@p(i-iz>X%=rJ={W4~I$CPF~es8~w`F@-7H|>PgpJsX- zQ1yi=f6Gqz`*p9%CuaUL?V9+aEO9gbOVs^`f2V9!-$P3amHrlGSIOo|7AQ$uB|k$+(|*sP zGG4p(Dm(j>9VK&>Oxdq^l5#~$VeZ9Y?$u%L%VF;L??dC09p=6{%-t%?{Zg2_XPA3Ln0s27dt;dURG2$q zduaTsg}EDrxm$&~UkP*f2y+h&bI%NOFAsBX4s#z0b89<7J3?tL!629;|;}Cq;luqFWphf z{nbJl-)QAF+cOEuZ3?LcSH6s|*-^AA}ly37ruJcMovG4$w zX86BemiIG%fz(GcK-`~s-)L6|_qS6eZwB|5EF%Sm$>$c%)>Zklv6A;G*-pt$N_JOr zh>{bOoU7z2B@30@r{rlRBX`T^l&EB7CF?5LSjqd8Y^P)=CA%v*M9B$C&Q)@il7&j{ zQ}VQuk$Y75N>)~~u9A(Fyidt?N_JARyOKkcoS@`fC08j~sN_B+Pb(SuqY7Wi%1YK% zvayo)DcMfRPD*xHa)^=>l$@*NDkTe*+^6JeB_n@Q;VW5L$+}85R`Nb2+bP*e$?i%H zQF4NkbCq1BWTBG#lsv6u?@rDUO!`;W zCGS(RosylD?5^YxB_}93SIJdM7Am<<$^>X`H9?O3Gh39HM`)nt9s?nk23r|1s_{-TKQ*vt8 zum8_FkJhhyU9HDzKmJ6!de=N&w@&Ta^=dy+`?~Au=R97w_T$$+Ub}9cEONMg6d_`x zi*J?)YOmrp))L432Z(ID0ND59^xY5}X?0xohT~-=5CNYNjvG*cdg7BERi7vNra=V7 zr;ww5@wFb=7}xPxnzPc^9@1GsoXFJ@__Gzk)nHI_W`ZZzmq1?%0?oFdQGDH~6Dt3R zh!eHltg z;p{L*;T&m9$JuEt#aTDL!P#Z(!a2$~hjX+M`;110k&bhWQ5)x2<3^m_Mk|~>#&bBw z8L#79&gg-&*BFj-yfG1H{6a9!iN-RVlZ^E^`-~kplW`1ZkMS$cF2jomdyFbLM;bTc ztW!)rbVi?yr0f^92*(?^(6h(I)<1~nq&W_Z!cW4Xxs*Mg+$pRx!TGn#NYR8%NVZ6U zOwj~Hu74hnq>B@vJ2eL>qd6P0VpE*RH4;>fiJ+#HqP_)XoPgySB^0^J0qKID1j(Lt zHw>5|++w2hIL;E)e?a~q*K43wRfUHo2YxjJC)ZS<>1<}X72O3iiEn15G{X@kS8X8A zGP>qL+?>^EaO$fUUm8+&syWapCm#v=IZ;yjC>RniEgnnorl5k_!yHK#-`0= zuKBPla)P?ubXKe>sAHf+PEfaNq0+I@zP#N!P}Q8$R!bAjlkpUR%4gmkl)T-$#Er2n z1P)Z*E=NssO7sv=>+K3OswFhU?K-+w(B;!?raLZAx6v_v$?x`f?sVw%5VCXjJ(}i> zi`$c+oDXPDinBS^ZHT0uJ3v2HF79Eda+#3bF``05ye;lI)BQ?>W{3MV)7>dTv%#Hf zx?hdZG`Rbl?$=Pn#oNk_g1hks*n7jKRV+8lbp6Yw<>Jp4$z@XZ*EZ+2h&a-@P|`Vc zid+HB>`f9Usa2>+t({OsX$OT5@r{+eWiQ-T%DWrXW%j>K!sLyP)T!rXDDTjmhuOO~ z4an>R^(cF{MD$}D5jN*u@-{QMJyz}lQb;Mh2Zf(z*eLs`Re?S0UqXw#8%%|tODV7! za+P=Lw0DGqvQP3oOC@sE0jgoObM~437W7`AcQlTm?DO*F5;x#_4ro6d*%yk${ma{$ z59Aj{FRBz_lHz{_l&S;1ERv8CYQga&1IQ2}=>y0_`cAwvl*swABe;lc(vsp%0ZV!w zP881FAwFSWHsvd43vR}@2+)F;?UWs*y@gsy-Hm@U;4vKUI5QBT?mq`S(FH3$6X(Fm zpA5{O0W-;=_^rTSW&Mm${C!{rj90hf`Zwp;*Z~lMD3I5I6lvqH59gB%{oRCoUEtiz z&`p{pZG9gCTEpdNklWH8;MVRpyG}66`L9n`*vfNTG6cW4{gBqW4_X}ZY5O)A3VuXe zBVZ9L--Z~xC#?Ngi1uC+ZWp3`5pW5z zNEOt_um4h3eVpRJ>mOPlGej=@+DJ%!oWY7Yf;tJxS|3}eYIr`@`j{zlJqA?P$93V> zoHB$#COVJfEKyYztpX+M<94DHmS)ZYmG!X|t&V%N*2hx!X`t5nSfEk+$DpOg^|5am zc#(Q9YrJ2&%BsF2fFI&Sebt(%K3ANA{}rNL1@MhHvfl~OzTJd#L$sd&?3j!v(^-@8 z=l7p{xhC9Alg$j7M@9l(h9kR|Ru4N*m^o^4IR*FCCJ0z+Pxb1wp0)djXsV#)Q}%4L2;nvd`HFzWqL$3wU{&||0o}@Qp%wN&2IxJ8v6+>6<0irRJwv;!ad`)& zI{D53_a}neYvIV338)#v2SVV70lmfWu@Ja7pbt8tsyL~!RWsv!V#231E>z9vYyupW z1S6M2w6g&Tm~2+MEgq< zP6^RI2e_#p+SgmO^@;~kSG8DYR>!{Qpdqwwuy`(|wFFv80oZDMMO);%5u{LPdPOtj z8wQ1CY@wya0{IF}_&$q2@?8RaQ+a5&wY5cD1&$4YTLjRQrrsZdLbw&q2OsH5~W+vo3KLp_u0QX_tF$ji6@NX&z5%Bqg9HyxBbwx=;6Tla^!D?A{0; z>E(Yea!TiuhOPW@IM{2m=RLLxd@Ic!usK(v5Y+izbhbi~m!Z_`A&HaA@r#qH;Aqx{ zjoO@Rxyba^1Ja7ow#q+~w&akbc_}40OWl}C#^?Xns@ODkadjC zvFd&YN24uM@~os^BE zSv8HnR#f)!-3aJWhHGl_vq~Cy0Z@O2uh)8(yfVH~fEF?Qw-9(Wpxq4rU5mozwx;bv zfTGU#X-~l0UDxfOLGqZ@59`@a88vD zLqV=#h56wM7)4u{0PBtfZSri)1jVk>Nz8%KJF(T^ z?P#Ul&D(MBheVpI}8`edQ2wghd>G$J*kwLB-bfGDcBM<>D)*W z3z5BDwSWlp{Fsus`P%?p!Mc&?H4r)KW$qsHrQxUUp2Lw8rLE@tq1VUFlYa!DjSMH6 z>hHi9`L_Y{{0uzH#HV1Ul6q=Wp_0nvH2*aackyM8(j$LMIJ+`b&-BW#kS=>^`I6 z%mlQD;rp#HC0D>}9^qI$7K4BOoRlGO%|!zFYiVkRGInQlq-HiJPB#Db(Eb94|3+>w>Z~G9tU!@$)ZbKdeplkUOS<%@>fxzKg?kjlz7=$z1=20HFtoz9 zbbiIjwFx0#;Lsly9poZpaz(!+hjIN+w85~g=KO(mgKWHSBM14fbya}^kLdcJv?#c4 z1o}@L{-+K?Re5uD0FuY(vsQFCkY%HRzVK<~;vig^*m1S>mj?OY;J{1^jes6%8bkiK zvrnVPstezpsrv@dCb_WN{TmB91n4V__OqfhfzBI=$BrW;3B_FoS0NjeH(-sfD=YhP>D5>^rabRc}17FRYvoyCA z_&MgHOLMkYiK^o8mn+TH2mZrr;3{e*Pf6#<%4qspLP38W3f0R{cnu2E*?MiOLRuAg z6S>+~7v^8&AZ{u{;VqCN4o$5JoZpp&5l|3uxTg$-rBK+xLA16iSnlFSkWRjfr^-<9 zf)o}ySQSJ~?Yjn?@ce3N?mlpDvf($aoF(Mmrb0KXg5~CBL18;v=xtT7SU6@X46rI# zECk-bzOp#{L#zrG3(ZW0(N+bEg_oc(k}Z5>Rj^o?W-5GaRj^pt3WalQVMggZX8V`o z=2$tlPQFxdx8d+Fv~p~ie637wnU$0N-UgTWbS(MTS|cR6;U>4q%1N8^!R^Q4585mR zhp4@{UzmLT(2+I^hrhB_;ZZc~WZS~G1Y`_9uWXz3#oZ0K3wr7NwL)MN1(b%vf0K

    ~5XF;k{g%s{`(N9R4@0oDA=E;Io+PTAKR|_>au>Qt2rwH~BDr0iI|BH?TBU z33xuobE4HI$5SO-LnySvR002d+v_dN5?7R57!d(3xYbrp2HF_h6YTH1Qk?%;)88?4 zaf_0d8~&p55CeNM3;2KaDDz~us)_eSG!i&#k*{8y3MtlJDuyk|Iuv_wl%)gyX zu7Z`5u^$9(2K%dI<)pv4CRf$UNq^shdy)NJW96j3pH1#MD<}M+)nr30Yfd%e212}= zY9_Bsrkb7PN5h~vk!vm*5OS)SY*w5DMXnt{0-*HHxC zNVpx#P`w2B`gJ|>OI%mzqB*bQw^h2jN|$VJxwb%|S3H#Z$rtsANPe%g$8E%*qfIrQK| zjs)P$2OlPfAJ?7ux((*?*IQv10|>!K^-63$_>A*k;B;1yO^4JV^#8$jJ94y~xnL-@ zDS&nizA6eQK2d510KFM}#{v!nFqOex906r>Hh@9~2Xe6{f~3@a0O&1%V_8!KB-P_} zpc%|ema!AT#peKdh|zf^sC*gva2(@b1UH!Z&-F28(3YzSjPZ%$M?z~cYp#@*L`=n7 z62BJkS*BJ?YVS>mWPIQQ<>5<-US7{;ZUFiqj^MhI2vPi#K)N$pU_}Q4nZ@WPEBZN* zp2L9_TI{C&1k^PYsOUkL2_r&GO#*r|Gut^y)U#;=pf`g%E#No+8yVbV0gnLi4+FT@ z0@eo5hQR|CuoHlM21U2JH42{s-NDSU;_RWzoMH5m1+C~p?&WrMP!nC}mMB)N0;(BjZbvwkF7iAo7HNrZ zSTA|_lC2WLisvs0{@@fZi|{5+4$KH6$=(pca&e`LY$@3rO;#k8#BMV&kFfFp#~8o1 zB*LH!5!2SD)AuOY&aCl}YJKE#PWHbCXbHn@p~;Y*$i{rhg+w>t2%3{zgu1T@pr;t_ zV720V70?F^zZwF61ZWk*Z->B}0bO9Ydk7r61$#H+2=)nq8vts<@Zb>mX+S+09v%V@ z1T>T3k3!(ZfOauFB?SHjkb5iO*&%QM&_5V9TXFK{?*i1GVY2}z(u_!ywr?*Q)zfy)E>2gAG7ID!bgEk8uxoxpiDXYi24 ziwe90@LtTB(0ZH^wr+Tmsu1Fq z9r+HL+(H}Itg7(vT?AaeI=n0^?Zv%AabJdbNdsILM{r|Eu4xE}`>%sPShQ7q?>D)_ zR!)>=zUNFX(q0lVQPyIL7Pt>^1e2_sOdnoVD!2?QC*PAf;J#*mb*!B9x5eZdSvl$N z5IA0K8obxaNq+`#!98l_q`zcvb=hABD<}QkXmT%FIq9zjxM$ekYgSJB>tu4TTRG{k z7r1=(muuyuzmH9>vz3$nmVn#H{(4$D`Qq#_x#3n$+B^x4rv(Pb*+q$9sY89nPNEbX z!AVw5+N@@B)2y7d*$CVN>~EHp6aM^<0Dp_Q1^7@Yu1U$)3s^qmUzYYW9{398Hir7y z0PN_FdKBDM%8zd^xQpy(e`!wJg|`Mr@K9;4B5)D+pRJs@FaLGmMBGoC@sRiX0B{la z3#I+M0#3x;7NPD}`uPC3h`TeQRJzXuC*mGkn)@1@hw%E@^C!{jPixm9A)S4(gm*k87llm1>Yxtb9ih-#R~@cM$A$o{S^?Qg2d z)rsIhls^%ke+9Th?C&2DT1lBHXU~bQ68~{iqoJw6Axe$y9A|&x9yE$@1RI$e9AB%A zTTG2xObrfQYU~mB{S-8Mv5nip&LGFILh~{dCWBnd3U`;Gun}YtE3^n#Am2IQ zzMsIgEX}0?Z^+zzrMcUHw`cDD(%g%{xonM}! zWaVULoeA#xz8VT-D<}PZ39iOO*z8%F+hcNhR!-VH4Q_RABn5|BIcd|4C3gGw+bNh| zn#(e|NmfqUYyhq`j^L+OPTG9fu`4YbbuEOJWDY(kYNq_xJZoQS0;f(|L8IE9~ zm6QIKncNRnPWsyd?icpA&&o-Er%djcm6QIW_n|)kNAR4Llm4!;99dk z!^%m251U-Pm6PGU1g;b!R6pUH%}?94)A8o-C3Hu8+ZriT9oGA1U`bf2TF4jfq%hV+tOSC@MFxi zE5-TG0Z%*t?m35Qh5A$Btk2LJ3X-p*zag-P8GpA}wLP3&80uwJRrg}96N+yKcAoJGp?Ks$WFs8Gj}?yYaX6bXG$&NGC9szn|GZeWGn}ItT3HNz4ChLQ zHir8C8d$rFXqaKu5>`fL0{(`zFNSFE0%SW3*cNHE9S5im!|o8cF`#w~2O{}hF=O%)pn(im zj^tOtg!2KdXZRXv#L`{o+YVei0`6}i0eAt`W4LJu+yv0m4Bs09zYb_L!;gf(vjA;j z__+}HARyx?;Mc9NzXBkh(j4p(soESRi|G9KfONcD3B4UAd6Jt1oK$kaRrDMBqt9R< z8Aq^BDK(4(f*8c)fYPLI90(D>@JKm=lWSI7YKUhQ6n3-kQIRDj0Qn99a-9V{CIn6Z zRF~n8B5x4$e}p*^N#D&TH_^h8?+L(t*~^p=I3LhbhG&Mr>i`{Lcwywt#Q~7-ETE)w zfS1eY=o~uv(gEGX@Rtf^Kj`uR^c2IJtWUz%5zzY#7ly#20WD{EZwUMipc4#Vh-_+! zN%VQ5G#o*j)0$pY0Da0|49*bv2Eb3VcB}wl3!6n^rk8;X3j!0lAeGGM$>}ch;9wL8qW7)%`z!xWr^NlPvDCCST+QqDnY| z*-lZVm2_g0uR8EMnY+d*W(HU||AWBaVy>QPROHfP%PQ<1P#MQ+f48cUe=4xA7;g}Q z`wD>-G2X~23J6P(zSF=x7s1_Jit{G|uf^Q0q4xd;tQF(8J2^#E;)qz5q>!%-G~Q&b zJFHq3h3+6HvqE#LLb#dP(Adga_gb|qX7+=Oy99+tRDz0ef)X>uswJ;H`BLEF7WUM> zl&9j3T%_lVz$;t^H>ecn&jfxybHl6ws^obQ1TQ@aj&!Pbl}8LeKo(8T5;Lkk zM$wvFOU|g8%hz@E$d~`2QS#q4=Q6lSx*ABA{`@UuLN_UBRf$$(1+h^%3M_r!ZpE2Y zR{yE+uNiXHd|M7kCifiJh>Mo3j0RbqCru?+bKL<29-B<=Wl?ZF1=Ncf^~rs{w0P@= zNj_sha_` zNiL%E0Vjc}+XyJnlu90DMcV@9nNrD9WRsjN=wc+r)fp5Iq$kf}w=`p!fZ&>7^7F%Z za;*f#a|MzYm7-1n=BWb7%SutnfEzKjsT6f5V4l#BysZ@V24Mc0O#Zp#zSKznAW$>d zms9I4=2nUH@vR<0bR0)=tQC&hzs5sHd7G6gTwF&Y!6Q-X!xxdOS)F0bVk#8F5@OKFeIEjL6Mz$PIE$6Myn}AU2&xIu#>=#As~zg0h`A- zei~fjqMz8m+{7E0xGXacn|MPLzXs2W{P7^unU>}y!Be22ox_cow^aZ25- z)G1cM#*b8U3V%+%2V{&W&KPO8*kczrfm^HE;Vu+n={HV7 z%jQ;eKrZGer#EEhZKg9ruy-n_e5W23dV+Y=B(m>8Zj`2;FtKGK3GRSB?(0u`+RlIs zMi-paf5FsWS7P^N6B{gSyky#V-D*SV`-Ym_+g48c`^MzDS~(HdD9)<<4prleL72gi zf)r|xH20+aO^bcKDW_0I+BihKv1W6&M?7SGkS?&>kz)k*oQQNP>+$?u#_$0MCugj* zdyAp_0lhuZLusu{pEYko5HSPqB4JYm(*MSA-ufb8-ff_c$Ol5ZXG z^ElEvsT?b#;QWZ_`|ItL_NJ-+x`17@Xa#0K2}a<$3k#iilp^ZqhTZ9TNgRV=S0rqp1-sKrMc^X zb7_z^xD;2MjVaS{YAk17yB6z0ijtQ8%NTfZAoD)X!HDT^eiw9Z#gV3KHvR96^9i%> zfOTWMTBv?+VCVV+=efF$zIi>x}^@geN{x(Z|Id!JnVeC!U6ew^@CT$Sm;mY*YIbign@Bc^4Nt$acEzlj-aX<53h{5mjPDWqi?wn$b_t7dan;G2`K z>e3|_>WJ6MyAN6-&t4PGsf?S149yD#(yo;cB9+a#>I2>R6&^$#EBXjfZdRw&lMP*= z>+J$`=CiPXj|Ps6G)&o!@~Gr;(`wtZx}%852a|TKz2t4QRBtsM%b*casaI7;b0VqI zH4_&+MY4x^F$p>X`PjUeZeGkZFJ_w;^URBd=EY~Ypqh>W5D}Fsj7A_-cnVIiDB91^-TrGXxkycvPW1kR}LlZ3n zoAqVg{GCfWUeNTc^#@u+N9mUV*VoD?VM!W*Axhdk6SOcxx6ckeNNH;Ab+m(s*6=_^crg02^ zc9f*CcL;cq#tk*6;7XD>inCla?4Viu{z44*aKnF23%IqaLm%K*uDIdfm%k568vepr z((q@e4D$w|SKROy#IDeWzrY5to^RuV;)Xv1nzMu}Y4{6lREb?~_zUa_VdIQx<8`~m zhS2v_z)gu(*xOc4`fFu!U9FsmYZRwsNW&k6P(%&_5)J>3_j3xBH2j+&9^nmtf!!e@ zUEJ_zjQo$!u{8W8)C*8?!(aH!Y>6OZ`r;Xw4gVRY4mbRZb##&5{_P-(8~(*4`6A{P zH~eMhkm1z=T-@*%>a9i89spk4@Gmx_!su?2-0&BqNGtyjz>6FH;hv)ADUuuhC7yh@ z0ap!wegPC$6_*qO!WCy@)Sx#Yhlqy1trch9l7@dH4n~%356!kT{Hrj| zC-RR1Ufl4v=&uJ}-0&B;%#Aw2DsK2Qjtx}R3sv0kzZQNi4gaT52w58bN$jb(;h)A) z5mEGxfu7m$FNP)ODg}3efubxC_<&6tY(X{Y>p@F3{BJU~h9;wwlZmXfI2Wmge+Ota$%U;^ zCAP>l#ze=I_{ADwps%p*1gowc8BL&5EV{+{F{I(2?f7&7CLfyZm}`Ey||sMql#L)mftE=;%_{JSZP(C zMJAqYXd%j(3iYsvjl)m6f zDsiEoCBhet1Fpmc79(tU5OGmzzHYbJ5c<9bCik|Llm5DyTvsb6;u^IVuTV%O&dr=x z5Lr=)*L#FhsH74udr0&5;_d1xDppWkMcu^c?{3Mti&s< zR61OV7whOEz5V}>vv&{hq59+h&&=+7-|ty(Yk4o`?ebphvUauF3wE)k+(Jc4*lvnM zHbWKnZ{`M)mgpW+e$Eo>Z288N3jzSsI&TL2;^Da z@ZhY`bgU7~IRz@a^L87tU4u4Kb?5b4uLR@I7_r>|f$Glt3IcgnH#|5Q?0R9iZk}UD7)5>a+TUzVW%E&g#9i;HgC{@N-9<)t`hwp4GQ{9@P2z zDDqI9)j!s%nZJ5&l#1$>I;)Ef`mFBz5>Bb6^Zc;Fxf@iT)lKbkO&1$luRg||)e8eJ z3 zfbZOs14-L)&}HumJb_M;aW`R5)ozjU^;Z02uJ&grO1ZU9ZmD+*Sa3k03BC%)HiZd2 z@1w&CP4m$ag_aOEwhg<$F`|<{??}N43i91Ya2Q?KMjlQQ{0UcTEo6tgR-w* zjR2fJr>8cZF-)A!$el1PsE!nzm9YzF3dl zB2wCBNuMh!tg*hhc|%|tJe_T;4nOwnUI09fd?dx;8-Qu5>+EF9NQXO0H+zZ*Oj%l4P@wE5gb0j580u-xekzpm2-dUFVR!=~6)6*F>*=_y zS#m3MlP`Eip*sjUGZBUh`PsWU;p9oGo$cB*$1riINF`)17xH`+o6`}5GhMyzaX)!4 zdJL5F(hg)FA6(6_z-S@U-0*D+;nNheKL(bHF@ zbsh%gDzL#w1O>y4_1d(_F!7UH?|F@v#m`)UHzJY6SKq9%IK6@_zIVG-K8w@6EN=d@ znZ?EyvY56)t$YEpm{CVUPV};X%Hm6~ZK|DnwP}uF;!u%2FzGDj*qk=q194e=Ie9O7 z5maVzFVDLuO1)gsW#=+wZOI*)uDaIOI=et+78{A6V0fs6Y-7_V!$e_4DrFY66J8ci zzB<4S#oM>2EUu`bICLtZ7W)mwWOD2^6vh^^n6^SweF3tV(es2HQKqwa0k%!G(@C4= z7$y!Cc^oF4#T=Wn6U3~=OUQds=2be2mwDbr(XE;;Tg{ZUC95@E^`5VFEaZ*MVj~e0 zOgNpjX_H~1up*T*D=v#)?-vmDP>bu`rn1YS>rT zVuvYfOD1W$s>Ihir$A*E8;PJ`!s&r*leO3|QCN{mnH87C3vZPT#kkx5rJ%9T+osyNUYq6^CJq%@0F%yQj?Fm%V%FmE z=i#ayuEf6z{*OK?5$~A&2i{JIU zi=rDeUAB=aYfE0&bk(Q6)(IkSWELBVpkTu3rA?a*6NMG2lv#0EJaamx14S0UGW1_+ zF}380~tTohm>uEyi?DKONz0OSFiJS?l5Ggw7r5=QMm@5-f*uO zUcD^Ay4QKD!)&n1g$Z#$cQgd5^VSg1YABDg$$d!+PMIE9!1?HYt_5j!c@I<~DkuKb zDtZFTJH;+IJKWZ&B~(l6PqZmhm4Iu4d%d6lF4#{wfV2kU#HEdg9 zi|f4gZTylHH81oI6KVoKfqiH=RbKxIYz>M=K7qaAXX6Phz3&sEg@`@}?mdAu^q+xy zPhgqL+897w-V<2j@^!7ahORZj8c$#+;D9swYX6|>==IeGyd*~6fll|;dRX<89$)c7gBua=YUbO$y2 zY9)OL)a$j8yRi^`|& z_nY{kT0>2|rwQ@3aP(yuy(Zo>3U?2462Dk8Uq5NVCg(pb}9z@sw6k6VE%vE;u{f zgD|Qlo-$PlxF)y})F8G^vJKl|%6qp1Y;jHeao~^)cQX? z92W>G!T1SAY`;LD9>)!aKsND)2WPRS6O3TaF;Mey94Fm57aub>n|MiwfVP^8CQ-d) zBk5b9vWc&W*2l~p)x`g%1y8kPfuB37iErlM%SznD_whWa#(ORDP&M(lYt_t$JU2?U z0V>tRFN8`q@xCwN9M*K6A67V7s8X_tH?`Mky4cWqM@C!|Z$E@Dd&DN;rh&dVSMwZ9 zH+#?Y#$seyX`1r{9W`lN&sw6T75F1BMHG(4`^=p?$4(M@4Ihg;KhW|0pqP*Qin1R{tS0(S-XQIH0d%Cb?s5qck=+zL&dhQ^A{Nc>HQ5Py0h zg;n?f9fb+eH%mn1GI*f|sSKY>@o~y6zXFBM&IZ2}I zkuSdl{onCAe`w|8@=E%!giM^%=L6;L=?X=&sc+wT52AasEm1aGe$tXsB2T=L!!W(d zCbcKL_x$l;C+$OgeeY5Vw(Lc!(wu3|IUfC-sobqDpjEFfukG(qQ#%GUyD@1gGMzCC zKp(gm*)`XsTS3?M0G&?-q_w|-cEpP_WiQKbn#nXoH_C4Vmc1gsk0WVo&$b&?;>TH~et@?k$=g#}lU!i!PyL<&B6e)V80LtuqJt9N75;o_>welC9k9KR8d&bT4IS;B%LP7L3Dzgc10y z)?kBzl!dH@BrmH3M~5l6+zhKtHO(%9VO~w>sOzaLO+BRjmh^7DP587Ieq~kE6sZ#T z1foxjm!(@2s}+=Z4Dd2iS2dk9Uk60bh0FBUB{(haL13EQvMge%-IUEiQHWnzb?Y?J zAX6@9schXE{ARL6E!sg#_LY2rv?rJS6JCjb5q<|tEBrB*wuml;nDa7Q=OtxXh!QO` z)J^|1D4OF})>OLW=0(l&(hhte*_x{qQk_?}5#Y1Q*4iq5)T?;W#Xx%r(;#pzJgyn; zNwDf$z%R6BqpGQ@=Vk*vu?tnNy%_^nG`Fv|bvA9%-Bj22->o569JQ#?+CRNtYlAn`e9Gw9~AD}9ufgZe%G)az# z9tQu170)ED{jE1q(YjIUH+ycfpr$ha)g=&pqE_?IxQG%C3~PrF~kmirZK zZ^#c5%EO&@S-43%@$K3fu)V7qJ1;|pTL{}16mDaptv}f)+?GV!OxSM!8n&H@w$EXk zZ6o`?G|ERr&jP;@0N$haO}LH!gD*Ie@?e~@D{$Qu;3J-LI8fyzpyP4MIlyB{dBRhE z1oS?kpW~FLfrCNdUp-~k7dV*`Iuobt1-yjtpPuq@pkN5dRzt02gYgmYK*9msu+pJ} zyxxU+K`1p&*%gHIw2W{EPx&4;4->jLPI(fj>Q}&BJ!K{~FClb=sdW1St*1RI zi^CIudnE&3Z{p~3;63EzM$hlh*o=G)bhD{+V?Y-WzAX-440Ide!6uH501_|baJftQ z4fXqqT8bCI-y``wI=<)@Y+gvx2R(Ee=zc=uJ>>2QVoq=bd`vrxkwf=du!o30X(#j7 zA@>)XI%uf?_RG`j}j(DpOrK$qz6Kw#(HwvfHtO zcOiBou6wATpscOC4GQWCE?aE+aKF`fi5bwf_8~?LvMzhoraMQyH?@K3<+rle%#w18 zf$7e;Y-!xSU#{`8xP8A3csQw-$EhFIctxE0IpBW3;)J=zuJgFR?{sf_5T>&B?mDel zYqw#A-1kPvz^_Ts!99t;m&nJvrVlrDzrr7w0o}&Hw+*;hlzn2C^3|LyviCLq)L!gg z@~wE*~2{K~$F!+U{}4+4K}pTMUHRdz?K19c|6M^{*~ z3im3o`-$(5^D+r&Dd8h=Ufu@!f$%r+Ue1DL9RmM0&PyRsZ^A#sc^L>ai!gueh^~D( zEzw0_G&y70&+tw;FF!cn^LM(m=DU76pGJR!EOHpZ|5P#&t&Pp|2_<2Wi#+7IV6)Y& zIA~Ln`2H{S04kq|4h4Si7T_9C%F=imsQ%*!Tt_Np)Ia=9+4C`Mr|>JQZ`d%(^GHy% z#IG#d#L-?rlL()qoQL+|eFEXm0_$@tO0Y1AfKKAuz~7U+x#`7C`UaoO#;>fkiL18< zx}EU(NiyNp$6)Kjt#I2;lF9^l$8qc4y>WqEZwodq!W)6z^KGZ}JH62?Q2M)GZ=PA20tYN=@jwbW>z-)`*P-3w zPqBwSh1XDZbg0OF8t$>-{t&(vk^x%cgj7kr)R%mX@+27IIG;zQ7A70~``kXYryIj-qVl%diMzUbRHMYP7R`vB#bjKb*v zbQ|GYOviU?db>~M6{ho?HVrXMGLhS1TJn`Gx{v${6+k9Og*u~6_ZTJ)6=|BILX9y( zgf?>S&(yXDm5qWZ+fT67&qc~78krp;_absGINKgIa#7g^!S+0bn_`BWbC|*{(KdX0 zmC<%#7OPS zAbW}KH0kdkS!fvZcMqIFtte}G;=^ZQNzVU}Cq5K48>0NJn)l(ck1Zkv2yhDp`dX!t z!U|_3&>F&f*;j~`yg)Z5Ftxw=-K^-Z!kL3=Ib6>>E&D?I@RV^v#2rCDeVJ9-MsnLtqYFR2}`OU0A5Jy znyL?ladainZo*L=C+CiP1kA|*uWcsL%>XJToEe8Z0}UZu-%LvMKA@$98))a0P~olv z`<8eki!Na-)jN9@s6ln$oH$$rG=y-TjFTT!3HL#uPYCD7;iEv=HGqraa4FD8!Y$(P zqd*%8w~WKPfFd=4OXF}upz8>?iNm)6Eh5}D4zB|`L%2g6uH@ougJ0;S;8l0P>NM}gWAel-qX4m6tZ(m4Di&?khK#o=Q>88}JhuZ+WufqE0xU#pWf zd=StK!fWEx3xGZ+{6-u;3{(Xty8Jiea2C*Ig!L!yr0*Mno*=w7PCXxJE8%r<_#jXv zoH+B}j>ENqE+xD^4&Mkgnec`<{5;T3!ta?l`Xf-IOyG_Bn4&{SxCLN6iGL~&9#uRy z0C5?AW_od-0Om5@ZsO=$z;un4zY9|$atm}7o#))|z#G?t^MmsEmQT*yHbBz}e{b=O z`|_&_5oMI^T+%@tWI<2_-A!x>R(PH{F~)Q@XwOJr9_2n4opuj z^K}oTES{l24_<>aZe@GpYI;z^XD4?$@Y|%0s2gXg-VF37VciQUaio5V=z?E<{W$ea zK+_24#NkCipA&9k(}k>VX7_7+jvf1fuuMrxgA~ymzx={DC!K-rA>6`#7q0{;C(+k{ zsFy6i74E^=L3B3|^^)bEr;%&nw(-^1aM5ysO_wV=ssh7P)s90n>GMetVe$ zd7Zc?H?7g3rytP2W6jKcmcJUJWU@Xq4OLleaNzDu}R+nrH^4YZEeycplO4UqBbV257L2X zTa$JN8AY^%NhgEQr!AXyGU+PNy`;Uwq(6eB4+g!=q_siX6YXKro*+Ys_BQDVkagE-4x5*X$*21(E+BmFUVs=)qSqi&I8#8(^Opz;=x>ELU~c1?mUzae+y^!Na5+=Xn#j2qTjE;$a<&?2!i*?D^9k=Vv9k_{-eSu6M!v!XeGR>g~x(M6s`-@ zl5oJf=q)ep?r9)SPlk2MPw}~dLQarlHCY9*IFB}SDx<54l0=y&>UII*B&A!_Hy+$T zX{tLMl+#qzpu(L8%!#ULM&rH<%!#UHZGYRV7}4j^!%n^IIrM%E=W%o=Hj{4!%2$Z{ zN@RzLTLT7aZ*%l55qH+3Jv)&R5^iou;QZV0QVvp``?v^0{LqOK!jLDKu0f{5O_XI2FteSHm(1vxsfV1k1fVs|5c;@XNh|o5qHeC0Szt z))2gswq-jaQYaC*t*qe1#OPQOk>>T~tLC}qD@@0cXmAN|?sY5_4LI0MGSrcUC`Q^1hd{o1F)VU#GwDpwWu(1hfUk|b0g}JvLXkU6#Y;hi^B-V(;W2l( zbipZ=rk}KFglq-;op1tZt*NMUNBW^KI#Sbns1S4_b3iY|FZW*AGRdTO1{pwfv}`OS z9R~6w(T7+on}0qGBF_M?Ces81I_#EnK`e$rmYyP%D}gS;0)oI=R(cZiTqixvc82 z3QsCX#Tn<31=y2%UaN0O?6!- zu@lHnqSq?#WE9RZpu1`V-#`bJI+;3;fH1vTQkobC*GYBc+x<<{bsXhLr~}724W_0q zA+zp~7juRwQdhp)-(+}#=_#11#t`|41XFF`XUH@%!L$IlAr9Ln_mwxLQc3;rYfyer z0)0ZlPNn>Nt6H*1b&$M0K&d%6dp&U+uL$G^dZ5BsO{QcW1?RF}z;%M^j>u|NPZjlI z+73zh2;c$yn!M&gSzoeFf?f!JP1g7p4#TOs7#5xtNv29CMr7Vd=h;9NoZQkg>sx92 zU!_aAhJ)JRqB{p|=bJl`6uEhh+LSX4Nk*RpAW3Kw6@z4jnk}O8;UNdo&?3%2Ru!V9 zHmvt!J5RGmiMb~`$v5gVJ6jac3Z7*g=`4pKWL|7N_zE2lj4P9b#vx=jwA@yZ(E9_K zmzWawI$-|ZQCDlN5%Pt8a!f&HBg=gV5*jm*+0B%=i-75+fy~P-+H0MZt-$nlKxXea z{0lIDm#B{=FIy;u^4gfQ#;x5&3Hp~82)8Y4{AHqB5^aNEt4{F^PP9D@TYIvNO|-oa z+fcGiOtk#~8;v^1oNMfZEW*@lalG}4H6@ADx>wjeC2a8`d_|c{uH@z-bGcWw@or9(5zb+!A>+ra;^*KIQt;rsxZ+I zIDde0O_=n75iF^fstD&gZF5vTc+3zueL(4z68+^Xj?K9bltzAJK1uPaG&r+B>8%v~ zkDLSiD?t%EU|P@-W# z-e^J&`SmhHQTYN~o9o#=XK4+MCiFBRuFui;VDv^4dPd4=g6@fK-EV>BVl zxh;&I5AKa7^xUX8252LVCS>E^c=UxA&A`3UgyjQm)c?^`{;0f%I` zaj?+^hxe@>!?p;vK4jD1>hWzxq7Lm&r?8y=iPnvOMsIaM!Ig9RU6WyGe>{PiggE|T<&%s`XDc-ai8$fzd*t-SS6%0*bu$hCqg)YU)&*#+Ws zK{%>X8BO`NFj$HD8=MiKR82C@HE1fWw;vHimu8?4oh>>#x-rzz$#p-v8WbJhPSQd+ zyS(UV8*@@{bOCsi(HS(A)>U+s(EAd~+mbfz4K%Y>?U_F%@lNLL5OzwxD=m?S7v?*Y zt2(^3OKz!M90|c6B-+yz5<7Sm$7%Pp#BKY8$U9hwZG4{q%g{{fD2mZ^kN3lzx8Hdj ze{)IoZF!Xw>Sc+dZczP1p)7VAI*)x%fN3o5;q(6RLkTCTH)?Gj=syN^M}t!9nHN-# z)F^q?@?*&riST{vS*1!>j#ck@86&i*nsR76(&y6Xb<(Iw71q^kwc2;~jVe zR33{4<+Q0|@&1AGSgg0sI~M6kjXM_Sk}L06q%GOK>1^(&kHrOmc5pez+4DwyEKbC> z732U7*OogLcS9wQ#quiWn*RD&q)-;S4NYU;hhdV(q8~~)18&mCqCwr`pmE0{B~SWs z?-)?-STt;BV53f39E-Ahj(01Sx_Vcc^07GX z8htFvPUX>*I(aPq36ne)6HLRe)yJaT)hV1UKWKWt3_w&Ji#J`Tk3}=UUQH(?1nAi( z{#fL6$=u%#lX)x}rpvC6KNbzsr!Z01kv^nefuiG50)6RGXC~3c3aA3 zKS;h}OswwRcnUTj^6r5c-oWfW0rJ=929_+xyX8}`zUJk?U6{y#-Mq0Z@IHpP^ZJ|H z0uwG#>uZ0y;C^VRf3)E3bnAji*w}v`9{aC%EvIvrWHAH3f@ioj57E2Cq51TZH$Rb> z15?daztOs=Ls?z$u@zhd zhw|kW%5RZU8R;z8BsuzFvDJadb~&K-HGapu41|X47wnR~^W;M~Q$gM(y4Tch2YK@@ zWYb~!rk?ch185YvP;kuDHUYVm=!v?=sSTCdt3e(n`je@h4r2WWS@nw?^e?rqgB~L7 z?}pa>6{OCkph?!|1=Q(4;?PP;wL2bsE!p(73-3&HFHqI4z*TYU?Bx+=djsoDJR_dp z0`@fVn(=&r=C05 zfrYyQwpzG@EO^0^FH!i8`PGGWt8ta;_JD#_FIA`#?i2{tlbdB$rLW8F+^67Y$@ZpI zcTYK+(>qzT!mnV1mCtWMak6QwjBqaoA4j&0%H}0aM4tuULAFnH6{Fz7JqqTQfq!lt z=b|^lGyxw=w%xkAoaCeGW3c}c-(yj;6<08Ut5lc+M*8p;A8Pq9$gVVs1@HODk%R&wAt0l$M=bflbAe5L`P}`jW_1~<8dd^7s0>Aui%X4 zla5lJd=FLyZ`~D~wFt=l6K*C@JHmgen;pt};a(0z@8}i$W65{)I0iaih5I=8QnDqf z_xH#q-1R`;5DvuQGeEU*;wuQ-zd)zs%>`ndW{VSqrIU++X&7ihx}8EeLx`{@eX=OVui$+9F++Wc#uwN#jVOl! zPbGCnyYwTvwCB=^)%skBj|lg0=W4}8_I0e_5{Y%+i4RneqNlqHf4|adC)0;3Zcwj)=%Yr) z%3bdZOb>ht^eA$PM*+{kub{8Jh%-taX5j$}_qW|Q{QR3XFj=g`ui$pO2%m@1#Xhc{ zCB7lt&wWQL2H97#f}@GO*}xL}Nzvc^1%K%`V|B3U!>t9xc!(L$EdlOD>Y?#_1N0!_ zJK}1?<3KMF9%etn$(DPQeXGJF?B9&NS#w*m_yWIz(YCBBu=;|I-v?$yBeka}#~-aG{KBH?jyd$SDa6T%PM zH@)fC?M{Ogo?!1}EK73NkYsTNzk(Td`?q}cU(*$yWuIQ>mt^a8$)YcQ1#|2_{e7>z z0wKR5{Dkce$Nw|5KG&4EuK;n#7wqEA-Vsu{-`jXYg49ph?kOE|fhloozMU*u;#aWD zp8t-Y!a4saywbkzJwJt|?E<1Neg$vX&v86lmX)i$Yl$xiFS6ac@IRB*-!vueA|MXA z*4}NT@KZS7M(S5=_k<3)-juji@zlK)egzxtYM=TwV)yx$xS#OtZa1y?$ZpOGStHWW zhkZ9G2D{Vox0Y5nn?BsnH2%~K=>7^^w*%DM;%Y=8(A9)LkE;;+EpMy0o zQuqsdJY!iSmURkS7W{0ahQHn_8a-X~l+Y0>XqwTmu36cBsyE2x8U>0ITae_@lx+7~neqO7fW ztbO0Z0WskpB&&&%iRe8*^lo24k#^=j2lN?!1+A0hou(|S?|{;d0G}U+V?gZ)w~fPB z0NqKrb5i{?e%hx4Z6th&iY`P};cf@}nRt(+PKG@Bn}BG6UqLS|CoA6D0P9D*Ptrg` z{shqbgz2lBlry0_NFF^5cJ5K|n>FX#`W5W!1qb7d@GH1INnSN`K)U-E?w8qb0r7(6nFC=_0JuasQEDiGbyAjPOe@T$pw(E>Q4RQ?i3y%i8^eB`!H>iNbd% z#i2&qaG6dE5!;h$@gt?eSF?IR@DYjLEhkEO@kh}2t>6N>yp&rX%B|31Le4e>qi4H? z8&~tC7zw3Gs?nLjXdSCt!yT(P8EQ7A%%_;PshFH)*rLfk3wP{BVy)nN6g>897_a1C zpDzlRMq)q7=kL0B{GFxMk!n#dkN0y`CZ{+ zr^6`~>R3W3#4enFV1MUlr0@F#J9%|B!#3zR>}Mzz73)WoAb0F(Wy0GLzHJNJTK}SK z0n^3_bzj!D6w|h!cVaC{jvg5nzT(#SRlYP(=vd{FCfv>1mS)NSz*AW*CCq3WbV zb1JxwL}%kTW8)bDP>(8UV2r7E2@ z5?kwubh`-K62?x4Fw%!$$E-^GEzt|VR=qBv{UMRy{^LFb+h^T`zZJB4HTCXFdt@Cz z$^k%pF_NN@cg&Ftpc@I_5Qj$q)jSB?SK(e1B!<-T!fyjwb#Q({&Ue86v>L#ZDTQb$ zoQpx24wRH`G6lD^&%uJ%Mq6QLtiqg(^M_gDLHr7HWs+D^1S4AG&(PCVR+6hH-TmlG zL6h#TUV+Khz89h-uXB3w9Gq6sD3>%v(RWYpq&M+SXG-@J3SUxe1<#@BWx0on+h!ij zNF6A0Qd}Am&X+H;cT9#lPlclSX8(6k>UIcK7{09vKaQqJbhgZwZFWh!p4{KY31U;q zNtjAHNVRbO#ukk)D(S-S9m`ixBDG(X18_>Z>6eRJfzSY#k}~;xa~>s=-xZ7Wg^32Z zl$5C?5SF6`oT;$U(2Kn{T^DU(+- z(nD9!d+;l{ma-kwXS3f4AnS<^Ht8-9XCde)lg2? zq@Akvo4d%I%|NFK&oUfG{szf@2^1f<;ld!JaEgEi5>}6(ImM9&Kwc;MyeW=s0iuDm zB?}a$zEly30MS6tlEo5>$mQ6gah@d@q9)V&IJW4Duw7wXPQMy8} z50mXaJ)b>?%4Qo3a_tzcwY3pARvUZu0`j|Pc#IlVx~MD~6r&@G&csDSV$^Wb1zXYJ z7&V;qB3IGS*m|6*Up<6iBan)>kRq%3_9h+nP&IiOIp^Mkl<&@m-VPn25{^+d_~)r~ z(fo_pC;*D5`A(++bgbReoV7{hA@(o?6npdkIMX1g1NY4jkQ+NhE`^f=!t@9QutOAB z_?eR*n1eJ}&F4GoGFypD>$MWi*JK`nFm>Z$nSY^!XUNYyn2NH<{K+?D9*QMpZ)hcE zEu@oW{d?i3h3mQIe5?g1VpM@1!dinIIiyhjzmr60Srlm{#ZU9x{f7VjkJCWp$?-}m3qX}r+e>sw zy~5h(SzCgoDygLq$dV#Ac8FXGr#T{&$0h}^Lljt~e!R~ssXc9ENoi!1Q~|WAq%Ov) zDk+^NlvEyEdL=cygDj~8M^>zbcGMs?QafrGqqM7%YNs7hN&WZse=n(C&Hn$D6g^E+ zCDjkBs-&L4sw%13SoKP(5dGl(F?G%$T~aL}vO_rssic~fcqO&@fLBs)+^0)wJ!`wL z_81a#06Rp1Me3ahrjDr|LuE;6WRz4pXjMsFi&a%pI!!34 zFW|;2sT0FxNhLV4Vx6?32C+xAqlPg`yDF&@+7XqM^X$Ku)ChD0|6iZ)sQXkEPamwR zGPw(@s-#}PYDMR}eRIu{`u#awQr)1pL)#AtlvM6TUP;{wK=I&wchmE_qL-*mDK*YLMvh{f?13;D3EUn%18*AsV zmaZaHNu?B~sFET#c8FY}4^Pu06u=HqVBuYMAYX2y6yZFjuSATJ+5@dBsjAo?RZ==l zD5)lJ>6O&!QgW1;=*WuE#SJ@Z5bLQOHH=Z(RY|qbj;N$kyZn1e9dQ32O6o<#N0Hzf zatBt`F?AfPs-&8pt+=H2cQs4u%q6;{-bYZJT8>glB{%j;YCW#hR7nlERB88o%-T+@ zr3*S$Qad4##}v7-L*!C8S0O@qo}vJDhyn}m3K02nUN>1%`l8S%sn?)YC3P69s-$$9 zP*OV)yH`?sddreZaAd{kI#ZQYV`L0FY8a!mtCHHU9o46srb)O^Pj6P8=MoUOR%}*7 z&N0C2HA9g$xT2>a=*?>3yNR%e$RHxO0n=Shv)U$h<^s{pQ?oiGvx2E4c6NZ!eO9x& zCjA?<2(dTIl=ptDjkE(9Nwl7HY}{ucwKw7}Db%7>lNGpr6@l8gl0Sl*jTYTR>}6cF z^KM^K=SjM5z5-JOP;%{WshC&7$~keVv|g#K_1L-|R?eLE(%Ms5+pzT$SUKZ6q_F2+ z(ki6(4yC<@_p~P7i=2R8i&1oAW(5Z_oeC1TAM`=G;nTD#2tD*_@hHWk=}1s|2foE* zN}HzpL1{=si&=NVqe_6&akPBnxWyckE&*ljJQ*8jgM9nH>H{jk!UWUZFwtdPi&rT} zb-dq#_CTJuP~Ruw{fWQhxC&-jNPH6`GM6IzlLHNLyBc3olaV7-Ql}D2Y9y7^E3k{$ zpNS>K)=g{;>I-APq}ci`TdV17Wxu4z>X#I2CvutmgS#hLQgnxG1*bC|IySzfBs~Nw zON!#r+AiaCNm1G~T?Q&kYA!rlK~8{E;~`yACcO_-mK5FRORai0{E!Z?Fu~OMVO>&` zqdMLb{vVL<&%y;1X_MqW51z{D~E(>O^Jw&M>tGPrK`TBbJEPdd5pq|W^T14H|E;{;=u`WIM6=-JY1cm@!40v2be*Z6q1WmTTRm@li|#ky?Vv9)YoN`NX=Tvdq6b?PoQC=_rZ#DEgMxz1*x2k9#VSFS=`ui&p<-2dlfe^CDEF5 zkj?)9=i%`KMH+If$3#2Vy-XJP6BRxFNnR5(@u1ED19~-wBc$o`7Yg@Dwb=;h9)g4nK!wT6hJP zRl=WPnI8TU%c|ja_^wB_@L{Y+!pE`92%p5VdUz{hsS*AS>ovof_>_wq7LzbzTR4nm zt#Aa(+Tp7LcsW1Z0PA(bO|guHD_@G)Ey5*OuNQ8EWmdQomi5Dp;H^Qp2i6;g`(oKB zdG70s zsvLlnIRp4@GO4L*YSU8*XA8(_qG~omNo}+@=TMuYW}%Vve31S`@0G2# zq<4XE`!w38>LJAnZFT5C^&aGN$uKI@XPWuk%NCT)&MuLk87ZJwEid7#{&EimaXpxkgR zlI@oCdp+7LZns|L*;sks5E|E6W?+pv!v-0m}uB)@$2PH zk;5>ppA8e9L9w$Mm?B>|HF1_Z55MBIaxNs9u!}*45`963gxd1{57q&GH3D$@oQc|W#xQX@ zBMV_#P#wFB8OnK=o%cajZUgy?{93^poYG^O{(T-())u8cg=6zGX#b&zl(t!(ro!s& zi<@@^rq4QN+v?2Cp52>)=}VH?NpW~0Fx@O&$=_XF4BZc~2P+>lN4%eqGy9XY@33cqRc+CH-Xcur7 zb{CxclRpRFCso!1m48@ zCA2<81ir@lb_)B12z-NeiofNPBJe%d>0YPhQzGya)|a5YXgO5`e#82j&#^vD1kPf; z7x|ek0yYxcm)2*9KnUvr>}t!Wac@}}8=U&Np}@N5Eph2@*pvC`wP=!*bMvYQtK}8p zs?dmVEiA2YLoDs^xmYHJTVt6V?u=z1+zZQ;@Bl1>;gMK|!VhBUgePH{8lHw_rSNlD zhQlvmSvkA{%e3%1EURG8bi@m*R-tTdxhQx$5*wn#2uWU(q<}Cj6kaVc?E$Mp-kQkT z3{OYM+d67Cf_G4;tnUE=h_2-Z16BseCCCq&m9iN?SAv@jWlw;i1o`2zQr-hFmEaeK zayG!51b?KxP|6Pg4iWs>hZ#Q*n2X=9tdj3&`umY_5p2`R{(FV?hMZ#pS96qSLT)Cj zO_^7cRnm+qqtem4UYympl%P^e9ZkW{jE3zgMkC;u(f6$tYou8{pV37n>qbyo8gbI- ztuJO&krkuYxR~AN>*%Ye%&6`uT|3RF;wwfkcd?Fd_GKKGYPON45|He2%_iW0P>f#4 z;;`fVc(2iHqMv^>wGitluR_L757Gu=A=4H3cqINUo)=*TeQT72YUo z5GtwV9>qq|Jb-Z$gr-xhZe^fC!uorgTwUFEKm!TSPz|EQ_W;cxyhu8c6@z1R=YW6s zW>~abrfwTJNc1h>A1KI5>;a+BFO)6rZ(wy^0AHiNnIL1x2O2>5BLk}-cY?1W+l~ZV z^mA}}<+$Z89nDFKCi(|B-FCG6N^udbIv-c0__f>{FYOF=Bk==TDl$JpTb5aM5f-zt z$O+7Uo$gS&Te)`fNGnIUgNRwtqPa!0+QYy(Z(TDBFy8(#w7 zZrbSnH^hq$De!O}#aWDguu8j;c@(FpyBsL63V0X?l<~2;A*)AV4@i#kg^HuN-;AOQ zId*T?w$Y}IYJ8|03yx~Rm;^x&7Ia;$ypK%~$b0T5AmF}(N2DN_PCLP!2ON*QpFX5j zk5{bn?+V;=*C>ZiRV?KzH}`H*QE$T26{}?8HbPbR4XB>2SS1sO4<|^~ixsPk#EsF? zB?(gc;Q|M1sa_G3QA!$9=5Sg~u%zB4|^C<@^g!*&w| zsgr0M3BG`AnTAcctAP#?t{;bgCiOI6{h?Ve7FF;?Unqh8QiLy%Wqu0;+|zcB8lvI} zFdh}Q9rzWWTi&L;AJBqk2?FW8<}SL#g$MnGTEqKg;PlDz;x=Yrc?dnPZS72(^tlT* z`Wkg{N7H7sT<5|#j0E}RcGcSwp)3R>dbu9l(>1o zz40r4%*X=a4gi`=cuE|82Iw8aPsHI*fVfj)s#&>85j(y(0~_~BOiQ#?+N(Mlp0;H# z1MQb^TL9A?M)9*o5D_f{=6=`bFb0j4B6A-ai_D8~VUip;vl3mFnR0H|)ws6!Uvs+FJn=lFfh5I9wq#n0`^u{oVV<=n0m zuS$b62GpF}RchY=?K}oknm$cgptYw!hZCJ+(%j|obGwp<5MK~FH^IcS2d|)Q>4q~; zO|ba9w!cx%E}Y#k$+=w?yWcn(>v<)Vj{44WEf4^i3 z-2m#-G71&6b|BkTPPj{f)!eQIPVIrm4&1GgIsSE2$!@E#c#js%R#WA?1lK^ia#9D( z|Eip|sdjjkleWrLPDZky?5;Lc_t9%dDsoz`a{8Q%e&u9dk0NsRzM(5;N{~t^n`n&W zs&bx%fF6NlPBa8g%{O)BJl_bGdxcjyiy@Ge(-1g4K+TDVIX34GP+2)CUX=!CGN@TO zrFIFZtemo6O43h2W#u&KQBZT@VbX@^;#D}ow{+#CZ5gFmIkUC>jdFH;kQOFcITK7b z!&IFr%!UNhqcF+JnP7SiCRsTXOxs|RmDArZRXM+dNmb6>Tsb)>+D3AK0>#+jcmQ1)XXoA` z<%h%gA7BOVr1m}K1Z@q}TWq^kZiVh9f%69hbZ=jJ+c<2SCh2LgLK9hCctoj(7;0%6 z2os&;N{7>6L=_{y8Bdk9^m^wxEf_)LuB_k`^2l$-(-^GM8=Nm7pxRt|x8cF5^o^n; zjbKh&P-=in@5xH_W22Wfr~xkR>)fLSquQ}R#zyZ5(A*8B{hSpL&_Pgozv038R@2c& zFemeUum3THAX9R#J1(s)Ll5BiPo(rcX$wO|qrRn_@G zZ*tRXYNdUgzaXFkrt~qxgVXGoqK_NFBDaFlIKxtWbC^mzL_tJk6%Y+GEXBYZ1D^(_ zQHG^6RJtN9u||2T<^^l^D&dOk;RUZ}eXD zFTKVau26a%&N8zPp}1RDi!?omFQwtvx`q|HmdcD4{&0)d8Ieh_ZY4!bDn#TfY-J;S z>s&KTq!?%d;pPUG{`j3V9@l}WpTJR`-u#3bag(wRL7F2I`%%P^&DdIi$0E&bJCdlc8plH(Hxxa_Z#RYP9zFG&)j$q2RH+%(b}_fRj6YLp(v}I%bM6~w044>ygH$CF!mM4RN)zlMa6oC z66C(2O~Nv4|FG?rJQXZp+Bl)^Hf>8WZI4%>ov4G7qu1#$TDzpFEeA+DR=K1J_Zw|X zGi}oSCFiPeRZJVZk1mJJ8?DX7Q9U=`_C{-SZgZAWmWOza7Q#IOl^U&GE-|bU(dh-Y zKU$kTM}G(MMr*TcPGGcuq3w^>Huz`Y-e_&$%~KsiTpKhG(){n6U2;EL=%39d$KlTaQ3 zA@=J2qiut%MO8hUJgOt8)%1ofMr#i)LG{9@YmC-TaIr_*?n!WwN(~2()~1GpM{Bph zQ6ood$Hron&hv#UWAm{}XY|5VXy(e$gwPo72Gr{KW4QNG^Of}%UMrVlxDR7H$S`&l zlxht30NYk$xW9!xL?XeHeX23si(xm$aI-z~6JW{#oO&>Zn>>bi!m>!SB- z^%!o(Cn?Aw>>)4wmH}h9*Eh1|XzjQ$+?BA0iDS5_{Z(VQzrtS9816avS7W$2N!&*B z7;e12j6_?liaq3CWfr3apNEL)0<-U4y1;yqmI1oJ{3V9dqH%$_ikc7a0#k133ryMy zy+s0NTV2^Um)^D!+g8vwc^8AzM;pPMrJ!`e)fbqYbmsu5d4VZudOcfRU{VvTQ>F*1;R5qQ zEto`SSDi8%fTk`m?|?vFU>Y8rxtcz11dD6~)fbptP838$oGjTg(gmi0F9g;Xn1n^- zE)aczDalJ9`T~=KQb`NvOJI3{=@(9jRzotztLn@16kTBYF*=U}%L~kM!Ei!spiEoJ znb@s}jE9}3?Vt-xnY7g)`T~>V;P^Rxk>ZBRhO4A_n{xN27T^N20)bRTFTl~|U0||| z-AC^P_bxDr3-78b;Q~{SPs9bL9v#USmkXVfLk(HhQVhi8;n3&* zjqRX>l>@dKIBme&09o0Q1~mrLC@oo=w6cp2GjdaG9#epU)8sEiPDI9|plaZ>Po3{U z<-qCfI5}7{0etkTfzwSfxRM1|oMr*X%SW#oI6Ww8tAW!QIOeqnIwIA;>0Me-)`A7n z109iS;B-6Wk2!Ff1>R^*oIf^IvH4|p+33-*gnQwMUUt7?pC~^pA%ctv&4OLTu7kDQ zumrZQVe8GXmK&D9*8i||7_8-nC6LvB*`2iw2|3?mJd%9bop##_Udps**jB?5s4>*^ zT~PV5JH?}Ey~?<(!kb1dCR5rp9Rn&~cE21Rtsp1B*$+w+hqahv(l(g(Q@-pjW8>t> zVF`0!;s6U1On<^8hb2&s>Uakrzs;B3d4IeD;X9b}!xEAM6OjotBEc`DddQ6bQAh>Y zpHLgvD=Z|oUdz@B3W=?w*jhm$k<~9G*0$i{SRB-aBy*uH(~OWVBw2KlJ^(5UiQ>V; zF09=TDhr9yrs)NaE~JZ~vVxod=Q&VWNGAPDYv;+>IC-*=u1(d2lwev5lPo04Q5|n1 z|2UwV3Iv->1WFb+G>UduQH4BMTo>)l!03Yi1 z-kedskZwh0{EtE!hW!amfW5*(V(UV-R!~T6{eZ0%6cSneLSpSmE{+p8CCKJZ=E6fv zdsWqiBrC9_8$jieMDbWbNwccyLZY;3`XHz*q>1oo1vvrE0Z@4)ne>8)E+kn|IC=6& zdJZPp+$EU)f=Lz<<*1H#AoANRBu-;uA^ArV71AhNKU3EY&6$9E8r^lXfbt^pJ|>by2 zGZ~>mv=Fgl*$+hiFajJe zQET-kL(L|y>xN@;s$ZqMZrawP0!X3Yv6phZuA4Cs=&l=%fE)_vII!%x8OPz+M6036 zScuqqWD50XW1_tka7L$fOtd%mYTb2{5Q?(ODZ55@-6Yt_t5f}2d2L&GhGJ2fP>GW4 zexgmnGHg}ZHu^dhEMVF=q3&^QOEGPovuGzaqU2Q9&6RyrZ;4}-OPX*~u2;4+(y z)wU|8jonATg3ar?;o_*?>juB;#?Mm9@(^b(EreUWuZpm#>C_iQH$mV{w8x&Kh5d}K z8+OeJjLrk69&ny$&)`*VG`eo2i%~${M0*k)0rI+TI5ek%>qvBVe`Tbun|LGdjfnQV zNhzr7rUHeMRU4pW)OAx%CbM#jR#4YXIfdNM2?LF;8&+^4-Jii#*9{5f5fEapZvUH= zZIIO;$GWn~qxx;sYSneK3o_Mpli;EY+6pz%UU?U()NpXu4K*a(b+aGDn`o~M8Vl;A z`M4p<-0!4Gr{gcHYb)JJQytquhOs0BSDiF(!!9S~;t>Zdr*dDnI zFy(;kq#=(Xo)A7V16WVAXW&D?x|4=+Jqq#&Qp*d!4L~Q&v%MvHC`>9%87aX$DNPr-qtK z=}5#&gPxilS}=)DraB*J0vgp*6S`dY)EFL|QcWK>f<=aa>Yf@dCki4WuK?>ufd)PX ztb1w*i%8}beou`gy+CwN4F{!?7S3b9vZux`oDi*sWQ^%O`yO=KO8aJsy$E?>=a}GJn$~sT?)D&Pl zDB(CjImMj;ztPH$G^tVWLJr>fe5LH-!;B?>H2VX3YRF%RoQRC{HeOGSPo3eQvZv<0 zT&k3u06uzEPfg_xx~FCi3pidrdR0%&{4TnuX1(Eoj!4y0Qx&@}r?}g1c%UOv_0)`k z!0f5vDEyhCk^?Wbm$xpm(W9Q4MrdB>*5yxRX}Jj`I?^t;hh4;i2NHT}*xHw^)nF~x zQ^VE=*jg9Xay>O<^>1BR+l!Dh_X2(ELc5LUs!Y=^)VD6w7;1VysJwNdcr-l-D(^2T zZJKs$i@Kdh6G#k#M=Qt)a9#$Lw=O2F)J|#V$=En~^44WAO!C$x!Sp#y^45iNRL6S( z^4q+1;r;Onq{5z>%u?h*a-a<=1N8*>CAAefLM7D^`B|={hGC~dKfo?x-4jcSt(Ee~ zdQDi0}@M$tbR$cb_$nCNk?5$RR65tY^Do9Wlw<2AW1VW(j`UlXzfT)SyGfX zP4|Gxl3EClxXEO{7j)7kWzrWwWlsQ|1Ep5=1Oz(kl1eb$43jJ=%26Hf7ocWIamxR# zr0|;B4jj?RfiJpJqjVyT=6o~mG}lnVBQ;^vcbZI`5g_KB<~q`O5#jRW>DlmyJI#-g zuej6HQ>DSuj4Zg*%r7EKlY5%sFKgd~xI4|?5h_HB|Btr!0I#Bm`u}Hd$-R5oglH1n z3nYOMfgrso!o`S4NTQ)yK>-C6K?Ov*6j7R>pwa~t!G?l@iVaY)Ap$n+APQIzQBXid z!TMFwdD;x^X;z3uRb{^m zxqPL21v#Z^&$v^$jDJurD%Wf(kbCZ3N+c{pR*Pjvv@C4OxS($DnJQk2DO=Ns4x%wy zPI;Q|K#lLq+g7=v33u$Qq^D`fWb)r>S!FXGCm-)}x8Z4Wb7XA=(yw&q+NK1fROM0L zqCmJa?n!!@Muwh3yzRY)r^zYD9|cM-65yn{fN^)W;b|ItGI(;4fK1{LP}0+ssK*?f z`unkJgP!{1*jx&>k@%@|m5@A5zmShc#J6Y-@-$DPq12|$Qwfo$Sx!w><@xiK26>w0 zG~{vq4UOb0-C2VR>0Y-W>1mRpJOiSfs{4hO-C%8Nl9b7_x(=*bd72#;!h{4b5~z^G zD_Sg+rhzX9)}AKgrWEB6 zj)eoS4}hncfn%xoO835+`aDhQX_p+pF*gb?!BLW@*#-aAasVz8_r}uGyayt@E*K@Z z&OSTIJx}v&blAU6L5B@b^H~h6qTcTmvZuMJwdGqA@EO%o($kcC+S8=H=$E8mKRjN0 znm=IQig===r^)CbYk#h_2N~K@lsZ9sn$%s&ghbBGEt8&RTdgphEW?T%r4(~=S|vTr z;ZTsCrjdgEsHP*0X!aMN($k!4MLn&qMi`)_X?orX||!nYRFNELi|PdzGho`!MZkMsP}7GG9J>m8V&C zjP^9^vH~AM4xN$8)10amE-Nuopfgf=n!iE8^fdXE5 z;jb(BFPG9GuY?@;Dj_YmCV-{yuyh@yN&hM8!92|AlH)=eriv^k4XRk_~clPjk&+@?V}EUB0ExMvYKQ{fzo7=V?yD z;Y2TmT;v>sv|LNEbQnv+`YpEJs|s0qFH6()i*3DE6_V6zDb`)eb+>A`ZYi=qE3%Sl z^%4G-l5{$#Y$?h|>;4QXJxwZ`rrk#BmUP>Sbn-Omoz;e?`8HKZ#$Dq)Pm_s# z0L1h(w~<~lBaxb)K%u5!8TK5jZs_;&3M+p;_M1$@r1sIhh$VNYtKH~I zV($G=Vb5@e^#XuYl`^S+m)3uo^|xsKnWjF=V)`}H+(BdJ)P{@ma9Y*2RGNAjL-DU> zRTTDupD^i{UoYE(l13>IIs0!;y1KVQ$+)TNDJ5Oqo2fKOSC{spqX^mi5LLRmldz97 zD=A94x{Ri?c894-d$XaUSC=!O1ciMK zu)L{C-)mIGq0Q(X1R`f6Dn;E?U5mt&tDAX;iuGNESX5Q^YmiGOupztiz|~Dv zQj}*vlv8!ZJSDrqdg0upOrF)R!m4RThV}3Rpr%~i3Q2sZWuq!25u=WSU0v!(*wx(w zqFmiZ;bCKg@bfOO*NnOu?u67@@6IgfTCXb!>TSQNocP9DC|=#nO}HYb{6qdmwUQ~oj!;XbGF;P7VTXGK1uT;0!s=^I{&o5J)>c8S%i z3c@!BMeRC}4Gqh;8*r3(L*Og%OWdsTjLNUM_XneIekF!!&M#wNp*tVK7bw#3FugiK zWgmYPh+Zy~7=bvHynI&{J%lCVzi8n|pYTsolNzmu1^E&D#Au}<+{+1Fh*I1dE^S9v zNi88#FTwUBO(P;PK3q3^{|JnjiB@P|`WB~Ea2!=nUp+{i6ZXD3nB zPHu(99m7;^iRGll{SGpkc_uFMMajn@F}}QFl&c`4sa2wvYGW#$h*87bRu>x^N-Z%3 z8^YZNP5RtgVxn1j?g3z~)5+l_=Tmvu5K>oQ`)9;W+>SckGV1?to&H62bh0`nfp9C2 zELW!%_45u7SzRHcmpCNr)R4`AOx5YBP_`m6xeqn&7^ZSdtm^a>lwH-S8KslPmsgB( zCuFKlUCxC{AY!y#u1>Ads!pevmFLz3zOoCfYg+i|kffcu?ZzlPBis*Nm#S*aARmB@ z(kH~|TN=2xP;S;0E@E+=dc80`_q^WbWcxMSEYe;teg7gN;r)Qp>ouUYSbM$nfs059 zNAC+LyV%I;cz24)j z!1?B6mSB=J8MkoHv;$9QuQvy=bPAQBpuFC}TH&%nR*)&Y0OM3%?=C2qUN0+nUkwR` zQ&0x-dLN_;36Km%5G)c^TxmF9&HkUy7x#vh*5A%Xz&l-Nn)&ke2g$ zN$UAhtUH>J{r6JsOVMFlk;zPNcu@ONRGpgc0F}NJ<)i7j%d{^=Wz%#yD0{LC?na7M zgbQFtmTOYEGoa3dSNd>wpizWZ`S9&P%LzYe;`mcQ@za5y(HV1|@jc+78^B*tT*ObsZhb

    HEkY|QLYAj^n;XVMozz9IU(LF30kc+&inws-Hq;{`VcMK}Bs2eq|j z4Z!X#PonjX2Bm$FF-N(~SxX_?MCyM?naJ9Kz4#!IKb1BqD(zrBH5QukZ}dpC5vR}#)9H=9349USvI3{-!2$Z zq9hQgRu?-|iAX+>La8OX1tQ;)nXw^LpDp-P5obX$lxXYx2n!O9ix#w;1vuq#|F|6) z^kp)d$SA`en|M!^kZ0od-H<&?+I?ih9YjWWCyScA&=Y{qE_t2oUNp5}B$=sNun z#+^|Jt2&bqR&(YftnREtnC-lPFvoctVJ_Y+H4}$hH#Da>2rIIJ1!bjYiO5Abg#x&E zM>G*eXBqqoRY%>uVkw$Ux|!Zl&3cs-Q@f5{Ml5jQ*?Ijli1xyC_{}%lnlo2lAvgdU!sZ{FD~FrF9PE6tE$qLcna`F z(ykHA`;vMTi9Z55trWP9!kl)zDbN#yo9ZLtig4F~{YJb^kbtZ>dNX~ivrxZnmZklU zs>SVtkG=_rHfyZN&Rr;}+J&cLk<}q40Z6>43+k4Y`;Pc;YUUWTF-M zl#U~X_imGWQHm?<&zq>yO#6UKLyA%qquk~qerzZXX$dwukjFCrAbO$p&pjIV= zyqt&2y(sC3e@Q-YE*%$Y@x}reYn$H1OE+NI4eF^)U(0?L+k^0oR-3E2apYv!Zh>Za zj%Xi)R%o11xMVMUFSLt&sjpp@QzInXh4!N3xm|kgk?UUCOk09|E8>Y_KlD-U@^Rmj zw+p3E#4{Tl%8y^mjK}&jUO>4dGp0Q`yRpO2r_MoV?1}y*W7RG?&*d-{-7Zu}U%Slq zaz?w*UX*miza*b*mpi_|(xY2*pP4^f46nb({Un`5}h(qi7haP_LUN9`qBEZ#(MR`zcxevk9Y6aYa~*3XIi3OQ_KdS zsrH)7J+>d|SypGQmIfF05S-2QxsiIUWLJ?g&Dah4647(a zBr=vfjZ^kC;PVvb3l16Go(YK02p9RZGoKBJkuGqlftBa`31pdZ$U4=3kBm_kX8u}5 zyVYUJ$7o;n96rT?KCE7Mqu?2*Js%L;iC$r(F6=LWscWm(n@&yDwb}Q-plE+df7(RH z-si;tUn;J5gY1N<5Ybb(THKccd{wia`k;{^+6obUFsI(I3b7`x!?iKIsixlW3Zk>t z2gE`WsjnUx3H}ICK2G?0x0H_+qXRy0BqGkBDOMxsSTU;d7f%g|*g2P2Vh2#H0s5+0 z`yv8^|MdKz7@4SIu@g_Dd?FjKIDQE|3caW}fj7Dpyn&tFJuofEwbJuRKaqz!Q4dfz zDyIc^5X)CgxXZB1qikJ^ILK5f!SGWpkwo?8m|urt~WVx%{8Zk5?O=5J|cdW z%8U*z+5-g2)EiYGoDR|0T2yFULT=hKD5f*~tc zl+k`v3BhQ?@I|?}1YbBRSTNy4K%9xP6yh3l z!9$LUFeVrkr+<(Y6ot28+HoV~>ShKry0E}(C>=yTvl*I=XZAkDou`>z$@#KbSI3KE4&QkuK8vMW@F_iQfu#6mOj@Jgzwzrikaq zaY5oiAqrDM=HbNO0{^ix(rKl*$R1G@mw!-^g`L^qi%h42W}RLwC|(MIUKBE_Bl`p3 z{;1``?xyl>)q|oW3fj}B+$nhrCL%}Y7L#~b~94-4Uj%KI6Dc6Y>j+L$<(~S2)C*B1kxmA`bnxH%~ z=Dj6XJr+(?g|&NZ3WzEL(nR6olY7x2Q1s~C*c3UG9=++ZuzSu+DBJyS2Snke_Vf7n z3+HPvv6l@D2b>Nqd!t{?avM> z(OyH832PDVV~6DW&cb@?domoY4TdriAM%TmwLrhfoQf*kD}D`##+cj}wy|m;5hdd| zIn>Crey~O1mF{xb0ln|Hu)Xyyieaj`{eM$Ql$c5MqHNvPzpHp%%y?3E0dJq|RE zzwRj`t1G;V!H1!XES#d$qjZvTAl#`CT=qAF&&!BWu9jB)fEo*&JFi+zaFBsk3G7s| z0N#=yyBcvtdmi?rUT&pp1YjKn<-@=iJuT@;}A z)GAYo(Hx}GlbEE_0PpMXPTI?*pj)%f>5{Pp)0f}yJExl!sY4YZazBG8cj#;MAVC2- z0_)roId8(;yKNpo&X?#ZXi|Od1yJeADuv}#Iv^=lX^S4U-S^~dEK8e(8J6MVKStRl zU3}V8PWEnG1E6oAX%~MLDV~1@`~cI%XKD{7ieH-@FF?zRFwJR;xvFyUBi|{7-LJC( z=W1UH%0ASOZzrkB{XU3H7hmRc093m82ScspuLm1 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 s5m8jIiIBanb0Z&)r@;~CV z)OeVx)i5z~i{91;u4QOB6d%+Wd!& z5Mup1r6&pAHrVgpUjR`T+P|wEKsyyuiYmXi94sxA-4C>>9BaCuOa`eJgQ`HBE2WF% zRjdvclDy>ULUA;x3s|mAzpyG(i`BVrDsmp>KL3|G_c;OzSj2diRh={CzS43|o7`Lq z8mH-?PhQbg+&7eAc)4<6CnI)hk#BXOa@$mq7F#7as5yi~Dc!%fN=G4m-eC}-&WisM zi*VR=M9&9BJr@7vyQux3Xf(&K-(o4olr7(PpsJve@p~mzd>A32D8Q(}XFE<>f2$UqU7HtjmjkNrzQFsq(B)DX`_l<&JWSMVTlef^}llu z@;XR5v&jFcsmNDxOE~ZAAeqSfR-8P~i{K#d*geL;#R_9mMGHL0pCVW*j zMhx4c-gglK9Q8N!>V0;lK`{i1x>$apS28Qd8w1Xz@K$kfRi|7*q+Q%Wk(THPL|Rja zEz+7fY?0R7VN@o0e@iT?UdoZi#<0mk%b7aT z*zpEa0driMN3JSAtpR)vfB#O$ZZuZfPvS`#=~gvnI9F7ak=E@fy)!wz$Ncnhm~b5} zog|XG$x;#D!Gs>lHkeO+;Sk+q!^p9(!$AJ-CL2|lDoM1PEGs>w>*0GS35jtEi?Lxw zSK1>%6LEHef@%_#HNoYVbG5dCJ!)9JMFi=qaTm)yn4Dn+f5M-T-`%tpr+Xw#GDKZi=qrRm_E;dXJ|jqc_Lg16R>zrq9jmf@l?@ z6Gv{myPc|4%5aKNbF>TF5&6qFs6wRX=(T_mZ;8KRncruq*Pr`dI<}#2Hbbr)5g~Z# zhRanp4C}iWR0`PwXaRN<|Ggc`Ysc4NqF0y&)&GK7&csT^q9Rfj6$|Q1C5mAu5;gw8 zVmaZB0Y%Nmg2rB~j<-`CKPJino6Sj;BlMrk4#9^=&`O}rwzgO5gt ziS3JtWvfJj>*-zCEM-}L_ges`5crUYnTh)#;L8TOH}`jnp`8H_F=9sHK8E1IZdyk_ ziQw$WN~B@g2+vX&jmh7j_Fh1j=`ae#jaJ+WLgMB_n!>Pb%*!y_7!gBtD1Gf;_CUxT z(zzB#8Im1k+MrCvUV>tJ!i}pWl%d$|ntd~1VULDR2B0$<%1%W8Hsm(h|5QQ38?jq^ z?90=zU{~iIY*OFZDE5cW39Ry78smqE7!6o*py(5-I+2QC>fT@mKRsszJ$5ixDK=ewxj9yy^GQK3mq2J>g zi{!_kXWT;Ueo_$cj==rnj>SYlec>*P=Wpq`ff4hq1G@@fu|z@bawJ-SEcg>B;|sd{ zhKumF06ven7Q4Qqfc;5m%mkNHMD+|61$DfuK~f?Yq}>9g1Ps{;QgMHQ>aYlQ+mc;n z71O%q5z3oYWOd4%ab1wJaxm{p=gtIKow8>Yg6l~UJ_n)U{8?94rwm$?h=$S#uZIWD zp$%kp%AzfaNRp8)Igd8M0#g7+?Dxo@Npxukqfq4in(RwZ`TT=AGqjLH04RG*iOQTe zA3^+%BvEC|(?(+~Vc}O0G|rvXq~a%={1X8?GfZq+09$TioP{cL4&A6R;rrI~)mHfo z>?j`?tkM^ENc(uFon!C#vP^Ejom07V5jc7uSoX1;`U55A9P-Umk_%!@+29O#&Z(d4 zyvMvR{IJfcUj)Hz0Mjlf%f7V3(K7&ZPW{RZOY{*yoKt@?gS>dZgW8J=ExcPIoA4>|7q*06B0rzp6eW!J=t5=@a{zCNCys}S3r)Qh zi!~8b@V~G|iKe_9g@X1hkQ;=S!dhAfKG_l+(4f?mFIrqn#jw=9gp41t>{WPMMrjWn zw|R&jjb!qWcv?PzO|v7SlSFqJ<0$eYJk4vncmILdmn(8xF-}XqpOFcvN~$atxr=9| zD+;!J-Q{^XOAf>1x7c*MyZjyBfo4lu9^Tto6y{IC=79Z?*{k?2G+RFO6ZUdTCS_lN zO-xA=tAU?@)JC&5M7dD zjwGhL{29*A7=fW&V&KO2jM9GOgyJ_(y5iuB>@K&;`Eoj9jTfYf#Mkk?A3j$0#fx$n>>uUmeM1^#SuBv} z*?bJ2hahR0-%@7d27&YCcMwu>d|bK_dKOk>=oxgWI=zLCo69xrnIvKCY3H7Z`}Y3D z#h#9$9ASI9NY5Ua4FW~TRDv+DN|5lr2-8_YGSmytenO)@1ycH1pjlcjE(WH-gbW}# z4~vy}6u>J44piDIv2%l!Yj2UJxc#8X?|X*41GA061`Mu>Erm>%jW`fAA{aUf0iJZn zDYEH-h8n?QWO4jR-7!jV9Y6s{Uf49AcJ>kO{bM2o<>`eje3d3*vHijn&-*A72K5Pf zM8-Hs9U;ZFEzHpd3W1!||1l_F5gPv30L{LISTz8rJE!14#2UgqAJ0@G7S=M{YsgDz zninQSRwCJjbv;dBw7I;mA__V*z4kTM=?Q9T1ts=h9uY_lI4v?Nkcmy)$%(Z z$%5Ig!25(rO|ns}DC#VzI`GfV8QR7W^bSQ#^fV`b|W6-}<{Xi}os;31yy`vB;4BU@fB<)bfQSF>4lFOD|Oe z6Jcp|))En!qz^~SLtONWrDqzl2=Itu*YzUkEH4}qf0{-(I&4C(mO9A`A1R7XZ_Ehz zl&ZXiISb`D+^M^~aAL<3cx+AZi=%5}H{sAUh&gEAUnIpmY?*9}Qz?56%&^dyk|euh9rQ%R@Wa6Eb>usXj0uVT9IYYn68 zGN5?Js(+}#-9XMoM*;el;M%5!z0|w)T?IA{9lGuH92nr$PK)R*zeb3JQ-JB^o_!rh zOKM zd!lgnybvKM@Y^RvhU`Eo*p9;V9r<6G<|&i$Qvk}>&|d_32g3ekO!V3Q%0DnWJYEW; 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 ejGsCvnZE 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⪻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%0AgQSJfkp$5w4&B?f=NZK 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

    AhMOx7dV=Z`#fatzvj*^Hoe%?U%FY3R$@ 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%0A^r<#=KQ#a+}FC`A1`Pv9ASVOp@< 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%0D4OoJ=5h#w<`lA5S%kk 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

  2. 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⩔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 kS>XHRtWzX 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 z%0A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

    Gf(&Y% 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 v#uWC(Q7ll^3Jqj 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

    i>oM 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�$Lt=zerZ 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

    -I=g8kC3z43W$3U1}XgE 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

    N3p1DiG#XTB3Uoq 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≷UX7=K=X@L^p26j3=((UjT>$ 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 #include #include #include @@ -26,6 +27,7 @@ namespace llvm { class Function; class Instruction; +class BasicBlock; } // namespace llvm namespace psr { @@ -68,6 +70,14 @@ class LLVMBasedCFG std::string getStatementId(const llvm::Instruction *stmt) override; std::string getMethodName(const llvm::Function *fun) override; + + static std::map> + getNonTerminationSensitiveControlDependence(const llvm::Function &fun); + + static std::map> + getNonTerminationInsensitiveControlDependence(const llvm::Function &fun); + static std::map> + getDecisiveControlDependence(const llvm::Function &fun); }; } // namespace psr diff --git a/lib/DB/CMakeLists.txt b/lib/DB/CMakeLists.txt index 047da48b95..b20bc302f0 100644 --- a/lib/DB/CMakeLists.txt +++ b/lib/DB/CMakeLists.txt @@ -4,6 +4,7 @@ include_directories( ${SQLITE3_INCLUDE_DIR} ) + set(PHASAR_LINK_LIBS phasar_pointer phasar_passes diff --git a/lib/PhasarLLVM/ControlFlow/LLVMBasedCFG.cpp b/lib/PhasarLLVM/ControlFlow/LLVMBasedCFG.cpp index 7936492b5d..06cde9c912 100644 --- a/lib/PhasarLLVM/ControlFlow/LLVMBasedCFG.cpp +++ b/lib/PhasarLLVM/ControlFlow/LLVMBasedCFG.cpp @@ -13,11 +13,17 @@ * Created on: 07.06.2017 * Author: philipp */ +#include +#include +#include +#include +#include #include #include #include +#include #include #include @@ -156,4 +162,325 @@ string LLVMBasedCFG::getStatementId(const llvm::Instruction *stmt) { string LLVMBasedCFG::getMethodName(const llvm::Function *fun) { return fun->getName().str(); } + +bool hasSingleExitNode(const llvm::Function &fun) { + bool foundOne = false; + for (const auto &bb : fun) { + // TODO: What is about throws + if (llvm::isa(bb.getTerminator())) { + if (foundOne) { + return false; + } else { + foundOne = true; + } + } + } + return foundOne; +} + +void getControlDependence() {} +using pathElem = pair; +void getStrongControlDependence() {} +void getWeakControlDependence() {} + +bool haveEmptyIntersection(const set &s1, const set &s2) { + vector diff(s1.size()); + std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), diff.begin()); + return !diff.empty() && + std::any_of(diff.begin(), diff.end(), [](pathElem &pathElem1) { + return pathElem1 != + make_pair( + nullptr, nullptr); + }); +} + +map> +LLVMBasedCFG::getNonTerminationSensitiveControlDependence( + const llvm::Function &fun) { + if (!fun.isDeclaration()) { + deque wl; + map>> + maximalPaths; + set condNodes; + for (const auto &n : fun) { + auto *term{n.getTerminator()}; + auto numSucc{term->getNumSuccessors()}; + if (numSucc > 1) { + condNodes.insert(&n); + for (unsigned int i = 0; i < numSucc; ++i) { + auto *succ{term->getSuccessor(i)}; + wl.push_back(succ); + auto &m = maximalPaths[succ]; + m[&n].emplace(&n, succ); + } + } + } + + while (!wl.empty()) { + auto n = wl.front(); + wl.pop_front(); + auto *term = n->getTerminator(); + auto numSucc = term->getNumSuccessors(); + if (numSucc == 1) { + auto *m = term->getSuccessor(0); + if (m != n) { + for (auto *p : condNodes) { + auto &s1{maximalPaths[n][p]}; + auto &s2{maximalPaths[m][p]}; + vector diff(s1.size()); + std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), + diff.begin()); + if (haveEmptyIntersection(s1, s2)) { + s2.insert(s1.begin(), s1.end()); + wl.push_back(m); + } + } + } + } else if (numSucc > 1) { + for (auto &m : fun) { + auto numSuccM = m.getTerminator()->getNumSuccessors(); + if (maximalPaths[&m][n].size() == numSuccM) { + for (auto *p : condNodes) { + if (p != n) { + auto &s1{maximalPaths[n][p]}; + auto &s2{maximalPaths[&m][p]}; + vector diff(s1.size()); + std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), + diff.begin()); + if (haveEmptyIntersection(s1, s2)) { + s2.insert(s1.begin(), s1.end()); + wl.push_back(&m); + } + } + } + } + } + } + } + + for (auto &maximalPath : maximalPaths) { + auto *p = maximalPath.first; + for (auto &bla : maximalPath.second) { + auto *n = bla.first; + for (auto &m : bla.second) { + llvm::dbgs() << "Path: " << n->getName() << " -> " << p->getName() + << " -> " << m.second->getName() << "\n"; + } + } + } + map> cds; + for (const auto &n : fun) { + for (const auto *m : condNodes) { + auto numPaths = maximalPaths[&n][m].size(); + auto numSucc = m->getTerminator()->getNumSuccessors(); + if (numPaths > 0 && numPaths < numSucc) { + cds[m].insert(&n); + } + } + } + + fun.viewCFG(); + + for (auto &bb : cds) { + llvm::dbgs() << bb.first << " " << bb.first->getValueName()->first() + << "\n"; + for (auto &bb2 : bb.second) + llvm::dbgs() << "\t" << bb2 << " " << bb2->getValueName()->first() + << "\n"; + } + + return cds; + } + return std::map>(); +} + +map> +LLVMBasedCFG::getNonTerminationInsensitiveControlDependence( + const llvm::Function &fun) { + + if (!fun.isDeclaration()) { + deque wl; + map>> + maximalPaths; + set condNodes; + for (const auto &n : fun) { + auto *term{n.getTerminator()}; + auto numSucc{term->getNumSuccessors()}; + if (numSucc > 1) { + condNodes.insert(&n); + for (unsigned int i = 0; i < numSucc; ++i) { + auto *succ{term->getSuccessor(i)}; + wl.push_back(succ); + auto &m = maximalPaths[succ]; + m[&n].emplace(&n, succ); + } + } + } + + while (!wl.empty()) { + auto n = wl.front(); + wl.pop_front(); + auto *term = n->getTerminator(); + auto numSucc = term->getNumSuccessors(); + if (numSucc == 1) { + auto *m = term->getSuccessor(0); + if (m != n) { + for (auto *p : condNodes) { + auto &s1{maximalPaths[n][p]}; + auto &s2{maximalPaths[m][p]}; + vector diff(s1.size()); + std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), + diff.begin()); + if (haveEmptyIntersection(s1, s2)) { + s2.insert(s1.begin(), s1.end()); + wl.push_back(m); + } + } + } + } else if (numSucc > 1) { + for (auto &m : fun) { + auto numSuccM = m.getTerminator()->getNumSuccessors(); + if (maximalPaths[&m][n].size() == numSuccM) { + for (auto *p : condNodes) { + if (p != n) { + auto &s1{maximalPaths[n][p]}; + auto &s2{maximalPaths[&m][p]}; + vector diff(s1.size()); + std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), + diff.begin()); + if (haveEmptyIntersection(s1, s2)) { + s2.insert(s1.begin(), s1.end()); + wl.push_back(&m); + } + } + } + } + } + } + if (!maximalPaths[n][n].empty()) { + for (unsigned i = 0; i < numSucc; ++i) { + auto *m = term->getSuccessor(i); + if (m != n) { + auto &s1{maximalPaths[n][n]}; + auto &s2{maximalPaths[m][n]}; + vector diff(s1.size()); + std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), + diff.begin()); + if (!diff.empty() && + std::any_of(diff.begin(), diff.end(), [](pathElem &pathElem1) { + return pathElem1 != + make_pair(nullptr, nullptr); + })) { + s2.insert(s1.begin(), s1.end()); + wl.push_back(m); + } + } + } + } + } + + for (auto &maximalPath : maximalPaths) { + auto *p = maximalPath.first; + for (auto &bla : maximalPath.second) { + auto *n = bla.first; + for (auto &m : bla.second) { + llvm::dbgs() << "Path: " << n->getName() << " -> " << p->getName() + << " -> " << m.second->getName() << "\n"; + } + } + } + map> cds; + for (const auto &n : fun) { + for (const auto *m : condNodes) { + auto numPaths = maximalPaths[&n][m].size(); + auto numSucc = m->getTerminator()->getNumSuccessors(); + if (numPaths > 0 && numPaths < numSucc) { + cds[m].insert(&n); + } + } + } + + // fun.viewCFG(); + + for (auto &bb : cds) { + llvm::dbgs() << bb.first << " " << bb.first->getValueName()->first() + << "\n"; + for (auto &bb2 : bb.second) + llvm::dbgs() << "\t" << bb2 << " " << bb2->getValueName()->first() + << "\n"; + } + return cds; + } + return std::map>(); +} + +map> +LLVMBasedCFG::getDecisiveControlDependence(const llvm::Function &fun) { + if (!fun.isDeclaration()) { + deque wl; + map>> + S; + set condNodes; + for (const auto &n : fun) { + auto *term{n.getTerminator()}; + auto numSucc{term->getNumSuccessors()}; + if (numSucc > 1) { + condNodes.insert(&n); + for (unsigned int i = 0; i < numSucc; ++i) { + auto *succ{term->getSuccessor(i)}; + wl.push_back(succ); + auto &m = S[succ]; + m[&n].emplace(&n, succ); + } + } + } + while (!wl.empty()) { + auto n = wl.front(); + wl.pop_front(); + auto *term = n->getTerminator(); + auto numSuccs = term->getNumSuccessors(); + for (unsigned int i = 0; i < numSuccs; ++i) { + auto *m = term->getSuccessor(i); + for (auto *p : condNodes) { + auto &s1{S[n][p]}; + auto &s2{S[m][p]}; + vector diff(s1.size()); + std::set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), + diff.begin()); + if (haveEmptyIntersection(s1, s2)) { + s2.insert(s1.begin(), s1.end()); + wl.push_back(m); + } + } + } + } + map> cds{ + getNonTerminationSensitiveControlDependence(fun)}; + + for (const auto &n : fun) { + auto &cd{cds[&n]}; + for (auto it = cd.begin(); it != cd.end(); it++) { + auto numSuccs = (*it)->getTerminator()->getNumSuccessors(); + if (S[&n][*it].size() == numSuccs) { + auto temp = it; + temp--; + cd.erase(it); + it = temp; + } + } + } + return cds; + } + return std::map>(); +} + +void getOrderDependence() {} + +void getStrongOrderDependence() {} + +void getWeakOrderDependence() {} + +void getDataSensitiveOrderDependence() {} + } // namespace psr diff --git a/targets/cd.c b/targets/cd.c new file mode 100644 index 0000000000..cbaf518f98 --- /dev/null +++ b/targets/cd.c @@ -0,0 +1,31 @@ +#include +#include + +void oneC(){ + bool condA = rand() < (RAND_MAX/2); + bool condC,condD,condF; + if (condA) { + labelB: + condC = rand() < (RAND_MAX/2); + if (condC) { + goto labelB; + } + labelD: + condD = rand() < (RAND_MAX/2); + if (condD) { + goto labelJ; + } + labelJ: + goto labelD; + } else { + condF = rand() < (RAND_MAX/2); + if (condF) { + + } + } +} + + +int main(void) { + oneC(); +} \ No newline at end of file diff --git a/targets/preparation.c b/targets/preparation.c new file mode 100644 index 0000000000..c5d8abdc93 --- /dev/null +++ b/targets/preparation.c @@ -0,0 +1,43 @@ +#include "stdlib.h" +#include + +/* +WARNING: Comments are just examples of dependencies and are not exhaustive + +Suggestion: Compile without compiler optimizations (-O0) +The expected output of your preparation should be a machine-readable list of dependencies, as produced or used by your tool. +*/ + + +int main(int argc, char **argv) { + // RAW dependence in declaration + int n = 20; + double A[n]; + + A[0] = n; + for (int i = 1; i < n; i++) { + if(i % 2 == 0) { + // Loop-carried data dependence on array elements + A[i] = A[i-1] / n; + } else { + A[i] = ((double) i) / n; + } + } + + double sum = 0; + // Loop-carried data dependence + for (int i = 0; i < n; i++) { + // WAW dependence with previous declaration of sum + sum = sum + A[i]; + } + + // RAW dependence with previous statements + // Control dependence on next two statements + if(sum > 10) { + printf("Sum is greater than 10"); + } else { + printf("Sum is smaller or equal 10"); + } + + return 0; +} diff --git a/targets/slicingEx.c b/targets/slicingEx.c new file mode 100644 index 0000000000..4d67f50347 --- /dev/null +++ b/targets/slicingEx.c @@ -0,0 +1,77 @@ +#include +#include + +#include "slicingEx2.h" +int global = 0; + +int bar(int k); +struct point *getSomePoint(struct point* p, struct point* p2); +int foo(int i,int k,int j); + +struct point { + int x; + int y; +}; + + +struct point *getSomePoint(struct point* p, struct point* p2) { + if (rand() < (RAND_MAX/2)) { + return p; + } else { + return p2; + } +} + +static int int_add(int i, int j){ + return i + j; +} + +static int int_mod(int i, int j){ + return i % j; +} + + +int foo3(struct point* p) { + return p->x + p->y; +} + +int (*getFunction ()) (int,int){ + if (rand() < (RAND_MAX/2)) { + return &int_add; + } else { + return &int_mod; + } +} + +int bar(int k) { + int i = 0; + struct point p = { k,2}; + struct point p2 = { 1, k + 5}; + p.x = 5; + p.y = k; + global = 42; + i += foo2(7,8); + i += foo3(&p2); + i += foo3(&p); + i += foo3(getSomePoint(&p,&p2)); + i += fp(2,4,getFunction()); + return i; +} + +int foo(int i,int k,int j){ + i += bar(k); + if (i == 0){ + return k; + } else { + return j; + } +} + +int main() { + int A = foo(0,1,2); + int B = foo(5,3,4); + printf("%d\n", A); + printf("%d\n", B); + printf("%d\n", global); + printf("%d\n", global2); +} \ No newline at end of file diff --git a/targets/slicingEx2.c b/targets/slicingEx2.c new file mode 100644 index 0000000000..551fffe9a1 --- /dev/null +++ b/targets/slicingEx2.c @@ -0,0 +1,30 @@ + +#include + +#include "slicingEx2.h" + +int foo_impl(int i, int j) { + return i * j; +} + +int foo2(int i, int j) { + return fp(i,j,&foo_impl); +} + +int fp(int i, int j, int (*f)(int,int)) { + return f(i,j); + +} + +int intra() { + jmp_buf env; + int i = setjmp(env); + int k = 0; + if (i == 0) { + k = 2; + longjmp(env,2); + } else { + k = 1; + } + return k; +} \ No newline at end of file diff --git a/targets/slicingEx2.h b/targets/slicingEx2.h new file mode 100644 index 0000000000..accd598106 --- /dev/null +++ b/targets/slicingEx2.h @@ -0,0 +1,12 @@ + +#if !defined(SLICING_EX_2_H) +#define SLICING_EX_2_H + +int global2; +int foo2(int, int); +int fp(int , int , int (*)(int,int)); +int intra(); + + +#endif // SLICING_EX_2_H + diff --git a/targets/test.cpp b/targets/test.cpp new file mode 100644 index 0000000000..39ce0c855d --- /dev/null +++ b/targets/test.cpp @@ -0,0 +1,24 @@ + + + +#include + +int throws_something(){ + int r = rand(); + if (r < (RAND_MAX/2)) { + throw r; + } else { + throw r + 5; + } +} + +int main(int, char*[]) { + try { + throws_something(); + } catch (int x) { + + } +} + + + diff --git a/tools/phasar/depfinder.cpp b/tools/phasar/depfinder.cpp new file mode 100644 index 0000000000..1ed1c1813b --- /dev/null +++ b/tools/phasar/depfinder.cpp @@ -0,0 +1,153 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace bpo = boost::program_options; +namespace bfs = boost::filesystem; +using namespace llvm; +using namespace std; +using namespace psr; + +class ControlDependence { +public: + ControlDependence(llvm::Instruction *control, llvm::Instruction *dependee): control(control),dependee(dependee){}; + llvm::Instruction *getControl() const { + return control; + } + llvm::Instruction *getDependee() const { + return dependee; + } +private: + llvm::Instruction *control; + llvm::Instruction *dependee; +}; + +void writeMapToFile(map,vector>> &dependencies) { + auto ec = error_code(); + llvm::raw_fd_ostream outFile(llvm::StringRef("results.json"), ec); + outFile << "["; + for (auto p = dependencies.begin();;){ + outFile << "{\n \"name\": \"" << p->first->getName().data() << "\",\n" + << "\"cds\": [\n"; + for (auto cd= p->second.first.begin();;){ + outFile << "{ \"control\":\"" + << *((*cd)->getControl()) + << "\",\"dependee\" : \"" + << *((*cd)->getDependee()) + << "\"}"; + cd++; + if (cd == p->second.first.end()){ + break; + } else { + outFile << ",\n"; + } + } + outFile << "],\n\"dds\" : [\n"; + for (auto use = p->second.second.begin();;){ + outFile << "{ \"def\":\""; + (*use)->get()->print(outFile); + outFile << "\", \"use\":\"" ; + (*use)->getUser()->print(outFile); + outFile<<"\"}"; + use++; + if (use == p->second.second.end()){ + break; + } else { + outFile << ",\n"; + } + } + outFile << "]}"; + p++; + if (p == dependencies.end()){ + break; + } else { + outFile << ","; + } + } + outFile << "]\n"; +} + +map*,vector*>> calculateDF(llvm::PostDominatorTree &PDT) { + map*,vector*>> df; + map*>> tieredPDT; + llvm::DomTreeNodeBase* root = PDT.getRootNode(); + llvm::SmallVector*,5> WL; + WL.push_back(root); + while (!WL.empty()) { + const DomTreeNodeBase *N = WL.pop_back_val(); + tieredPDT[N->getLevel()].push_back(N); + for (auto c : N->getChildren()){ + WL.push_back(c); + } + } + for (size_t i = tieredPDT.size()-1; i > 0; i--){ + for (auto node: tieredPDT[i]){ + for(auto s: successors(node->getBlock())){ + auto y = PDT.getNode(s); + if (y->getIDom() != node){ + df[node].push_back(y); + } + } + for (auto c : node->getChildren()){ + for (auto y : df[c]){ + if (y->getIDom() != c) { + df[node].push_back(y); + } + } + } + } + } + return df; +} + +int main(int argc, const char **argv) { + initializeLogger(true); + ProjectIRDB DB({argv[1]}, IRDBOptions::WPA); + auto result = map,vector>>(); + auto f = DB.getFunction("main"); + if (f){ + auto cds = vector(); + auto dds = vector(); + llvm::PostDominatorTree PDT; + PDT.recalculate(*f); + auto df = calculateDF(PDT); + for (auto &bb : *f) { + auto node = PDT.getNode(&bb); + auto sv = llvm::SmallVector(); + for (auto cd: df[node]) { + auto control = bb.getTerminator(); + for (auto &i : *(cd->getBlock())){ + cds.push_back(new ControlDependence(control,&i)); + } + } + auto idom = node->getIDom(); + for (auto &i : bb) { + if (i.hasNUsesOrMore(1)) { + for (auto &u: i.uses()){ + dds.push_back(&u); + } + } + } + } + result[f] = make_pair(cds,dds); + } else { + llvm::dbgs() << "Did not find Function"; + } + writeMapToFile(result); + return 0; +} + diff --git a/tools/phasar/slicer.cpp b/tools/phasar/slicer.cpp new file mode 100644 index 0000000000..fd1ae444ab --- /dev/null +++ b/tools/phasar/slicer.cpp @@ -0,0 +1,397 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +namespace bpo = boost::program_options; +namespace bofs = boost::filesystem; +using namespace llvm; +using namespace std; +using namespace psr; + +class SlicerFact{ +public: + SlicerFact() = default; + + bool operator <(const SlicerFact& rhs) const { + return i < rhs.i; + } + bool operator ==(const SlicerFact& rhs) const{ + return i == rhs.i; + } + + friend std::ostream& operator<<(std::ostream& os, const SlicerFact& rhs); + bool isZero() const { return i == NULL; } +private: + Instruction* i = NULL; +}; + +std::ostream& operator<<(std::ostream& os, const SlicerFact& rhs) { + std::string temp; + llvm::raw_string_ostream rso(temp); + if (!rhs.isZero()) { + rhs.i->print(rso, true); + os << temp; + } else { + os << "Zero"; + } + return os; +} +namespace std { +template <> struct hash { + size_t operator()(const SlicerFact & x) const{ + return 0; + } +}; +} + +class NormalFlowFunction : public FlowFunction { +public: + + NormalFlowFunction(const Instruction *curr, + const Instruction *succ): curr(curr), succ(succ) {} + + std::set computeTargets(SlicerFact source) { + set facts; + facts.insert(source); + return facts; + } + + +private: + const Instruction *curr; + const Instruction *succ; +}; + +class CallFlowFunction : public FlowFunction { +public: + CallFlowFunction(const Instruction *callStmt, + const Function *destMthd): + callStmt(callStmt), + destMthd(destMthd) {} + + std::set computeTargets(SlicerFact source) { + std::cout << "Calling " << destMthd->getName().str() << std::endl; + set facts; + facts.insert(source); + return facts; + } + +private: + const Instruction *callStmt; + const Function *destMthd; +}; + +class RetFlowFunction : public FlowFunction { +public: + RetFlowFunction(const Instruction *callSite, + const Function *calleeMthd, + const Instruction *exitStmt, + const Instruction *retSite): + callSite(callSite), calleeMthd(calleeMthd), + exitStmt(exitStmt), retSite(retSite) + { + } + std::set computeTargets(SlicerFact source) { + set facts; + facts.insert(source); + return facts; + } + +private: + const Instruction *callSite; + const Function *calleeMthd; + const Instruction *exitStmt; + const Instruction *retSite; +}; + +class CallToRetFlowFunction : public FlowFunction { +public: + CallToRetFlowFunction(const Instruction *callSite, + const Instruction *retSite, + set callees): + callSite(callSite), + retSite(retSite), + callees(std::move(callees)) {} + + std::set computeTargets(SlicerFact source) { + set facts; + facts.insert(source); + return facts; + } +private: + const Instruction *callSite; + const Instruction *retSite; + set callees; +}; + + +class IFDSSLicer : public LLVMDefaultIFDSTabulationProblem { +public: + IFDSSLicer(LLVMBasedICFG &icfg, const LLVMTypeHierarchy &th, + const ProjectIRDB &irdb, const std::set sc) + : LLVMDefaultIFDSTabulationProblem(icfg, th, irdb), slicingCriteria(sc) {} +private: + SlicerFact createZeroValue() override { return SlicerFact(); } + shared_ptr> + getNormalFlowFunction(const Instruction *curr, + const Instruction *succ) override { + if (slicingCriteria.find(curr) != slicingCriteria.end()){ + + } + if (auto debuglog = curr->getDebugLoc().get()) { + + auto line = debuglog->getLine(); + auto column = debuglog->getColumn(); + auto file = debuglog->getFilename(); + debuglog->dump(); + + } + return make_shared(curr,succ); + } + shared_ptr> + getCallFlowFunction(const Instruction *callStmt, + const Function *destMthd) override { + if (auto debuglog = callStmt->getDebugLoc().get()) { + + auto line = debuglog->getLine(); + auto column = debuglog->getColumn(); + auto file = debuglog->getFilename(); + debuglog->dump(); + + } + return make_shared(callStmt,destMthd); + } + shared_ptr> + getRetFlowFunction(const Instruction *callSite, const Function *calleeMthd, + const Instruction *exitStmt, + const Instruction *retSite) override { + return make_shared(callSite,calleeMthd,exitStmt,retSite); + } + shared_ptr> + getCallToRetFlowFunction(const Instruction *callSite, + const Instruction *retSite, + set callees) override { + return make_shared(callSite,retSite,callees); + } + map> initialSeeds() override { + map> res; + set facts; + const Instruction* i = &icfg.getMethod("main")->front().front(); + SlicerFact sf = SlicerFact(); + facts.insert(sf); + res[i] = facts; + return res; + } + bool isZeroValue(SlicerFact d) const override { return d.isZero(); } + void printNode(std::ostream &os, const Instruction *n) const override { + std::string temp; + llvm::raw_string_ostream rso(temp); + n->print(rso,true); + os << temp; + } + void printDataFlowFact(std::ostream &os, SlicerFact d) const override { + os << d; + } + void printMethod(std::ostream &os, const Function *m) const override {} + +private: + std::set slicingCriteria; +}; + +int main(int argc, const char **argv) { + initializeLogger(true); + // ProjectIRDB DB({argv[1]}, IRDBOptions::WPA); + ProjectIRDB DB({"/home/pmueller/Arbeit/code/phasar/targets/toSlice.ll"}, IRDBOptions::WPA); +// ProjectIRDB DB({"/home/pmueller/Arbeit/code/phasar/targets/cd.ll"}, +// IRDBOptions::WPA); + LOG_IF_ENABLE(BOOST_LOG(lg::get()) << "STARTED") + DB.preprocessIR(); + LLVMTypeHierarchy th(DB); + LLVMBasedCFG CFG; + LLVMBasedICFG cg(th, DB, CallGraphAnalysisType::DTA); +// vector debug_functions; +// for (auto module : DB.getAllModules()) { +// auto f = module->getFunction("llvm.dbg.declare"); +// if (f != nullptr) { +// debug_functions.push_back(f); +// } +// f = module->getFunction("llvm.dbg.value"); +// if (f != nullptr) { +// debug_functions.push_back(f); +// } +// f = module->getFunction("llvm.dbg.addr"); +// if (f != nullptr) { +// debug_functions.push_back(f); +// } +// } +// +// set callers; +// for (auto debug : debug_functions) { +// for (auto call : cg.getCallersOf(debug)) { +// callers.insert(call); +// } +// } +// +// for (auto module : DB.getAllModules()) { +// for (auto &f : *module) { +// CFG.getNonTerminationSensitiveControlDependence(f); +// CFG.getNonTerminationInsensitiveControlDependence(f); +// CFG.getDecisiveControlDependence(f); +// } +// } +// +// std::set> all_metadata; +// for (auto c : callers) { +// // llvm::dbgs()<<"CALL :" << *c << "\n"; +// SmallVector, 6> metadata; +// c->getAllMetadata(metadata); +// +// for (auto pair : metadata) { +// all_metadata.insert(pair); +// } +// } +// for (auto pair : all_metadata) { +// switch (pair.second->getMetadataID()) { +// case DINode::MetadataKind::DIFileKind: +// // cout<< "FILE" <print(llvm::dbgs()); +// break; +// case DINode::MetadataKind::DILocationKind: +// // cout<< "Location" <print(llvm::dbgs()); +// break; +// case DINode::MetadataKind::DICompositeTypeKind: +// // cout<< "Location" <(pair.second); +// // cout << "Tuple" << endl; +// break; +// } +// default: +// break; +// } +// // llvm::dbgs() << "META: " << *pair.second << "\n"; +// // llvm::dbgs() << "META: " << pair.second->getMetadataID() << "\n"; +// // llvm::dbgs() << "META: " << pair.second->getNumOperands() << "\n"; +// // pair.second->print(llvm::dbgs()); +// // llvm::dbgs() << "\n"; +// // for (auto &ops : pair.second->operands()){ +// // llvm::dbgs() << *ops << "\n"; +// // } +// } +// +// deque wl; +// for (auto module : DB.getAllModules()) { +// for (auto &function : module->functions()) { +// for (auto &bb : function) { +// for (auto &i : bb) { +// SmallVector, 6> metadata; +// // i.getAllMetadata(metadata); +// // for (auto& m: metadata){ +// // llvm::dbgs() << *m.second << "\n"; +// // } +// auto const &loc = i.getDebugLoc(); +// if (loc) { +// // llvm::dbgs() << i << "\n"; +// if (loc.getLine() == 52 || loc.getLine() == 45) { +// wl.push_back(&i); +// } +// } +// } +// } +// } +// } +// while (!wl.empty()) { +// auto i = wl.front(); +// wl.pop_front(); +// llvm::dbgs() << "==================================================\n"; +// llvm::dbgs() << "GOT LINE: " +// << "\n"; +// llvm::dbgs() << *i << "\n"; +// llvm::dbgs() << "NAME: " << i->getName() << "\n"; +// llvm::dbgs() << i->getNumUses() << "\n" << i->getNumOperands() << "\n"; +// for (auto *u : i->users()) { +// llvm::dbgs() << "USER: " << *u << "\n"; +// } +// for (auto &u : i->uses()) { +// llvm::dbgs() << "USE: " << *u << "\n"; +// } +// for (auto &u : i->operands()) { +// llvm::dbgs() << "OPS: " << *u << "\n"; +// } +// llvm::dbgs() << "==================================================\n"; +// } +// +// // // auto module = DB.getModule("../targets/main_linked.ll"); +// // for (auto &m : module->named_metadata()) { +// // m.print(llvm::dbgs()); +// // llvm::dbgs() << "\n"; +// // } +// // for (auto f : DB.getAllFunctions()) { +// // SmallVector, 10> metas; +// // f->getAllMetadata(metas); +// // +// // for (auto meta: metas) { +// // meta.second->print(llvm::dbgs()); +// // llvm::dbgs() << "\n"; +// // } +// // for (auto m : DB.getAllModules()) { +// // +// // for (auto &meta : m->getNamedMDList()) { +// // +// // meta.print(llvm::dbgs()); +// // for (auto op: meta.operands()){ +// // op->print(llvm::dbgs()); +// // } +// // } +// // } +// // } +// // for (auto &bb : *f){ +// // llvm::dbgs() << bb << "\n"; +// // for (auto &i : bb){ +// // llvm::dbgs() << i <<" " << i.getOpcode() <<" " << i.getOpcodeName()<< +// // "\n\n"; if (auto *call = dyn_cast(&i)) { llvm::dbgs() << +// // call->getNumArgOperands() << "\n"; if (call->getNumArgOperands() > 1) { +// // auto op = call->getArgOperand(1); +// // llvm::dbgs()<< "ID:" << op->getName() << "\n"; +// // llvm::dbgs() << *op << "\n"; +// // } +// // } +// // } +// // } +// +// // } + std::set sc; + IFDSSLicer slicer(cg,th,DB,sc); + LLVMIFDSSolver test(slicer); + test.solve(); + + return 0; +} + +// What is our slicing Criterion? +// Entry or somewhere? +// Regardless we have to build an SDG From 26197f5f3e883a9e69b741e1b1c60e0aa4d7ec59 Mon Sep 17 00:00:00 2001 From: Patrick Date: Mon, 27 Jul 2020 14:22:38 +0200 Subject: [PATCH 03/42] Current State --- lib/Utils/LLVMIRToSrc.cpp | 19 +- tools/boomerang/slicer.cpp | 693 +++++++++++++++++++++++-------------- 2 files changed, 448 insertions(+), 264 deletions(-) diff --git a/lib/Utils/LLVMIRToSrc.cpp b/lib/Utils/LLVMIRToSrc.cpp index c7ab4f0958..ca948ac471 100644 --- a/lib/Utils/LLVMIRToSrc.cpp +++ b/lib/Utils/LLVMIRToSrc.cpp @@ -207,6 +207,8 @@ unsigned int getColumnFromIR(const llvm::Value *V) { std::string getSrcCodeFromIR(const llvm::Value *V) { unsigned int LineNr = getLineFromIR(V); + unsigned int columnNr = getColumnFromIR(V); + //TODO if (LineNr > 0) { boost::filesystem::path Path(getFilePathFromIR(V)); if (boost::filesystem::exists(Path) && @@ -219,8 +221,21 @@ std::string getSrcCodeFromIR(const llvm::Value *V) { Ifs.ignore(std::numeric_limits::max(), '\n'); } std::getline(Ifs, SrcLine); - boost::algorithm::trim(SrcLine); - return SrcLine; + std::string res; + //TODO + unsigned int i =0;// columnNr -1; + while (true){ + auto current_char = SrcLine[i]; + res.push_back(current_char); + i++; + if (current_char == ';' || current_char == '}'|| SrcLine.length() == i) { + break; + } + + } +// boost::algorithm::trim(SrcLine); + + return res; } } } diff --git a/tools/boomerang/slicer.cpp b/tools/boomerang/slicer.cpp index a1c176ec4b..f18890b91c 100644 --- a/tools/boomerang/slicer.cpp +++ b/tools/boomerang/slicer.cpp @@ -1,7 +1,6 @@ #include #include -#include #include #include #include @@ -11,6 +10,7 @@ #include #include +#include #include #include #include @@ -22,29 +22,91 @@ #include #include -#include #include + #include #include -namespace bpo = boost::program_options; + namespace bofs = boost::filesystem; using namespace llvm; using namespace std; using namespace psr; using json = nlohmann::json; struct Term; + +struct Location { + unsigned int line; + unsigned int column; + map meta; +}; +// TODO Memory Leak here +Location *createLocation(unsigned int line, unsigned int column) { + return new Location{.line = line, .column = column}; +} + +bool operator<(const Location &l1, const Location &l2) { + return l1.line < l2.line || (l1.line == l2.line && l1.column < l2.column); +} +struct SliceComparator { + template + bool operator()(const tuple &l, + const tuple &r) const { + return std::get<1>(l) < std::get<1>(r); + } +}; +void to_json(json &j, const Location &l) { + j = json{{"line", l.line}, {"column", l.column}, {"meta", l.meta}}; +} +void from_json(const json &j, Location &l) { + j.at("line").get_to(l.line); + j.at("column").get_to(l.column); + j.at("meta").get_to(l.meta); +} +ostream &operator<<(ostream &os, const Location &l) { + os << "(" << l.line << "," << l.column << ")"; + return os; +} + +struct Term { + std::string file; + std::string term; + vector locations; +}; +void to_json(json &j, const Term &t) { + j = json{{"file", t.file}, {"term", t.term}, {"locations", t.locations}}; +} +void from_json(const json &j, Term &t) { + j.at("file").get_to(t.file); + j.at("term").get_to(t.term); + j.at("locations").get_to(t.locations); +} + +ostream &operator<<(ostream &os, const Term &t) { + os << '\'' << t.term << "' in " << t.file << " at ["; + for (auto const &l : t.locations) { + os << l << ","; + } + os << "]"; + return os; +} + class SlicerFact { public: SlicerFact() = default; - + SlicerFact(const Location *l, const Instruction *i) : l(l), i(i) {} bool operator<(const SlicerFact &rhs) const { return i < rhs.i; } - bool operator==(const SlicerFact &rhs) const { return i == rhs.i; } + bool operator==(const SlicerFact &rhs) const { + return i == rhs.i && l == rhs.l; + } friend std::ostream &operator<<(std::ostream &os, const SlicerFact &rhs); - bool isZero() const { return i == nullptr; } + [[nodiscard]] bool isZero() const { return i == nullptr; } + const llvm::Instruction *getInstruction() { return i; } + const Location *getLocation() { return l; } private: - Instruction *i = nullptr; + const Location *l = nullptr; + const Instruction *i = nullptr; }; std::ostream &operator<<(std::ostream &os, const SlicerFact &rhs) { @@ -66,33 +128,36 @@ template <> struct hash { class NormalFlowFunction : public FlowFunction { public: - NormalFlowFunction(const Instruction *curr, const Instruction *succ) - : curr(curr), succ(succ) {} + NormalFlowFunction(const Instruction *curr, const Instruction *succ, + const vector *terms) + : terms(terms), curr(curr), succ(succ) {} - std::set computeTargets(SlicerFact source) { + std::set computeTargets(SlicerFact source) override { set facts; facts.insert(source); return facts; } private: + const vector *terms; const Instruction *curr; const Instruction *succ; }; class CallFlowFunction : public FlowFunction { public: - CallFlowFunction(const Instruction *callStmt, const Function *destMthd) - : callStmt(callStmt), destMthd(destMthd) {} + CallFlowFunction(const Instruction *callStmt, const Function *destMthd, + const vector *terms) + : terms(terms), callStmt(callStmt), destMthd(destMthd) {} - std::set computeTargets(SlicerFact source) { - std::cout << "Calling " << destMthd->getName().str() << std::endl; + std::set computeTargets(SlicerFact source) override { set facts; facts.insert(source); return facts; } private: + const vector *terms; const Instruction *callStmt; const Function *destMthd; }; @@ -101,10 +166,9 @@ class RetFlowFunction : public FlowFunction { public: RetFlowFunction(const Instruction *callSite, const Function *calleeMthd, const Instruction *exitStmt, const Instruction *retSite) - : callSite(callSite), calleeMthd(calleeMthd), exitStmt(exitStmt) - // retSite(retSite) - {} - std::set computeTargets(SlicerFact source) { + : callSite(callSite), calleeMthd(calleeMthd), exitStmt(exitStmt), + retSite(retSite) {} + std::set computeTargets(SlicerFact source) override { set facts; facts.insert(source); return facts; @@ -121,10 +185,12 @@ class RetFlowFunction : public FlowFunction { class CallToRetFlowFunction : public FlowFunction { public: CallToRetFlowFunction(const Instruction *callSite, const Instruction *retSite, - set callees) - : callSite(callSite), retSite(retSite), callees(std::move(callees)) {} + set callees, + const vector *terms) + : callSite(callSite), retSite(retSite), callees(std::move(callees)), + terms(terms) {} - std::set computeTargets(SlicerFact source) { + std::set computeTargets(SlicerFact source) override { set facts; facts.insert(source); return facts; @@ -134,51 +200,37 @@ class CallToRetFlowFunction : public FlowFunction { const Instruction *callSite; const Instruction *retSite; set callees; + const vector *terms; }; +template class IFDSSLicer : public IFDSTabulationProblem< const llvm::Instruction *, SlicerFact, const llvm::Function *, - const llvm::StructType *, const llvm::Value *, LLVMBasedICFG> { + const llvm::StructType *, const llvm::Value *, ICFG_T> { public: - IFDSSLicer(LLVMBasedICFG *icfg, const LLVMTypeHierarchy *th, - const ProjectIRDB *irdb, const LLVMPointsToInfo *PT, - const std::set sc, + IFDSSLicer(ICFG_T *icfg, const LLVMTypeHierarchy *th, const ProjectIRDB *irdb, + const LLVMPointsToInfo *PT, + map> sc, const std::vector *terms) : IFDSTabulationProblem(irdb, th, - icfg, PT), - slicingCriteria(sc) {} + const llvm::Value *, ICFG_T>(irdb, th, icfg, PT), + terms(terms), slicingCriteria(std::move(sc)) {} private: - SlicerFact createZeroValue() const override { return SlicerFact(); } + [[nodiscard]] SlicerFact createZeroValue() const override { + return SlicerFact(); + } shared_ptr> getNormalFlowFunction(const Instruction *curr, const Instruction *succ) override { - if (slicingCriteria.find(curr) != slicingCriteria.end()) { - } - if (auto debuglog = curr->getDebugLoc().get()) { - - auto line = debuglog->getLine(); - auto column = debuglog->getColumn(); - auto file = debuglog->getFilename(); - // terms.locations.line == line - debuglog->dump(); - } - return make_shared(curr, succ); + return make_shared(curr, succ, terms); } shared_ptr> getCallFlowFunction(const Instruction *callStmt, const Function *destMthd) override { - if (auto debuglog = callStmt->getDebugLoc().get()) { - - auto line = debuglog->getLine(); - auto column = debuglog->getColumn(); - auto file = debuglog->getFilename(); - debuglog->dump(); - } - return make_shared(callStmt, destMthd); + return make_shared(callStmt, destMthd, terms); } shared_ptr> getRetFlowFunction(const Instruction *callSite, const Function *calleeMthd, @@ -191,18 +243,27 @@ class IFDSSLicer getCallToRetFlowFunction(const Instruction *callSite, const Instruction *retSite, set callees) override { - return make_shared(callSite, retSite, callees); + return make_shared(callSite, retSite, callees, + terms); } map> initialSeeds() override { - map> res; - set facts; - const Instruction *i = &ICF->getFunction("main")->front().front(); + const Instruction *i = + // &this->ICF->getFunction("parse_command")->front().front(); + &this->ICF->getFunction("parse_command")->back().front(); SlicerFact sf = SlicerFact(); - facts.insert(sf); - res[i] = facts; - return res; + if (slicingCriteria.find(i) == slicingCriteria.end()) { + set facts; + facts.insert(sf); + slicingCriteria[i] = facts; + } else { + slicingCriteria[i].insert(sf); + } + return slicingCriteria; + } + + [[nodiscard]] bool isZeroValue(SlicerFact d) const override { + return d.isZero(); } - bool isZeroValue(SlicerFact d) const override { return d.isZero(); } void printNode(std::ostream &os, const Instruction *n) const override { std::string temp; llvm::raw_string_ostream rso(temp); @@ -220,49 +281,9 @@ class IFDSSLicer return nullptr; } -private: - std::set slicingCriteria; -}; - -struct Location { - int line; - int column; - map meta; + const std::vector *terms; + map> slicingCriteria; }; -void to_json(json &j, const Location &l) { - j = json{{"line", l.line}, {"column", l.column}, {"meta", l.meta}}; -} -void from_json(const json &j, Location &l) { - j.at("line").get_to(l.line); - j.at("column").get_to(l.column); - j.at("meta").get_to(l.meta); -} -struct Term { - std::string file; - std::string term; - vector locations; -}; -void to_json(json &j, const Term &t) { - j = json{{"file", t.file}, {"term", t.term}, {"locations", t.locations}}; -} -void from_json(const json &j, Term &t) { - j.at("file").get_to(t.file); - j.at("term").get_to(t.term); - j.at("locations").get_to(t.locations); -} -ostream &operator<<(ostream &os, const Location &l) { - os << "(" << l.line << "," << l.column << ")"; - return os; -} - -ostream &operator<<(ostream &os, const Term &t) { - os << '\'' << t.term << "' in " << t.file << " at ["; - for (auto const &l : t.locations) { - os << l << ","; - } - os << "]"; - return os; -} int main(int argc, const char **argv) { std::cout << "Current path is " << bofs::current_path() << '\n'; @@ -274,179 +295,327 @@ int main(int argc, const char **argv) { LOG_IF_ENABLE(BOOST_LOG(lg::get()) << "STARTED") // DB.preprocessIR(); LLVMTypeHierarchy th(DB); - LLVMBasedCFG CFG; - LLVMBasedICFG cg(DB, CallGraphAnalysisType::DTA, {}, &th); + LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, {"parse_command"}, + &th); LLVMPointsToInfo PT(DB); - std::ifstream i("targets/locations.json"); + std::ifstream in("targets/locations.json"); json j; - i >> j; + in >> j; auto terms = j.get>(); - // for (auto t : terms) { - // cout << t << "\n"; - // } - std::set sc; - IFDSSLicer slicer(&cg, &th, &DB, &PT, sc, &terms); + map> sc; + for (auto *module : DB.getAllModules()) { + for (auto &function : module->functions()) { + for (auto &bb : function) { + for (const auto &i : bb) { + set facts; + + if (auto *debuglog = i.getDebugLoc().get()) { + auto line = debuglog->getLine(); + auto column = debuglog->getColumn(); + auto file = debuglog->getFilename(); + if (const auto *store = dyn_cast(&i)) { + if (const auto *global = + dyn_cast(store->getPointerOperand())) { + // global->dump(); + llvm::dbgs() << global->getValueName()->first() << "\n"; + + auto name = global->getValueName()->first(); + for (const auto &t : terms) { + if (name.find(t.term) != StringRef::npos) { + for (const auto &l : t.locations) { + if (l.line == line) { + facts.insert(SlicerFact(&l, &i)); + } + } + } + } + } + } + for (auto &t : terms) { + for (auto &l : t.locations) { + if (l.line == line && l.column == column && t.file == file) { + facts.insert(SlicerFact(&l, &i)); + if (const auto *branch = dyn_cast(&i)) { + if (branch->isConditional()) { + const auto *constbranch = branch->getSuccessor( + 0); // Assume first branch is true branch + for (const auto &inst : *constbranch) { + if (auto *debuglog2 = inst.getDebugLoc().get()) { + const auto *loc = createLocation( + debuglog2->getLine(), debuglog2->getColumn()); + facts.insert(SlicerFact(loc, &inst)); + } + } + } + } + } + } + } + } + if (!facts.empty()) { + sc[&i] = facts; + } + } + } + } + } + IFDSSLicer slicer(&cg, &th, &DB, &PT, sc, &terms); + IFDSSolver test(slicer); + test.enableESGAsDot(); test.solve(); - // vector debug_functions; - // for (auto module : DB.getAllModules()) { - // auto f = module->getFunction("llvm.dbg.declare"); - // if (f != nullptr) { - // debug_functions.push_back(f); - // } - // f = module->getFunction("llvm.dbg.value"); - // if (f != nullptr) { - // debug_functions.push_back(f); - // } - // f = module->getFunction("llvm.dbg.addr"); - // if (f != nullptr) { - // debug_functions.push_back(f); - // } - // } - // - // set callers; - // for (auto debug : debug_functions) { - // for (auto call : cg.getCallersOf(debug)) { - // callers.insert(call); - // } - // } - // - // for (auto module : DB.getAllModules()) { - // for (auto &f : *module) { - // CFG.getNonTerminationSensitiveControlDependence(f); - // CFG.getNonTerminationInsensitiveControlDependence(f); - // CFG.getDecisiveControlDependence(f); - // }std::cout << "Current path is " << fs::current_path() << '\n'; - // } - // - // std::set> all_metadata; - // for (auto c : callers) { - // // llvm::dbgs()<<"CALL :" << *c << "\n"; - // SmallVector, 6> metadata; - // c->getAllMetadata(metadata); - // - // for (auto pair : metadata) { - // all_metadata.insert(pair); - // } - // } - // for (auto pair : all_metadata) { - // switch (pair.second->getMetadataID()) { - // case DINode::MetadataKind::DIFileKind: - // // cout<< "FILE" <print(llvm::dbgs()); - // break; - // case DINode::MetadataKind::DILocationKind: - // // cout<< "Location" <print(llvm::dbgs()); - // break; - // case DINode::MetadataKind::DICompositeTypeKind: - // // cout<< "Location" <(pair.second); - // // cout << "Tuple" << endl; - // break; - // } - // default: - // break; - // } - // // llvm::dbgs() << "META: " << *pair.second << "\n"; - // // llvm::dbgs() << "META: " << pair.second->getMetadataID() << - // "\n"; - // // llvm::dbgs() << "META: " << pair.second->getNumOperands() << - // "\n"; - // // pair.second->print(llvm::dbgs()); - // // llvm::dbgs() << "\n"; - // // for (auto &ops : pair.second->operands()){ - // // llvm::dbgs() << *ops << "\n"; - // // } - // } - // - // deque wl; - // for (auto module : DB.getAllModules()) { - // for (auto &function : module->functions()) { - // for (auto &bb : function) { - // for (auto &i : bb) { - // SmallVector, 6> metadata; - // // i.getAllMetadata(metadata); - // // for (auto& m: metadata){ - // // llvm::dbgs() << *m.second << "\n"; - // // } - // auto const &loc = i.getDebugLoc(); - // if (loc) { - // // llvm::dbgs() << i << "\n"; - // if (loc.getLine() == 52 || loc.getLine() == 45) { - // wl.push_back(&i); - // } - // } - // } - // } - // } - // } - // while (!wl.empty()) { - // auto i = wl.front(); - // wl.pop_front(); - // llvm::dbgs() << "==================================================\n"; - // llvm::dbgs() << "GOT LINE: " - // << "\n"; - // llvm::dbgs() << *i << "\n"; - // llvm::dbgs() << "NAME: " << i->getName() << "\n"; - // llvm::dbgs() << i->getNumUses() << "\n" << i->getNumOperands() << "\n"; - // for (auto *u : i->users()) { - // llvm::dbgs() << "USER: " << *u << "\n"; - // } - // for (auto &u : i->uses()) { - // llvm::dbgs() << "USE: " << *u << "\n"; - // } - // for (auto &u : i->operands()) { - // llvm::dbgs() << "OPS: " << *u << "\n"; - // } - // llvm::dbgs() << "==================================================\n"; - // } - // - // // // auto module = DB.getModule("../targets/main_linked.ll"); - // // for (auto &m : module->named_metadata()) { - // // m.print(llvm::dbgs()); - // // llvm::dbgs() << "\n"; - // // } - // // for (auto f : DB.getAllFunctions()) { - // // SmallVector, 10> metas; - // // f->getAllMetadata(metas); - // // - // // for (auto meta: metas) { - // // meta.second->print(llvm::dbgs()); - // // llvm::dbgs() << "\n"; - // // } - // // for (auto m : DB.getAllModules()) { - // // - // // for (auto &meta : m->getNamedMDList()) { - // // - // // meta.print(llvm::dbgs()); - // // for (auto op: meta.operands()){ - // // op->print(llvm::dbgs()); - // // } - // // } - // // }cout << terms; - // // } - // // for (auto &bb : *f){ - // // llvm::dbgs() << bb << "\n"; - // // for (auto &i : bb){ - // // llvm::dbgs() << i <<" " << i.getOpcode() <<" " << i.getOpcodeName()<< - // // "\n\n"; if (auto *call = dyn_cast(&ia)) { llvm::dbgs() << - // // call->getNumArgOperands() << "\n"; if (call->getNumArgOperands() > 1) { - // // auto op = call->getArgOperand(1); - // // llvm::dbgs()<< "ID:" << op->getName() << "\n"; - // // llvm::dbgs() << *op << "\n"; - // // } - // // } - // // } - // // } - // - // // } + cout << endl; + set, SliceComparator> + slice; + vector textSlice; + for (const auto &module : DB.getAllModules()) { + for (auto &function : module->functions()) { + bool isUsed = false; + for (auto &bb : function) { + for (const auto &i : bb) { + auto res = test.ifdsResultsAt(&i); + if (llvm::isa(&i)) { + // cout << "RET: " << llvmIRToString(&i) << endl; + } + cout << "INS: " << llvmIRToString(&i) << endl; + cout << "SRC: " << psr::getSrcCodeFromIR(&i) << endl + << res.size() << endl; + for (auto fact : res) { + if (!fact.isZero()) { + cout << "FACT INS: " << llvmIRToString(fact.getInstruction()) + << endl; + cout << "SRC: " << *fact.getLocation() << " " + << psr::getSrcCodeFromIR(fact.getInstruction()) << endl + << endl; + slice.insert( + std::make_tuple(psr::getSrcCodeFromIR(fact.getInstruction()), + *fact.getLocation(), fact.getInstruction())); + const auto *blockExit = + fact.getInstruction()->getParent()->getTerminator(); + const auto instStr = psr::llvmIRToString(blockExit); + const auto exitSrc = psr::getSrcCodeFromIR(blockExit); + if (auto *dl = blockExit->getDebugLoc().get()) { + cout << "ADDING " << llvmIRToString(blockExit) << " " << exitSrc + << endl; + slice.insert(std::make_tuple( + exitSrc, *createLocation(dl->getLine(), dl->getColumn()), + blockExit)); + } else { + cerr << "DID NOT FIND LOCATION" << endl; + slice.insert( + std::make_tuple(exitSrc, *createLocation(0, 0), blockExit)); + } + isUsed = true; + } + } + // cout << endl; + } + } + if (isUsed) { + // Check whether this works everywhere + const auto *entry = &function.getEntryBlock().front(); + if (auto *dl = entry->getDebugLoc().get()) { + slice.insert(std::make_tuple( + psr::getSrcCodeFromIR(entry), + *createLocation(dl->getLine(), dl->getColumn()), entry)); + } else { + slice.insert(std::make_tuple(psr::getSrcCodeFromIR(entry), + *createLocation(0, 0), entry)); + cout << "GOT NO DEBUG LOG" << endl; + } + const auto exits = cg.getStartPointsOf(&function); + for (const auto *exit : exits) { + if (auto *dl = exit->getDebugLoc().get()) { + slice.insert(std::make_tuple( + psr::getSrcCodeFromIR(exit), + *createLocation(dl->getLine(), dl->getColumn()), exit)); + } else { + slice.insert(std::make_tuple(psr::getSrcCodeFromIR(exit), + *createLocation(0, 0), exit)); + cout << "GOT NO DEBUG LOG" << endl; + } + } + } + } + } + string prev; + for (auto i : slice) { + auto curr = std::get<0>(i); + cout << std::get<0>(i) << "\t\t\t\t\t\t\t\t\t\t\t\t" << std::get<1>(i) + << "\t\t\t\t\t" << psr::llvmIRToString(std::get<2>(i)) << endl; + if (curr != prev) { + textSlice.emplace_back(curr); + } + prev = curr; + } + cout << endl << endl << endl << endl; + for (auto &s : textSlice) { + cout << s << endl; + } return 0; } +// TODO: +// Recursive Control dependency backward - branch conditions +// branch conditions forward -> include block +// Collect Declarations // What is our slicing Criterion? // Entry or somewhere? // Regardless we have to build an SDG + +// vector debug_functions; +// for (auto module : DB.getAllModules()) { +// auto f = module->getFunction("llvm.dbg.declare"); +// if (f != nullptr) { +// debug_functions.push_back(f); +// } +// f = module->getFunction("llvm.dbg.value"); +// if (f != nullptr) { +// debug_functions.push_back(f); +// } +// f = module->getFunction("llvm.dbg.addr"); +// if (f != nullptr) { +// debug_functions.push_back(f); +// } +// } +// +// set callers; +// for (auto debug : debug_functions) { +// for (auto call : cg.getCallersOf(debug)) { +// callers.insert(call); +// } +// } +// +// for (auto module : DB.getAllModules()) { +// for (auto &f : *module) { +// CFG.getNonTerminationSensitiveControlDependence(f); +// CFG.getNonTerminationInsensitiveControlDependence(f); +// CFG.getDecisiveControlDependence(f); +// }std::cout << "Current path is " << fs::current_path() << '\n'; +// } +// +// std::set> all_metadata; +// for (auto c : callers) { +// // llvm::dbgs()<<"CALL :" << *c << "\n"; +// SmallVector, 6> metadata; +// c->getAllMetadata(metadata); +// +// for (auto pair : metadata) { +// all_metadata.insert(pair); +// } +// } +// for (auto pair : all_metadata) { +// switch (pair.second->getMetadataID()) { +// case DINode::MetadataKind::DIFileKind: +// // cout<< "FILE" <print(llvm::dbgs()); +// break; +// case DINode::MetadataKind::DILocationKind: +// // cout<< "Location" <print(llvm::dbgs()); +// break; +// case DINode::MetadataKind::DICompositeTypeKind: +// // cout<< "Location" <(pair.second); +// // cout << "Tuple" << endl; +// break; +// } +// default: +// break; +// } +// // llvm::dbgs() << "META: " << *pair.second << "\n"; +// // llvm::dbgs() << "META: " << pair.second->getMetadataID() << +// "\n"; +// // llvm::dbgs() << "META: " << pair.second->getNumOperands() << +// "\n"; +// // pair.second->print(llvm::dbgs()); +// // llvm::dbgs() << "\n"; +// // for (auto &ops : pair.second->operands()){ +// // llvm::dbgs() << *ops << "\n"; +// // } +// } +// +// deque wl; +// for (auto module : DB.getAllModules()) { +// for (auto &function : module->functions()) { +// for (auto &bb : function) { +// for (auto &i : bb) { +// SmallVector, 6> metadata; +// // i.getAllMetadata(metadata); +// // for (auto& m: metadata){ +// // llvm::dbgs() << *m.second << "\n"; +// // } +// auto const &loc = i.getDebugLoc(); +// if (loc) { +// // llvm::dbgs() << i << "\n"; +// if (loc.getLine() == 52 || loc.getLine() == 45) { +// wl.push_back(&i); +// } +// } +// } +// } +// } +// } +// while (!wl.empty()) { +// auto i = wl.front(); +// wl.pop_front(); +// llvm::dbgs() << "==================================================\n"; +// llvm::dbgs() << "GOT LINE: " +// << "\n"; +// llvm::dbgs() << *i << "\n"; +// llvm::dbgs() << "NAME: " << i->getName() << "\n"; +// llvm::dbgs() << i->getNumUses() << "\n" << i->getNumOperands() << "\n"; +// for (auto *u : i->users()) { +// llvm::dbgs() << "USER: " << *u << "\n"; +// } +// for (auto &u : i->uses()) { +// llvm::dbgs() << "USE: " << *u << "\n"; +// } +// for (auto &u : i->operands()) { +// llvm::dbgs() << "OPS: " << *u << "\n"; +// } +// llvm::dbgs() << "==================================================\n"; +// } +// +// // // auto module = DB.getModule("../targets/main_linked.ll"); +// // for (auto &m : module->named_metadata()) { +// // m.print(llvm::dbgs()); +// // llvm::dbgs() << "\n"; +// // } +// // for (auto f : DB.getAllFunctions()) { +// // SmallVector, 10> metas; +// // f->getAllMetadata(metas); +// // +// // for (auto meta: metas) { +// // meta.second->print(llvm::dbgs()); +// // llvm::dbgs() << "\n"; +// // } +// // for (auto m : DB.getAllModules()) { +// // +// // for (auto &meta : m->getNamedMDList()) { +// // +// // meta.print(llvm::dbgs()); +// // for (auto op: meta.operands()){ +// // op->print(llvm::dbgs()); +// // } +// // } +// // }cout << terms; +// // } +// // for (auto &bb : *f){ +// // llvm::dbgs() << bb << "\n"; +// // for (auto &i : bb){ +// // llvm::dbgs() << i <<" " << i.getOpcode() <<" " << i.getOpcodeName()<< +// // "\n\n"; if (auto *call = dyn_cast(&ia)) { llvm::dbgs() << +// // call->getNumArgOperands() << "\n"; if (call->getNumArgOperands() > 1) { +// // auto op = call->getArgOperand(1); +// // llvm::dbgs()<< "ID:" << op->getName() << "\n"; +// // llvm::dbgs() << *op << "\n"; +// // } +// // } +// // } +// // } +// +// // } \ No newline at end of file From cfed252946877877ccb1bf77a9396a4e8826cfee Mon Sep 17 00:00:00 2001 From: Patrick Date: Tue, 3 Nov 2020 13:22:51 +0100 Subject: [PATCH 04/42] Current state --- targets/locations.json | 2692 -------------------- targets/locations_json.json | 1526 +++++++++++ targets/min_ex.c | 3 + targets/toSlice.json | 0 tools/boomerang/slicer.cpp | 464 ++-- unittests/Slicer/CMakeLists.txt | 0 unittests/Slicer/SliceITCW_defectsTest.cpp | 3 + 7 files changed, 1755 insertions(+), 2933 deletions(-) delete mode 100644 targets/locations.json create mode 100644 targets/locations_json.json create mode 100644 targets/min_ex.c create mode 100644 targets/toSlice.json create mode 100644 unittests/Slicer/CMakeLists.txt create mode 100644 unittests/Slicer/SliceITCW_defectsTest.cpp diff --git a/targets/locations.json b/targets/locations.json deleted file mode 100644 index 862c49ac78..0000000000 --- a/targets/locations.json +++ /dev/null @@ -1,2692 +0,0 @@ -[ - { - "term": "axis", - "file": "grbl/planner.c", - "locations": [ - { - "line": 34, - "column": 21 - }, - { - "line": 37, - "column": 28 - } - ] - }, - { - "term": "axis", - "file": "grbl/planner.c", - "locations": [ - { - "line": 1, - "column": 53 - }, - { - "line": 25, - "column": 25 - }, - { - "line": 26, - "column": 19 - }, - { - "line": 32, - "column": 23 - }, - { - "line": 33, - "column": 23 - }, - { - "line": 34, - "column": 23 - }, - { - "line": 43, - "column": 49 - }, - { - "line": 44, - "column": 49 - }, - { - "line": 47, - "column": 20 - }, - { - "line": 48, - "column": 77 - }, - { - "line": 58, - "column": 35 - }, - { - "line": 60, - "column": 35 - }, - { - "line": 88, - "column": 39 - }, - { - "line": 89, - "column": 37 - }, - { - "line": 129, - "column": 30 - }, - { - "line": 131, - "column": 22 - }, - { - "line": 146, - "column": 53 - }, - { - "line": 181, - "column": 20 - }, - { - "line": 183, - "column": 17 - }, - { - "line": 184, - "column": 22 - }, - { - "line": 185, - "column": 24 - }, - { - "line": 186, - "column": 22 - } - ] - }, - { - "term": "axis", - "file": "grbl/nuts_bolts.h", - "locations": [ - { - "line": 30, - "column": 3 - }, - { - "line": 31, - "column": 9 - }, - { - "line": 32, - "column": 12 - }, - { - "line": 34, - "column": 12 - }, - { - "line": 36, - "column": 10 - }, - { - "line": 37, - "column": 10 - }, - { - "line": 38, - "column": 10 - }, - { - "line": 39, - "column": 9 - }, - { - "line": 40, - "column": 12 - }, - { - "line": 44, - "column": 30 - }, - { - "line": 46, - "column": 19 - }, - { - "line": 47, - "column": 19 - }, - { - "line": 60, - "column": 61 - }, - { - "line": 61, - "column": 62 - }, - { - "line": 64, - "column": 68 - }, - { - "line": 91, - "column": 21 - } - ] - }, - { - "term": "axis", - "file": "grbl/limits.c", - "locations": [ - { - "line": 25, - "column": 10 - }, - { - "line": 26, - "column": 15 - }, - { - "line": 27, - "column": 17 - }, - { - "line": 29, - "column": 15 - }, - { - "line": 30, - "column": 17 - }, - { - "line": 44, - "column": 13 - }, - { - "line": 58, - "column": 15 - }, - { - "line": 69, - "column": 15 - }, - { - "line": 126, - "column": 11 - }, - { - "line": 127, - "column": 53 - }, - { - "line": 128, - "column": 53 - }, - { - "line": 129, - "column": 42 - }, - { - "line": 130, - "column": 42 - }, - { - "line": 132, - "column": 53 - }, - { - "line": 133, - "column": 53 - }, - { - "line": 134, - "column": 42 - }, - { - "line": 135, - "column": 42 - }, - { - "line": 139, - "column": 75 - }, - { - "line": 141, - "column": 34 - }, - { - "line": 151, - "column": 22 - }, - { - "line": 178, - "column": 24 - }, - { - "line": 245, - "column": 17 - }, - { - "line": 250, - "column": 26 - }, - { - "line": 251, - "column": 10 - }, - { - "line": 263, - "column": 90 - }, - { - "line": 281, - "column": 21 - }, - { - "line": 282, - "column": 17 - }, - { - "line": 285, - "column": 20 - }, - { - "line": 289, - "column": 81 - }, - { - "line": 295, - "column": 43 - }, - { - "line": 302, - "column": 34 - }, - { - "line": 303, - "column": 12 - }, - { - "line": 309, - "column": 15 - }, - { - "line": 310, - "column": 24 - }, - { - "line": 311, - "column": 8 - }, - { - "line": 314, - "column": 19 - }, - { - "line": 316, - "column": 25 - }, - { - "line": 317, - "column": 22 - }, - { - "line": 318, - "column": 38 - }, - { - "line": 319, - "column": 39 - }, - { - "line": 320, - "column": 32 - }, - { - "line": 321, - "column": 22 - }, - { - "line": 322, - "column": 62 - }, - { - "line": 324, - "column": 29 - }, - { - "line": 338, - "column": 19 - }, - { - "line": 339, - "column": 10 - }, - { - "line": 340, - "column": 21 - }, - { - "line": 344, - "column": 35 - }, - { - "line": 358, - "column": 28 - }, - { - "line": 359, - "column": 16 - }, - { - "line": 362, - "column": 29 - }, - { - "line": 363, - "column": 25 - }, - { - "line": 365, - "column": 18 - }, - { - "line": 369, - "column": 23 - }, - { - "line": 397, - "column": 15 - }, - { - "line": 406, - "column": 52 - }, - { - "line": 414, - "column": 25 - }, - { - "line": 420, - "column": 6 - }, - { - "line": 421, - "column": 15 - }, - { - "line": 422, - "column": 24 - }, - { - "line": 425, - "column": 19 - }, - { - "line": 427, - "column": 25 - }, - { - "line": 428, - "column": 22 - }, - { - "line": 429, - "column": 38 - }, - { - "line": 430, - "column": 39 - }, - { - "line": 431, - "column": 32 - }, - { - "line": 432, - "column": 22 - }, - { - "line": 433, - "column": 62 - }, - { - "line": 435, - "column": 29 - }, - { - "line": 449, - "column": 19 - }, - { - "line": 450, - "column": 10 - }, - { - "line": 454, - "column": 35 - }, - { - "line": 455, - "column": 17 - }, - { - "line": 468, - "column": 28 - }, - { - "line": 469, - "column": 16 - }, - { - "line": 472, - "column": 29 - }, - { - "line": 473, - "column": 25 - }, - { - "line": 475, - "column": 18 - }, - { - "line": 480, - "column": 21 - }, - { - "line": 507, - "column": 27 - }, - { - "line": 516, - "column": 52 - }, - { - "line": 531, - "column": 14 - }, - { - "line": 533, - "column": 20 - }, - { - "line": 537, - "column": 12 - }, - { - "line": 540, - "column": 14 - }, - { - "line": 542, - "column": 14 - }, - { - "line": 547, - "column": 19 - }, - { - "line": 548, - "column": 22 - }, - { - "line": 549, - "column": 38 - }, - { - "line": 550, - "column": 38 - }, - { - "line": 551, - "column": 26 - }, - { - "line": 552, - "column": 22 - }, - { - "line": 553, - "column": 38 - }, - { - "line": 554, - "column": 38 - }, - { - "line": 556, - "column": 34 - }, - { - "line": 559, - "column": 32 - } - ] - }, - { - "term": "axis", - "file": "grbl/system.h", - "locations": [ - { - "line": 127, - "column": 19 - }, - { - "line": 129, - "column": 19 - }, - { - "line": 145, - "column": 30 - }, - { - "line": 146, - "column": 36 - }, - { - "line": 177, - "column": 31 - }, - { - "line": 178, - "column": 21 - }, - { - "line": 183, - "column": 43 - }, - { - "line": 185, - "column": 37 - }, - { - "line": 186, - "column": 37 - } - ] - }, - { - "term": "axis", - "file": "grbl/system.c", - "locations": [ - { - "line": 71, - "column": 31 - }, - { - "line": 74, - "column": 25 - }, - { - "line": 179, - "column": 31 - }, - { - "line": 182, - "column": 21 - }, - { - "line": 186, - "column": 15 - }, - { - "line": 187, - "column": 46 - }, - { - "line": 188, - "column": 22 - }, - { - "line": 189, - "column": 46 - }, - { - "line": 203, - "column": 20 - }, - { - "line": 204, - "column": 35 - }, - { - "line": 210, - "column": 43 - }, - { - "line": 212, - "column": 37 - }, - { - "line": 216, - "column": 37 - }, - { - "line": 227, - "column": 20 - } - ] - }, - { - "term": "axis", - "file": "grbl/config.h", - "locations": [ - { - "line": 31, - "column": 10 - }, - { - "line": 98, - "column": 6 - }, - { - "line": 108, - "column": 46 - }, - { - "line": 110, - "column": 31 - }, - { - "line": 111, - "column": 31 - }, - { - "line": 112, - "column": 34 - }, - { - "line": 113, - "column": 11 - }, - { - "line": 114, - "column": 35 - }, - { - "line": 118, - "column": 31 - }, - { - "line": 119, - "column": 32 - }, - { - "line": 123, - "column": 62 - }, - { - "line": 124, - "column": 33 - }, - { - "line": 126, - "column": 32 - }, - { - "line": 127, - "column": 32 - }, - { - "line": 134, - "column": 18 - }, - { - "line": 136, - "column": 43 - }, - { - "line": 137, - "column": 21 - }, - { - "line": 138, - "column": 25 - }, - { - "line": 163, - "column": 68 - }, - { - "line": 167, - "column": 25 - }, - { - "line": 189, - "column": 32 - }, - { - "line": 212, - "column": 45 - }, - { - "line": 214, - "column": 45 - }, - { - "line": 307, - "column": 18 - }, - { - "line": 308, - "column": 35 - }, - { - "line": 309, - "column": 69 - }, - { - "line": 312, - "column": 23 - }, - { - "line": 338, - "column": 14 - }, - { - "line": 339, - "column": 16 - }, - { - "line": 341, - "column": 27 - }, - { - "line": 499, - "column": 18 - }, - { - "line": 500, - "column": 18 - }, - { - "line": 557, - "column": 40 - }, - { - "line": 559, - "column": 61 - }, - { - "line": 571, - "column": 16 - }, - { - "line": 572, - "column": 39 - } - ] - }, - { - "term": "axis", - "file": "grbl/nuts_bolts.c", - "locations": [ - { - "line": 5, - "column": 20 - }, - { - "line": 12, - "column": 20 - } - ] - }, - { - "term": "axis", - "file": "grbl/nuts_bolts.c", - "locations": [ - { - "line": 1, - "column": 21 - }, - { - "line": 5, - "column": 20 - } - ] - }, - { - "term": "axis", - "file": "grbl/stepper.c", - "locations": [ - { - "line": 38, - "column": 25 - }, - { - "line": 62, - "column": 19 - }, - { - "line": 64, - "column": 27 - } - ] - }, - { - "term": "axis", - "file": "grbl/stepper.c", - "locations": [ - { - "line": 4, - "column": 21 - } - ] - }, - { - "term": "axis", - "file": "grbl/stepper.c", - "locations": [ - { - "line": 14, - "column": 24 - } - ] - }, - { - "term": "axis", - "file": "grbl/stepper.c", - "locations": [ - { - "line": 10, - "column": 11 - }, - { - "line": 15, - "column": 26 - }, - { - "line": 24, - "column": 27 - }, - { - "line": 25, - "column": 26 - }, - { - "line": 30, - "column": 24 - }, - { - "line": 31, - "column": 21 - } - ] - }, - { - "term": "axis", - "file": "grbl/stepper.c", - "locations": [ - { - "line": 11, - "column": 41 - }, - { - "line": 12, - "column": 40 - } - ] - }, - { - "term": "axis", - "file": "grbl/stepper.c", - "locations": [ - { - "line": 63, - "column": 15 - }, - { - "line": 70, - "column": 15 - }, - { - "line": 75, - "column": 26 - }, - { - "line": 123, - "column": 15 - }, - { - "line": 130, - "column": 15 - }, - { - "line": 142, - "column": 82 - }, - { - "line": 146, - "column": 25 - }, - { - "line": 150, - "column": 32 - }, - { - "line": 157, - "column": 78 - }, - { - "line": 159, - "column": 85 - }, - { - "line": 162, - "column": 39 - }, - { - "line": 163, - "column": 81 - }, - { - "line": 202, - "column": 13 - }, - { - "line": 215, - "column": 15 - }, - { - "line": 222, - "column": 15 - }, - { - "line": 250, - "column": 29 - }, - { - "line": 266, - "column": 17 - }, - { - "line": 271, - "column": 26 - }, - { - "line": 277, - "column": 28 - }, - { - "line": 278, - "column": 48 - }, - { - "line": 279, - "column": 19 - }, - { - "line": 280, - "column": 19 - }, - { - "line": 281, - "column": 19 - }, - { - "line": 282, - "column": 17 - }, - { - "line": 283, - "column": 19 - }, - { - "line": 306, - "column": 22 - }, - { - "line": 313, - "column": 24 - }, - { - "line": 314, - "column": 31 - }, - { - "line": 316, - "column": 43 - }, - { - "line": 320, - "column": 24 - }, - { - "line": 322, - "column": 42 - }, - { - "line": 323, - "column": 28 - }, - { - "line": 329, - "column": 81 - }, - { - "line": 330, - "column": 28 - }, - { - "line": 334, - "column": 24 - }, - { - "line": 335, - "column": 31 - }, - { - "line": 337, - "column": 43 - }, - { - "line": 341, - "column": 24 - }, - { - "line": 343, - "column": 42 - }, - { - "line": 344, - "column": 28 - }, - { - "line": 350, - "column": 81 - }, - { - "line": 351, - "column": 28 - }, - { - "line": 354, - "column": 11 - }, - { - "line": 355, - "column": 26 - }, - { - "line": 356, - "column": 35 - }, - { - "line": 358, - "column": 47 - }, - { - "line": 362, - "column": 26 - }, - { - "line": 364, - "column": 44 - }, - { - "line": 365, - "column": 30 - }, - { - "line": 371, - "column": 83 - }, - { - "line": 372, - "column": 30 - }, - { - "line": 375, - "column": 14 - }, - { - "line": 377, - "column": 24 - }, - { - "line": 378, - "column": 31 - }, - { - "line": 380, - "column": 43 - }, - { - "line": 384, - "column": 24 - }, - { - "line": 386, - "column": 42 - }, - { - "line": 387, - "column": 28 - }, - { - "line": 393, - "column": 81 - }, - { - "line": 394, - "column": 28 - }, - { - "line": 400, - "column": 22 - }, - { - "line": 401, - "column": 70 - }, - { - "line": 403, - "column": 67 - }, - { - "line": 412, - "column": 22 - }, - { - "line": 439, - "column": 13 - }, - { - "line": 459, - "column": 15 - }, - { - "line": 474, - "column": 22 - }, - { - "line": 481, - "column": 22 - }, - { - "line": 511, - "column": 22 - }, - { - "line": 524, - "column": 13 - }, - { - "line": 555, - "column": 13 - }, - { - "line": 693, - "column": 28 - }, - { - "line": 700, - "column": 31 - }, - { - "line": 701, - "column": 28 - }, - { - "line": 707, - "column": 28 - }, - { - "line": 966, - "column": 51 - }, - { - "line": 1000, - "column": 26 - }, - { - "line": 1001, - "column": 39 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 7, - "column": 48 - }, - { - "line": 8, - "column": 73 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 31, - "column": 28 - }, - { - "line": 32, - "column": 28 - }, - { - "line": 33, - "column": 28 - }, - { - "line": 34, - "column": 24 - }, - { - "line": 35, - "column": 24 - }, - { - "line": 36, - "column": 24 - }, - { - "line": 37, - "column": 28 - }, - { - "line": 38, - "column": 28 - }, - { - "line": 39, - "column": 28 - }, - { - "line": 40, - "column": 26 - }, - { - "line": 41, - "column": 26 - }, - { - "line": 42, - "column": 26 - }, - { - "line": 44, - "column": 13 - }, - { - "line": 45, - "column": 30 - }, - { - "line": 46, - "column": 26 - }, - { - "line": 47, - "column": 30 - }, - { - "line": 48, - "column": 28 - }, - { - "line": 56, - "column": 23 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 4, - "column": 48 - }, - { - "line": 5, - "column": 82 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 4, - "column": 19 - }, - { - "line": 5, - "column": 13 - }, - { - "line": 7, - "column": 17 - }, - { - "line": 9, - "column": 21 - }, - { - "line": 10, - "column": 24 - }, - { - "line": 11, - "column": 17 - }, - { - "line": 31, - "column": 14 - }, - { - "line": 32, - "column": 25 - }, - { - "line": 33, - "column": 21 - }, - { - "line": 37, - "column": 17 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 1, - "column": 52 - }, - { - "line": 2, - "column": 34 - }, - { - "line": 5, - "column": 9 - }, - { - "line": 6, - "column": 9 - }, - { - "line": 7, - "column": 11 - }, - { - "line": 8, - "column": 9 - }, - { - "line": 10, - "column": 26 - }, - { - "line": 12, - "column": 9 - }, - { - "line": 13, - "column": 9 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 1, - "column": 57 - }, - { - "line": 2, - "column": 39 - }, - { - "line": 5, - "column": 9 - }, - { - "line": 6, - "column": 9 - }, - { - "line": 7, - "column": 11 - }, - { - "line": 8, - "column": 9 - }, - { - "line": 10, - "column": 31 - }, - { - "line": 12, - "column": 9 - }, - { - "line": 13, - "column": 9 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 1, - "column": 53 - }, - { - "line": 4, - "column": 41 - }, - { - "line": 6, - "column": 9 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 1, - "column": 5 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 1, - "column": 10 - }, - { - "line": 2, - "column": 9 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 1, - "column": 39 - }, - { - "line": 3, - "column": 10 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 1, - "column": 5 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 1, - "column": 10 - }, - { - "line": 2, - "column": 10 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 2, - "column": 37 - }, - { - "line": 4, - "column": 9 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 1, - "column": 5 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.c", - "locations": [ - { - "line": 1, - "column": 10 - }, - { - "line": 2, - "column": 9 - } - ] - }, - { - "term": "axis", - "file": "grbl/gcode.h", - "locations": [ - { - "line": 152, - "column": 9 - }, - { - "line": 203, - "column": 14 - }, - { - "line": 211, - "column": 14 - }, - { - "line": 223, - "column": 19 - }, - { - "line": 225, - "column": 23 - }, - { - "line": 227, - "column": 23 - } - ] - }, - { - "term": "axis", - "file": "grbl/settings.h", - "locations": [ - { - "line": 72, - "column": 15 - }, - { - "line": 73, - "column": 8 - }, - { - "line": 74, - "column": 8 - }, - { - "line": 75, - "column": 8 - }, - { - "line": 79, - "column": 5 - }, - { - "line": 80, - "column": 23 - }, - { - "line": 81, - "column": 19 - }, - { - "line": 82, - "column": 23 - }, - { - "line": 83, - "column": 21 - }, - { - "line": 134, - "column": 58 - }, - { - "line": 137, - "column": 63 - }, - { - "line": 140, - "column": 59 - } - ] - }, - { - "term": "axis", - "file": "grbl/motion_control.c", - "locations": [ - { - "line": 2, - "column": 38 - }, - { - "line": 9, - "column": 10 - }, - { - "line": 11, - "column": 15 - }, - { - "line": 12, - "column": 15 - }, - { - "line": 13, - "column": 10 - }, - { - "line": 14, - "column": 10 - }, - { - "line": 15, - "column": 11 - }, - { - "line": 16, - "column": 11 - }, - { - "line": 19, - "column": 33 - }, - { - "line": 43, - "column": 39 - }, - { - "line": 50, - "column": 59 - }, - { - "line": 77, - "column": 12 - }, - { - "line": 85, - "column": 10 - }, - { - "line": 86, - "column": 10 - }, - { - "line": 87, - "column": 10 - }, - { - "line": 94, - "column": 10 - }, - { - "line": 95, - "column": 10 - }, - { - "line": 100, - "column": 15 - }, - { - "line": 101, - "column": 15 - }, - { - "line": 102, - "column": 15 - } - ] - }, - { - "term": "axis", - "file": "grbl/motion_control.c", - "locations": [ - { - "line": 22, - "column": 23 - } - ] - }, - { - "term": "axis", - "file": "grbl/main.c", - "locations": [ - { - "line": 27, - "column": 23 - }, - { - "line": 28, - "column": 29 - } - ] - }, - { - "term": "axis", - "file": "grbl/report.h", - "locations": [ - { - "line": 47, - "column": 21 - }, - { - "line": 49, - "column": 24 - }, - { - "line": 54, - "column": 21 - }, - { - "line": 55, - "column": 24 - }, - { - "line": 60, - "column": 33 - } - ] - }, - { - "term": "axis", - "file": "grbl/planner.h", - "locations": [ - { - "line": 53, - "column": 19 - }, - { - "line": 54, - "column": 49 - }, - { - "line": 56, - "column": 29 - }, - { - "line": 69, - "column": 32 - }, - { - "line": 75, - "column": 35 - }, - { - "line": 96, - "column": 53 - } - ] - }, - { - "term": "axis", - "file": "grbl/report.c", - "locations": [ - { - "line": 2, - "column": 24 - }, - { - "line": 4, - "column": 20 - }, - { - "line": 5, - "column": 26 - }, - { - "line": 6, - "column": 17 - } - ] - }, - { - "term": "axis", - "file": "grbl/report.c", - "locations": [ - { - "line": 29, - "column": 11 - }, - { - "line": 31, - "column": 18 - }, - { - "line": 32, - "column": 13 - } - ] - }, - { - "term": "axis", - "file": "grbl/report.c", - "locations": [ - { - "line": 27, - "column": 11 - }, - { - "line": 29, - "column": 16 - }, - { - "line": 30, - "column": 26 - }, - { - "line": 31, - "column": 22 - }, - { - "line": 39, - "column": 11 - } - ] - }, - { - "term": "axis", - "file": "grbl/report.c", - "locations": [ - { - "line": 8, - "column": 25 - }, - { - "line": 10, - "column": 14 - } - ] - }, - { - "term": "axis", - "file": "grbl/report.c", - "locations": [ - { - "line": 4, - "column": 21 - }, - { - "line": 18, - "column": 16 - }, - { - "line": 22, - "column": 14 - } - ] - }, - { - "term": "axis", - "file": "grbl/report.c", - "locations": [ - { - "line": 20, - "column": 23 - } - ] - }, - { - "term": "axis", - "file": "grbl/report.c", - "locations": [ - { - "line": 9, - "column": 29 - }, - { - "line": 11, - "column": 25 - }, - { - "line": 49, - "column": 14 - }, - { - "line": 52, - "column": 23 - }, - { - "line": 55, - "column": 36 - }, - { - "line": 68, - "column": 14 - }, - { - "line": 108, - "column": 43 - }, - { - "line": 109, - "column": 43 - }, - { - "line": 110, - "column": 43 - }, - { - "line": 111, - "column": 17 - }, - { - "line": 112, - "column": 45 - }, - { - "line": 134, - "column": 18 - } - ] - }, - { - "term": "axis", - "file": "grbl/defaults.h", - "locations": [ - { - "line": 90, - "column": 47 - }, - { - "line": 135, - "column": 47 - }, - { - "line": 180, - "column": 47 - }, - { - "line": 224, - "column": 47 - }, - { - "line": 269, - "column": 47 - }, - { - "line": 314, - "column": 47 - }, - { - "line": 357, - "column": 47 - }, - { - "line": 468, - "column": 11 - } - ] - }, - { - "term": "axis", - "file": "grbl/gcode.c", - "locations": [ - { - "line": 30, - "column": 8 - }, - { - "line": 31, - "column": 8 - }, - { - "line": 32, - "column": 8 - }, - { - "line": 33, - "column": 8 - } - ] - }, - { - "term": "axis", - "file": "grbl/gcode.c", - "locations": [ - { - "line": 18, - "column": 10 - }, - { - "line": 19, - "column": 10 - }, - { - "line": 20, - "column": 11 - }, - { - "line": 21, - "column": 12 - }, - { - "line": 25, - "column": 47 - }, - { - "line": 26, - "column": 10 - }, - { - "line": 89, - "column": 34 - }, - { - "line": 91, - "column": 18 - }, - { - "line": 92, - "column": 14 - }, - { - "line": 106, - "column": 34 - }, - { - "line": 107, - "column": 16 - }, - { - "line": 108, - "column": 12 - }, - { - "line": 153, - "column": 35 - }, - { - "line": 154, - "column": 32 - }, - { - "line": 155, - "column": 16 - }, - { - "line": 156, - "column": 12 - }, - { - "line": 239, - "column": 61 - }, - { - "line": 240, - "column": 61 - }, - { - "line": 241, - "column": 61 - }, - { - "line": 253, - "column": 61 - }, - { - "line": 254, - "column": 61 - }, - { - "line": 255, - "column": 61 - }, - { - "line": 256, - "column": 19 - }, - { - "line": 257, - "column": 63 - }, - { - "line": 259, - "column": 14 - }, - { - "line": 300, - "column": 76 - }, - { - "line": 308, - "column": 24 - }, - { - "line": 309, - "column": 39 - }, - { - "line": 310, - "column": 6 - }, - { - "line": 311, - "column": 9 - }, - { - "line": 324, - "column": 71 - }, - { - "line": 325, - "column": 48 - }, - { - "line": 339, - "column": 10 - }, - { - "line": 398, - "column": 6 - }, - { - "line": 399, - "column": 6 - }, - { - "line": 400, - "column": 6 - }, - { - "line": 403, - "column": 6 - }, - { - "line": 404, - "column": 6 - }, - { - "line": 405, - "column": 6 - }, - { - "line": 408, - "column": 6 - }, - { - "line": 409, - "column": 6 - }, - { - "line": 410, - "column": 6 - }, - { - "line": 417, - "column": 22 - }, - { - "line": 418, - "column": 21 - }, - { - "line": 432, - "column": 7 - }, - { - "line": 433, - "column": 40 - }, - { - "line": 434, - "column": 6 - }, - { - "line": 436, - "column": 10 - }, - { - "line": 445, - "column": 29 - }, - { - "line": 458, - "column": 90 - }, - { - "line": 459, - "column": 63 - }, - { - "line": 460, - "column": 24 - }, - { - "line": 461, - "column": 9 - }, - { - "line": 466, - "column": 83 - }, - { - "line": 467, - "column": 60 - }, - { - "line": 468, - "column": 11 - }, - { - "line": 487, - "column": 24 - }, - { - "line": 489, - "column": 23 - }, - { - "line": 491, - "column": 45 - }, - { - "line": 494, - "column": 42 - }, - { - "line": 496, - "column": 44 - }, - { - "line": 503, - "column": 26 - }, - { - "line": 504, - "column": 11 - }, - { - "line": 508, - "column": 24 - }, - { - "line": 509, - "column": 23 - }, - { - "line": 512, - "column": 40 - }, - { - "line": 521, - "column": 49 - }, - { - "line": 525, - "column": 10 - }, - { - "line": 526, - "column": 12 - }, - { - "line": 527, - "column": 28 - }, - { - "line": 528, - "column": 29 - }, - { - "line": 529, - "column": 71 - }, - { - "line": 537, - "column": 48 - }, - { - "line": 559, - "column": 14 - }, - { - "line": 561, - "column": 30 - }, - { - "line": 562, - "column": 20 - }, - { - "line": 565, - "column": 12 - }, - { - "line": 571, - "column": 22 - }, - { - "line": 574, - "column": 22 - }, - { - "line": 578, - "column": 32 - }, - { - "line": 588, - "column": 21 - }, - { - "line": 589, - "column": 53 - }, - { - "line": 590, - "column": 8 - }, - { - "line": 592, - "column": 38 - }, - { - "line": 594, - "column": 14 - }, - { - "line": 597, - "column": 22 - }, - { - "line": 598, - "column": 9 - }, - { - "line": 599, - "column": 11 - }, - { - "line": 609, - "column": 47 - }, - { - "line": 610, - "column": 13 - }, - { - "line": 611, - "column": 15 - }, - { - "line": 617, - "column": 43 - }, - { - "line": 618, - "column": 43 - }, - { - "line": 620, - "column": 60 - }, - { - "line": 623, - "column": 15 - }, - { - "line": 624, - "column": 16 - }, - { - "line": 626, - "column": 66 - }, - { - "line": 628, - "column": 34 - }, - { - "line": 629, - "column": 34 - }, - { - "line": 720, - "column": 32 - }, - { - "line": 721, - "column": 32 - }, - { - "line": 724, - "column": 35 - }, - { - "line": 729, - "column": 32 - }, - { - "line": 735, - "column": 37 - }, - { - "line": 736, - "column": 37 - }, - { - "line": 740, - "column": 60 - }, - { - "line": 755, - "column": 54 - }, - { - "line": 759, - "column": 15 - }, - { - "line": 769, - "column": 21 - }, - { - "line": 776, - "column": 6 - }, - { - "line": 777, - "column": 11 - }, - { - "line": 780, - "column": 17 - }, - { - "line": 800, - "column": 32 - }, - { - "line": 820, - "column": 28 - }, - { - "line": 821, - "column": 31 - }, - { - "line": 823, - "column": 8 - }, - { - "line": 835, - "column": 55 - }, - { - "line": 923, - "column": 5 - }, - { - "line": 924, - "column": 6 - }, - { - "line": 927, - "column": 45 - }, - { - "line": 929, - "column": 79 - }, - { - "line": 930, - "column": 75 - }, - { - "line": 938, - "column": 54 - }, - { - "line": 950, - "column": 53 - }, - { - "line": 956, - "column": 59 - }, - { - "line": 964, - "column": 10 - }, - { - "line": 966, - "column": 55 - }, - { - "line": 986, - "column": 57 - }, - { - "line": 987, - "column": 42 - }, - { - "line": 990, - "column": 8 - }, - { - "line": 999, - "column": 12 - }, - { - "line": 1000, - "column": 21 - }, - { - "line": 1001, - "column": 16 - } - ] - }, - { - "term": "axis", - "file": "grbl/motion_control.h", - "locations": [ - { - "line": 31, - "column": 32 - }, - { - "line": 32, - "column": 32 - }, - { - "line": 33, - "column": 32 - }, - { - "line": 42, - "column": 38 - }, - { - "line": 46, - "column": 10 - } - ] - }, - { - "term": "axis", - "file": "grbl/protocol.c", - "locations": [ - { - "line": 510, - "column": 27 - }, - { - "line": 511, - "column": 27 - }, - { - "line": 564, - "column": 57 - }, - { - "line": 573, - "column": 52 - }, - { - "line": 578, - "column": 52 - }, - { - "line": 583, - "column": 41 - }, - { - "line": 584, - "column": 39 - }, - { - "line": 598, - "column": 41 - }, - { - "line": 599, - "column": 39 - }, - { - "line": 651, - "column": 43 - }, - { - "line": 652, - "column": 41 - } - ] - } -] \ No newline at end of file diff --git a/targets/locations_json.json b/targets/locations_json.json new file mode 100644 index 0000000000..4dc520273d --- /dev/null +++ b/targets/locations_json.json @@ -0,0 +1,1526 @@ +[ + { + "term": "axis", + "file": "ex.c", + "locations": [ + { + "line": 3, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 4, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 15, + "column": 3, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 18, + "column": 5, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 18, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 19, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 20, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 22, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 28, + "column": 7, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "axis", + "file": "gcode.c", + "locations": [ + { + "line": 30, + "column": 9, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 31, + "column": 9, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 32, + "column": 9, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 33, + "column": 9, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 78, + "column": 11, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 78, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 79, + "column": 11, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 79, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 79, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 80, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 81, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 85, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 86, + "column": 11, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 149, + "column": 13, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 151, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 151, + "column": 40, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 151, + "column": 79, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 152, + "column": 15, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 152, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 166, + "column": 13, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 167, + "column": 17, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 167, + "column": 38, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 167, + "column": 77, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 168, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 168, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 213, + "column": 13, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 214, + "column": 13, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 215, + "column": 17, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 215, + "column": 38, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 215, + "column": 77, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 216, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 216, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 299, + "column": 59, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 299, + "column": 93, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 300, + "column": 59, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 300, + "column": 93, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 301, + "column": 59, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 301, + "column": 93, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 313, + "column": 59, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 313, + "column": 76, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 313, + "column": 94, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 314, + "column": 59, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 314, + "column": 76, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 314, + "column": 94, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 315, + "column": 59, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 315, + "column": 76, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 315, + "column": 94, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 316, + "column": 18, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 317, + "column": 61, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 317, + "column": 78, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 317, + "column": 96, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 319, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 355, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 368, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 369, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 370, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 371, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 371, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 371, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 384, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 385, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 399, + "column": 11, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 399, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 458, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 458, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 459, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 459, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 460, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 460, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 463, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 463, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 464, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 464, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 465, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 465, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 468, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 468, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 469, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 469, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 470, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 470, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 477, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 478, + "column": 22, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 492, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 493, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 494, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 494, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 496, + "column": 11, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 496, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 496, + "column": 61, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 505, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 518, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 519, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 520, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 521, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 526, + "column": 7, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 527, + "column": 7, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 528, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 528, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 528, + "column": 62, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 547, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 549, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 551, + "column": 13, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 554, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 556, + "column": 13, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 563, + "column": 7, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 564, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 564, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 564, + "column": 62, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 568, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 569, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 572, + "column": 22, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 581, + "column": 7, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 585, + "column": 11, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 585, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 585, + "column": 63, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 586, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 587, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 588, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 589, + "column": 66, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 597, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 619, + "column": 15, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 621, + "column": 29, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 622, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 625, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 625, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 631, + "column": 11, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 634, + "column": 11, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 638, + "column": 11, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 648, + "column": 5, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 649, + "column": 5, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 650, + "column": 9, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 650, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 650, + "column": 62, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 652, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 654, + "column": 15, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 654, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 657, + "column": 7, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 658, + "column": 7, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 659, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 659, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 659, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 669, + "column": 11, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 670, + "column": 11, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 671, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 671, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 671, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 677, + "column": 11, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 678, + "column": 11, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 680, + "column": 11, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 683, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 683, + "column": 35, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 683, + "column": 66, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 684, + "column": 17, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 684, + "column": 35, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 684, + "column": 47, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 684, + "column": 65, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 684, + "column": 105, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 686, + "column": 11, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 688, + "column": 35, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 688, + "column": 61, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 689, + "column": 35, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 689, + "column": 61, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 780, + "column": 33, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 781, + "column": 33, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 784, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 784, + "column": 48, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 789, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 795, + "column": 38, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 796, + "column": 38, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 800, + "column": 61, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 800, + "column": 90, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 815, + "column": 11, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 819, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 819, + "column": 35, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 819, + "column": 66, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 829, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 836, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 837, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 840, + "column": 8, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 860, + "column": 5, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 880, + "column": 5, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 881, + "column": 5, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 883, + "column": 9, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 883, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 883, + "column": 40, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 895, + "column": 11, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 983, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 984, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 984, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 987, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 989, + "column": 61, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 990, + "column": 57, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 998, + "column": 53, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1010, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1016, + "column": 58, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1024, + "column": 11, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1026, + "column": 54, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1046, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1047, + "column": 3, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1050, + "column": 9, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1050, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1059, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1059, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1059, + "column": 29, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1060, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1061, + "column": 14, + "meta": { + "Kind": "Comment" + } + } + ] + } +] \ No newline at end of file diff --git a/targets/min_ex.c b/targets/min_ex.c new file mode 100644 index 0000000000..20aff4030b --- /dev/null +++ b/targets/min_ex.c @@ -0,0 +1,3 @@ +// +// Created by torun on 02.11.20. +// diff --git a/targets/toSlice.json b/targets/toSlice.json new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/boomerang/slicer.cpp b/tools/boomerang/slicer.cpp index f18890b91c..3ff1179040 100644 --- a/tools/boomerang/slicer.cpp +++ b/tools/boomerang/slicer.cpp @@ -22,11 +22,11 @@ #include #include +#include #include - #include #include - +#define __INTERPROCEDURAL__ namespace bofs = boost::filesystem; using namespace llvm; using namespace std; @@ -93,7 +93,7 @@ ostream &operator<<(ostream &os, const Term &t) { class SlicerFact { public: SlicerFact() = default; - SlicerFact(const Location *l, const Instruction *i) : l(l), i(i) {} + SlicerFact(const Location *l, const Value *i) : l(l), i(i) { } bool operator<(const SlicerFact &rhs) const { return i < rhs.i; } bool operator==(const SlicerFact &rhs) const { return i == rhs.i && l == rhs.l; @@ -101,12 +101,12 @@ class SlicerFact { friend std::ostream &operator<<(std::ostream &os, const SlicerFact &rhs); [[nodiscard]] bool isZero() const { return i == nullptr; } - const llvm::Instruction *getInstruction() { return i; } + const llvm::Value *getInstruction() { return i; } const Location *getLocation() { return l; } private: const Location *l = nullptr; - const Instruction *i = nullptr; + const Value *i = nullptr; }; std::ostream &operator<<(std::ostream &os, const SlicerFact &rhs) { @@ -128,36 +128,66 @@ template <> struct hash { class NormalFlowFunction : public FlowFunction { public: - NormalFlowFunction(const Instruction *curr, const Instruction *succ, - const vector *terms) - : terms(terms), curr(curr), succ(succ) {} + NormalFlowFunction(const Instruction *curr, const Instruction *succ) + : curr(curr), succ(succ) {} std::set computeTargets(SlicerFact source) override { set facts; facts.insert(source); + // check logic for conditions + if (!source.isZero()) { + const auto* user = dyn_cast(source.getInstruction()); + if (user) { + llvm::dbgs() << "USER:\n"; + user->dump(); + llvm::dbgs() << curr->getFunction()->getName() << "\n"; + for (unsigned int i = 0; i < user->getNumOperands(); ++i) { + if (const auto *use = + dyn_cast(user->getOperandUse(i).get())) { + if (use == curr || use == source.getInstruction()) { + llvm::dbgs() << "USE:\n"; + user->getOperandUse(i)->dump(); + llvm::dbgs() << "\n\n"; + if (auto *dl = use->getDebugLoc().get()) { + facts.insert(SlicerFact( + createLocation(dl->getLine(), dl->getColumn()), use)); + } + } + } + } + } + } return facts; } private: - const vector *terms; const Instruction *curr; const Instruction *succ; }; class CallFlowFunction : public FlowFunction { public: - CallFlowFunction(const Instruction *callStmt, const Function *destMthd, - const vector *terms) - : terms(terms), callStmt(callStmt), destMthd(destMthd) {} + CallFlowFunction(const Instruction *callStmt, const Function *destMthd) + : callStmt(callStmt), destMthd(destMthd) {} std::set computeTargets(SlicerFact source) override { set facts; facts.insert(source); +#ifdef __INTERPROCEDURAL__ + if (!source.isZero()) { + for (unsigned int i = 0; i < callStmt->getNumOperands(); ++i) { + const auto op = callStmt->getOperand(i); + if (source.getInstruction() == op) { + facts.insert(SlicerFact(source.getLocation(), + getNthFunctionArgument(destMthd, i))); + } + } + } +#endif return facts; } private: - const vector *terms; const Instruction *callStmt; const Function *destMthd; }; @@ -169,8 +199,25 @@ class RetFlowFunction : public FlowFunction { : callSite(callSite), calleeMthd(calleeMthd), exitStmt(exitStmt), retSite(retSite) {} std::set computeTargets(SlicerFact source) override { + llvm::dbgs() << "\n"; + callSite->dump(); + calleeMthd->dump(); + exitStmt->dump(); + retSite->dump(); set facts; facts.insert(source); +#ifdef __INTERPROCEDURAL__ + for (unsigned int i = 0; i < callSite->getNumOperands(); ++i) { + const auto op = callSite->getOperand(i); + if (source.getInstruction() == op) { + facts.insert(SlicerFact(source.getLocation(), + getNthFunctionArgument(calleeMthd, i))); + } + } + if (!source.isZero()) { + facts.insert(SlicerFact(source.getLocation(), exitStmt)); + } +#endif return facts; } @@ -185,10 +232,8 @@ class RetFlowFunction : public FlowFunction { class CallToRetFlowFunction : public FlowFunction { public: CallToRetFlowFunction(const Instruction *callSite, const Instruction *retSite, - set callees, - const vector *terms) - : callSite(callSite), retSite(retSite), callees(std::move(callees)), - terms(terms) {} + set callees) + : callSite(callSite), retSite(retSite), callees(std::move(callees)) {} std::set computeTargets(SlicerFact source) override { set facts; @@ -200,7 +245,6 @@ class CallToRetFlowFunction : public FlowFunction { const Instruction *callSite; const Instruction *retSite; set callees; - const vector *terms; }; template @@ -212,11 +256,13 @@ class IFDSSLicer IFDSSLicer(ICFG_T *icfg, const LLVMTypeHierarchy *th, const ProjectIRDB *irdb, const LLVMPointsToInfo *PT, map> sc, - const std::vector *terms) + const std::vector *terms, + const std::set &entrypoints) : IFDSTabulationProblem(irdb, th, icfg, PT), - terms(terms), slicingCriteria(std::move(sc)) {} + terms(terms), slicingCriteria(std::move(sc)), entrypoints(entrypoints) { + } private: [[nodiscard]] SlicerFact createZeroValue() const override { @@ -225,12 +271,12 @@ class IFDSSLicer shared_ptr> getNormalFlowFunction(const Instruction *curr, const Instruction *succ) override { - return make_shared(curr, succ, terms); + return make_shared(curr, succ); } shared_ptr> getCallFlowFunction(const Instruction *callStmt, const Function *destMthd) override { - return make_shared(callStmt, destMthd, terms); + return make_shared(callStmt, destMthd); } shared_ptr> getRetFlowFunction(const Instruction *callSite, const Function *calleeMthd, @@ -243,20 +289,19 @@ class IFDSSLicer getCallToRetFlowFunction(const Instruction *callSite, const Instruction *retSite, set callees) override { - return make_shared(callSite, retSite, callees, - terms); + return make_shared(callSite, retSite, callees); } map> initialSeeds() override { - const Instruction *i = - // &this->ICF->getFunction("parse_command")->front().front(); - &this->ICF->getFunction("parse_command")->back().front(); - SlicerFact sf = SlicerFact(); - if (slicingCriteria.find(i) == slicingCriteria.end()) { - set facts; - facts.insert(sf); - slicingCriteria[i] = facts; - } else { - slicingCriteria[i].insert(sf); + for (auto &entrypoint : entrypoints) { + const Instruction *i = &this->ICF->getFunction(entrypoint)->back().back(); + SlicerFact sf = SlicerFact(); + if (slicingCriteria.find(i) == slicingCriteria.end()) { + set facts; + facts.insert(sf); + slicingCriteria[i] = facts; + } else { + slicingCriteria[i].insert(sf); + } } return slicingCriteria; } @@ -283,25 +328,17 @@ class IFDSSLicer const std::vector *terms; map> slicingCriteria; + const std::set &entrypoints; }; -int main(int argc, const char **argv) { - std::cout << "Current path is " << bofs::current_path() << '\n'; - initializeLogger(true); - // ProjectIRDB DB({argv[1]}, IRDBOptions::WPA); - ProjectIRDB DB({"./targets/ex.ll"}, IRDBOptions::WPA); - // ProjectIRDB DB({"/home/pmueller/Arbeit/code/phasar/targets/cd.ll"}, - // IRDBOptions::WPA); +std::string createSlice(string target, set entrypoints, + vector terms) { + ProjectIRDB DB({target}, IRDBOptions::WPA); LOG_IF_ENABLE(BOOST_LOG(lg::get()) << "STARTED") - // DB.preprocessIR(); LLVMTypeHierarchy th(DB); - LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, {"parse_command"}, + LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, set(entrypoints), &th); LLVMPointsToInfo PT(DB); - std::ifstream in("targets/locations.json"); - json j; - in >> j; - auto terms = j.get>(); map> sc; for (auto *module : DB.getAllModules()) { for (auto &function : module->functions()) { @@ -323,7 +360,7 @@ int main(int argc, const char **argv) { for (const auto &t : terms) { if (name.find(t.term) != StringRef::npos) { for (const auto &l : t.locations) { - if (l.line == line) { + if (l.line == line && false) { facts.insert(SlicerFact(&l, &i)); } } @@ -333,12 +370,15 @@ int main(int argc, const char **argv) { } for (auto &t : terms) { for (auto &l : t.locations) { - if (l.line == line && l.column == column && t.file == file) { + // check same statement + if (l.line == line && t.file == file) { + i.dump(); facts.insert(SlicerFact(&l, &i)); if (const auto *branch = dyn_cast(&i)) { if (branch->isConditional()) { - const auto *constbranch = branch->getSuccessor( - 0); // Assume first branch is true branch + const auto *constbranch = branch->getSuccessor(0); + // Assume first branch is true branch -- we're pretty sure + // that is always the case for (const auto &inst : *constbranch) { if (auto *debuglog2 = inst.getDebugLoc().get()) { const auto *loc = createLocation( @@ -359,17 +399,30 @@ int main(int argc, const char **argv) { } } } - IFDSSLicer slicer(&cg, &th, &DB, &PT, sc, &terms); + IFDSSLicer slicer(&cg, &th, &DB, &PT, sc, &terms, + entrypoints); IFDSSolver test(slicer); - test.enableESGAsDot(); test.solve(); + ofstream out; + out.open("out/graph.dot"); + test.emitESGAsDot(out); + out.close(); + out.open("out/results.txt"); + test.dumpResults(out); + out.close(); cout << endl; set, SliceComparator> slice; vector textSlice; + map, + SliceComparator>> + slices; + map textSlices; for (const auto &module : DB.getAllModules()) { for (auto &function : module->functions()) { + llvm::dbgs() << function.getName() << "\n"; bool isUsed = false; for (auto &bb : function) { for (const auto &i : bb) { @@ -382,30 +435,48 @@ int main(int argc, const char **argv) { << res.size() << endl; for (auto fact : res) { if (!fact.isZero()) { + auto extractedInstruction = fact.getInstruction(); cout << "FACT INS: " << llvmIRToString(fact.getInstruction()) << endl; cout << "SRC: " << *fact.getLocation() << " " - << psr::getSrcCodeFromIR(fact.getInstruction()) << endl + << psr::getSrcCodeFromIR(&i) << endl << endl; + if (extractedInstruction == &i) { slice.insert( - std::make_tuple(psr::getSrcCodeFromIR(fact.getInstruction()), - *fact.getLocation(), fact.getInstruction())); - const auto *blockExit = - fact.getInstruction()->getParent()->getTerminator(); - const auto instStr = psr::llvmIRToString(blockExit); - const auto exitSrc = psr::getSrcCodeFromIR(blockExit); - if (auto *dl = blockExit->getDebugLoc().get()) { - cout << "ADDING " << llvmIRToString(blockExit) << " " << exitSrc - << endl; - slice.insert(std::make_tuple( - exitSrc, *createLocation(dl->getLine(), dl->getColumn()), - blockExit)); - } else { - cerr << "DID NOT FIND LOCATION" << endl; - slice.insert( - std::make_tuple(exitSrc, *createLocation(0, 0), blockExit)); + std::make_tuple(psr::getSrcCodeFromIR(extractedInstruction), + *fact.getLocation(), extractedInstruction)); + slices[&function].insert( + std::make_tuple(psr::getSrcCodeFromIR(extractedInstruction), + *fact.getLocation(), extractedInstruction)); + const auto ins = dyn_cast(fact.getInstruction()); + if (ins) { + const auto *blockExit = ins->getParent()->getTerminator(); + const auto instStr = psr::llvmIRToString(blockExit); + const auto exitSrc = psr::getSrcCodeFromIR(blockExit); + if (auto *dl = blockExit->getDebugLoc().get()) { + cout << "ADDING " << llvmIRToString(blockExit) << " " + << exitSrc << endl; + slice.insert(std::make_tuple( + exitSrc, *createLocation(dl->getLine(), dl->getColumn()), + blockExit)); + slices[&function].insert(std::make_tuple( + exitSrc, *createLocation(dl->getLine(), dl->getColumn()), + blockExit)); + } else { + cerr << "DID NOT FIND LOCATION" << endl; + slice.insert(std::make_tuple(exitSrc, *createLocation(0, 0), + blockExit)); + slices[&function].insert(std::make_tuple( + exitSrc, *createLocation(0, 0), blockExit)); + } + + isUsed = true; } - isUsed = true; + } else { + cout << "DISCARDED PREVIOUS" << endl; + } + } else { + cout << "ZERO" << endl; } } // cout << endl; @@ -414,24 +485,36 @@ int main(int argc, const char **argv) { if (isUsed) { // Check whether this works everywhere const auto *entry = &function.getEntryBlock().front(); - if (auto *dl = entry->getDebugLoc().get()) { - slice.insert(std::make_tuple( - psr::getSrcCodeFromIR(entry), - *createLocation(dl->getLine(), dl->getColumn()), entry)); - } else { - slice.insert(std::make_tuple(psr::getSrcCodeFromIR(entry), - *createLocation(0, 0), entry)); - cout << "GOT NO DEBUG LOG" << endl; + const auto source = psr::getSrcCodeFromIR(&function); + for (auto &bb : function) { + for (auto &ins : bb) { + if (auto *dl = ins.getDebugLoc().get()) { + slice.insert(std::make_tuple( + source, *createLocation(dl->getLine(), dl->getColumn()), entry)); + slices[&function].insert(std::make_tuple( + source, *createLocation(dl->getLine(), dl->getColumn()), entry)); + goto added; // we found the first instruction with debug info + } + } } + slice.insert(std::make_tuple(source, *createLocation(0, 0), entry)); + slices[&function].insert( + std::make_tuple(source, *createLocation(0, 0), entry)); + added: const auto exits = cg.getStartPointsOf(&function); for (const auto *exit : exits) { if (auto *dl = exit->getDebugLoc().get()) { slice.insert(std::make_tuple( psr::getSrcCodeFromIR(exit), *createLocation(dl->getLine(), dl->getColumn()), exit)); + slices[&function].insert(std::make_tuple( + psr::getSrcCodeFromIR(exit), + *createLocation(dl->getLine(), dl->getColumn()), exit)); } else { slice.insert(std::make_tuple(psr::getSrcCodeFromIR(exit), - *createLocation(0, 0), exit)); + *createLocation(INT_MAX, INT_MAX), exit)); + slices[&function].insert(std::make_tuple( + psr::getSrcCodeFromIR(exit), *createLocation(INT_MAX, INT_MAX), exit)); cout << "GOT NO DEBUG LOG" << endl; } } @@ -453,169 +536,68 @@ int main(int argc, const char **argv) { for (auto &s : textSlice) { cout << s << endl; } + cout << endl << endl << endl << endl; + for (auto &p : slices) { + llvm::dbgs() << p.first->getName() << "\t" << p.second.size() << "\n"; + for (auto &s : p.second) { + llvm::dbgs() << std::get<0>(s) << "\n"; + } + } + return ""; +} + +int main(int argc, const char **argv) { + std::chrono::steady_clock::time_point begin = + std::chrono::steady_clock::now(); + std::cout << "Current path is " << bofs::current_path() << '\n'; + // const auto target = "./targets/w_defects.ll"; + // const auto target = "./targets/main_linked.ll"; +// const auto target = "./targets/ex.ll"; +// const auto target = +// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/memcached/memcached.ll"; +// const auto target = "./targets/toSlice.ll"; + const auto target = "./targets/min_ex.ll"; + // const auto target = + // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/git/git-linked.ll"; + const auto entryfunction = "main"; +// const auto entryfunction = "parse_command"; + const set entrypoints{entryfunction}; + // initializeLogger(true); +// std::ifstream in("targets/locations_json.json"); +// std::ifstream in("targets/locations_memcached_command.json"); +// std::ifstream in("targets/locations_memcached_single.json"); +// std::ifstream in("targets/toSlice.json"); + std::ifstream in("targets/min_ex.json"); + json j; + in >> j; + auto terms = j.get>(); + ProjectIRDB DB({target}, IRDBOptions::WPA); + LOG_IF_ENABLE(BOOST_LOG(lg::get()) << "STARTED") + LLVMTypeHierarchy th(DB); + LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, entrypoints, &th); + LLVMPointsToInfo PT(DB); + createSlice(target, entrypoints, terms); + std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); + std::cout << "Time difference = " + << std::chrono::duration_cast(end - + begin) + .count() + << "[µs]" << std::endl; + std::cout << "Time difference = " + << std::chrono::duration_cast(end - begin) + .count() + << "[ns]" << std::endl; + std::cout + << "Time difference = " + << std::chrono::duration_cast(end - begin).count() + << "[s]" << std::endl; + std::cout + << "Time difference = " + << std::chrono::duration_cast(end - begin).count() + << "[m]" << std::endl; return 0; } // TODO: // Recursive Control dependency backward - branch conditions // branch conditions forward -> include block -// Collect Declarations - -// What is our slicing Criterion? -// Entry or somewhere? -// Regardless we have to build an SDG - -// vector debug_functions; -// for (auto module : DB.getAllModules()) { -// auto f = module->getFunction("llvm.dbg.declare"); -// if (f != nullptr) { -// debug_functions.push_back(f); -// } -// f = module->getFunction("llvm.dbg.value"); -// if (f != nullptr) { -// debug_functions.push_back(f); -// } -// f = module->getFunction("llvm.dbg.addr"); -// if (f != nullptr) { -// debug_functions.push_back(f); -// } -// } -// -// set callers; -// for (auto debug : debug_functions) { -// for (auto call : cg.getCallersOf(debug)) { -// callers.insert(call); -// } -// } -// -// for (auto module : DB.getAllModules()) { -// for (auto &f : *module) { -// CFG.getNonTerminationSensitiveControlDependence(f); -// CFG.getNonTerminationInsensitiveControlDependence(f); -// CFG.getDecisiveControlDependence(f); -// }std::cout << "Current path is " << fs::current_path() << '\n'; -// } -// -// std::set> all_metadata; -// for (auto c : callers) { -// // llvm::dbgs()<<"CALL :" << *c << "\n"; -// SmallVector, 6> metadata; -// c->getAllMetadata(metadata); -// -// for (auto pair : metadata) { -// all_metadata.insert(pair); -// } -// } -// for (auto pair : all_metadata) { -// switch (pair.second->getMetadataID()) { -// case DINode::MetadataKind::DIFileKind: -// // cout<< "FILE" <print(llvm::dbgs()); -// break; -// case DINode::MetadataKind::DILocationKind: -// // cout<< "Location" <print(llvm::dbgs()); -// break; -// case DINode::MetadataKind::DICompositeTypeKind: -// // cout<< "Location" <(pair.second); -// // cout << "Tuple" << endl; -// break; -// } -// default: -// break; -// } -// // llvm::dbgs() << "META: " << *pair.second << "\n"; -// // llvm::dbgs() << "META: " << pair.second->getMetadataID() << -// "\n"; -// // llvm::dbgs() << "META: " << pair.second->getNumOperands() << -// "\n"; -// // pair.second->print(llvm::dbgs()); -// // llvm::dbgs() << "\n"; -// // for (auto &ops : pair.second->operands()){ -// // llvm::dbgs() << *ops << "\n"; -// // } -// } -// -// deque wl; -// for (auto module : DB.getAllModules()) { -// for (auto &function : module->functions()) { -// for (auto &bb : function) { -// for (auto &i : bb) { -// SmallVector, 6> metadata; -// // i.getAllMetadata(metadata); -// // for (auto& m: metadata){ -// // llvm::dbgs() << *m.second << "\n"; -// // } -// auto const &loc = i.getDebugLoc(); -// if (loc) { -// // llvm::dbgs() << i << "\n"; -// if (loc.getLine() == 52 || loc.getLine() == 45) { -// wl.push_back(&i); -// } -// } -// } -// } -// } -// } -// while (!wl.empty()) { -// auto i = wl.front(); -// wl.pop_front(); -// llvm::dbgs() << "==================================================\n"; -// llvm::dbgs() << "GOT LINE: " -// << "\n"; -// llvm::dbgs() << *i << "\n"; -// llvm::dbgs() << "NAME: " << i->getName() << "\n"; -// llvm::dbgs() << i->getNumUses() << "\n" << i->getNumOperands() << "\n"; -// for (auto *u : i->users()) { -// llvm::dbgs() << "USER: " << *u << "\n"; -// } -// for (auto &u : i->uses()) { -// llvm::dbgs() << "USE: " << *u << "\n"; -// } -// for (auto &u : i->operands()) { -// llvm::dbgs() << "OPS: " << *u << "\n"; -// } -// llvm::dbgs() << "==================================================\n"; -// } -// -// // // auto module = DB.getModule("../targets/main_linked.ll"); -// // for (auto &m : module->named_metadata()) { -// // m.print(llvm::dbgs()); -// // llvm::dbgs() << "\n"; -// // } -// // for (auto f : DB.getAllFunctions()) { -// // SmallVector, 10> metas; -// // f->getAllMetadata(metas); -// // -// // for (auto meta: metas) { -// // meta.second->print(llvm::dbgs()); -// // llvm::dbgs() << "\n"; -// // } -// // for (auto m : DB.getAllModules()) { -// // -// // for (auto &meta : m->getNamedMDList()) { -// // -// // meta.print(llvm::dbgs()); -// // for (auto op: meta.operands()){ -// // op->print(llvm::dbgs()); -// // } -// // } -// // }cout << terms; -// // } -// // for (auto &bb : *f){ -// // llvm::dbgs() << bb << "\n"; -// // for (auto &i : bb){ -// // llvm::dbgs() << i <<" " << i.getOpcode() <<" " << i.getOpcodeName()<< -// // "\n\n"; if (auto *call = dyn_cast(&ia)) { llvm::dbgs() << -// // call->getNumArgOperands() << "\n"; if (call->getNumArgOperands() > 1) { -// // auto op = call->getArgOperand(1); -// // llvm::dbgs()<< "ID:" << op->getName() << "\n"; -// // llvm::dbgs() << *op << "\n"; -// // } -// // } -// // } -// // } -// -// // } \ No newline at end of file +// Coll Declarations diff --git a/unittests/Slicer/CMakeLists.txt b/unittests/Slicer/CMakeLists.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/unittests/Slicer/SliceITCW_defectsTest.cpp b/unittests/Slicer/SliceITCW_defectsTest.cpp new file mode 100644 index 0000000000..916622217c --- /dev/null +++ b/unittests/Slicer/SliceITCW_defectsTest.cpp @@ -0,0 +1,3 @@ +// +// Created by torun on 07.08.20. +// From b77e95227a893f9f6fbbe7d4ca3f1be093e29601 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 5 Nov 2020 09:48:27 +0100 Subject: [PATCH 05/42] Before merge --- CMakeLists.txt | 2 - tools/boomerang/slicer.cpp | 125 ++++++++++++++++++++++--------------- unittests/CMakeLists.txt | 1 + 3 files changed, 77 insertions(+), 51 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5559073637..4dc08767d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -135,9 +135,7 @@ if (NOT PHASAR_IN_TREE) endif() add_definitions(${LLVM_DEFINITIONS}) -message("STARTING TO FIND") find_library(LLVM_LIBRARY NAMES LLVM REQUIRED HINTS ${LLVM_LIBRARY_DIRS}) -message("END TO FIND") if(NOT ${LLVM_LIBRARY} STREQUAL "LLVM_LIBRARY-NOTFOUND") message(STATUS "Found consolidated shared LLVM lib " ${LLVM_LIBRARY} " that will be linked against.") set(USE_LLVM_FAT_LIB on) diff --git a/tools/boomerang/slicer.cpp b/tools/boomerang/slicer.cpp index 3ff1179040..28fa5a6007 100644 --- a/tools/boomerang/slicer.cpp +++ b/tools/boomerang/slicer.cpp @@ -90,6 +90,9 @@ ostream &operator<<(ostream &os, const Term &t) { return os; } + + + class SlicerFact { public: SlicerFact() = default; @@ -114,7 +117,7 @@ std::ostream &operator<<(std::ostream &os, const SlicerFact &rhs) { llvm::raw_string_ostream rso(temp); if (!rhs.isZero()) { rhs.i->print(rso, true); - os << temp; + os << temp << " " << *rhs.l; } else { os << "Zero"; } @@ -142,8 +145,13 @@ class NormalFlowFunction : public FlowFunction { user->dump(); llvm::dbgs() << curr->getFunction()->getName() << "\n"; for (unsigned int i = 0; i < user->getNumOperands(); ++i) { - if (const auto *use = - dyn_cast(user->getOperandUse(i).get())) { + const auto used = user->getOperandUse(i).get(); + for (auto i=0; i < used->getNumUses();++i) { + used->uses(); + } + const auto *use = + dyn_cast(user->getOperandUse(i).get()); + if (use) { if (use == curr || use == source.getInstruction()) { llvm::dbgs() << "USE:\n"; user->getOperandUse(i)->dump(); @@ -164,24 +172,31 @@ class NormalFlowFunction : public FlowFunction { const Instruction *curr; const Instruction *succ; }; - +template class CallFlowFunction : public FlowFunction { public: - CallFlowFunction(const Instruction *callStmt, const Function *destMthd) - : callStmt(callStmt), destMthd(destMthd) {} + CallFlowFunction(const Instruction *callStmt, const Function *destMthd, + const ICFG_T *ICF) + : callStmt(callStmt), destMthd(destMthd), ICF(ICF) {} std::set computeTargets(SlicerFact source) override { set facts; facts.insert(source); #ifdef __INTERPROCEDURAL__ if (!source.isZero()) { - for (unsigned int i = 0; i < callStmt->getNumOperands(); ++i) { - const auto op = callStmt->getOperand(i); - if (source.getInstruction() == op) { - facts.insert(SlicerFact(source.getLocation(), - getNthFunctionArgument(destMthd, i))); - } +// for (unsigned int i = 0; i < callStmt->getNumOperands(); ++i) { +// const auto op = callStmt->getOperand(i); +// if (source.getInstruction() == op) { +// facts.insert(SlicerFact(source.getLocation(), +// getNthFunctionArgument(destMthd, i))); +// } +// } + auto targets = ICF->getStartPointsOf(destMthd); + for (auto target : targets) { + llvm::dbgs() << "TARGET: \t"; + target->dump(); } + cout << &targets; } #endif return facts; @@ -190,8 +205,10 @@ class CallFlowFunction : public FlowFunction { private: const Instruction *callStmt; const Function *destMthd; + const ICFG_T *ICF; }; +template class RetFlowFunction : public FlowFunction { public: RetFlowFunction(const Instruction *callSite, const Function *calleeMthd, @@ -204,6 +221,7 @@ class RetFlowFunction : public FlowFunction { calleeMthd->dump(); exitStmt->dump(); retSite->dump(); + llvm::dbgs() << "\n"; set facts; facts.insert(source); #ifdef __INTERPROCEDURAL__ @@ -276,13 +294,13 @@ class IFDSSLicer shared_ptr> getCallFlowFunction(const Instruction *callStmt, const Function *destMthd) override { - return make_shared(callStmt, destMthd); + return make_shared>(callStmt, destMthd, this->getICFG()); } shared_ptr> getRetFlowFunction(const Instruction *callSite, const Function *calleeMthd, const Instruction *exitStmt, const Instruction *retSite) override { - return make_shared(callSite, calleeMthd, exitStmt, + return make_shared>(callSite, calleeMthd, exitStmt, retSite); } shared_ptr> @@ -293,7 +311,14 @@ class IFDSSLicer } map> initialSeeds() override { for (auto &entrypoint : entrypoints) { - const Instruction *i = &this->ICF->getFunction(entrypoint)->back().back(); + const Instruction *i; + if (std::is_same::value) { + i = &this->ICF->getFunction(entrypoint)->back().back(); + } else if (std::is_same::value){ + i = &this->ICF->getFunction(entrypoint)->front().front(); + } else { + assert(false && "Only defined for LLVMBASED ICFGs"); + } SlicerFact sf = SlicerFact(); if (slicingCriteria.find(i) == slicingCriteria.end()) { set facts; @@ -338,6 +363,7 @@ std::string createSlice(string target, set entrypoints, LLVMTypeHierarchy th(DB); LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, set(entrypoints), &th); + LLVMBasedICFG fcg(DB,CallGraphAnalysisType::DTA, set(entrypoints),&th); LLVMPointsToInfo PT(DB); map> sc; for (auto *module : DB.getAllModules()) { @@ -345,7 +371,6 @@ std::string createSlice(string target, set entrypoints, for (auto &bb : function) { for (const auto &i : bb) { set facts; - if (auto *debuglog = i.getDebugLoc().get()) { auto line = debuglog->getLine(); auto column = debuglog->getColumn(); @@ -401,8 +426,10 @@ std::string createSlice(string target, set entrypoints, } IFDSSLicer slicer(&cg, &th, &DB, &PT, sc, &terms, entrypoints); - + IFDSSLicer slicer2(&fcg, &th, &DB, &PT, sc, &terms, + entrypoints); IFDSSolver test(slicer); +// IFDSSolver test(slicer2); test.solve(); ofstream out; out.open("out/graph.dot"); @@ -411,7 +438,7 @@ std::string createSlice(string target, set entrypoints, out.open("out/results.txt"); test.dumpResults(out); out.close(); - cout << endl; + cout << "\n"; set, SliceComparator> slice; vector textSlice; @@ -420,27 +447,27 @@ std::string createSlice(string target, set entrypoints, SliceComparator>> slices; map textSlices; - for (const auto &module : DB.getAllModules()) { + for (const auto module : DB.getAllModules()) { for (auto &function : module->functions()) { - llvm::dbgs() << function.getName() << "\n"; + llvm::dbgs() <<"\n\n\n" << function.getName() << "\n\n\n"; bool isUsed = false; for (auto &bb : function) { for (const auto &i : bb) { auto res = test.ifdsResultsAt(&i); if (llvm::isa(&i)) { - // cout << "RET: " << llvmIRToString(&i) << endl; + // cout << "RET: " << llvmIRToString(&i) << "\n"; } - cout << "INS: " << llvmIRToString(&i) << endl; - cout << "SRC: " << psr::getSrcCodeFromIR(&i) << endl - << res.size() << endl; + llvm::dbgs() << "INS: " << llvmIRToString(&i) << "\n"; + llvm::dbgs() << "SRC: " << psr::getSrcCodeFromIR(&i) << "\n" + << res.size() << "\n"; for (auto fact : res) { if (!fact.isZero()) { auto extractedInstruction = fact.getInstruction(); cout << "FACT INS: " << llvmIRToString(fact.getInstruction()) - << endl; + << "\n"; cout << "SRC: " << *fact.getLocation() << " " - << psr::getSrcCodeFromIR(&i) << endl - << endl; + << psr::getSrcCodeFromIR(&i) << "\n" + << "\n"; if (extractedInstruction == &i) { slice.insert( std::make_tuple(psr::getSrcCodeFromIR(extractedInstruction), @@ -455,7 +482,7 @@ std::string createSlice(string target, set entrypoints, const auto exitSrc = psr::getSrcCodeFromIR(blockExit); if (auto *dl = blockExit->getDebugLoc().get()) { cout << "ADDING " << llvmIRToString(blockExit) << " " - << exitSrc << endl; + << exitSrc << "\n"; slice.insert(std::make_tuple( exitSrc, *createLocation(dl->getLine(), dl->getColumn()), blockExit)); @@ -463,7 +490,7 @@ std::string createSlice(string target, set entrypoints, exitSrc, *createLocation(dl->getLine(), dl->getColumn()), blockExit)); } else { - cerr << "DID NOT FIND LOCATION" << endl; + cerr << "DID NOT FIND LOCATION" << "\n"; slice.insert(std::make_tuple(exitSrc, *createLocation(0, 0), blockExit)); slices[&function].insert(std::make_tuple( @@ -473,13 +500,13 @@ std::string createSlice(string target, set entrypoints, isUsed = true; } } else { - cout << "DISCARDED PREVIOUS" << endl; + cout << "DISCARDED PREVIOUS" << "\n"; } } else { - cout << "ZERO" << endl; + llvm::dbgs() << "ZERO" << "\n"; } } - // cout << endl; + // cout << "\n"; } } if (isUsed) { @@ -515,28 +542,28 @@ std::string createSlice(string target, set entrypoints, *createLocation(INT_MAX, INT_MAX), exit)); slices[&function].insert(std::make_tuple( psr::getSrcCodeFromIR(exit), *createLocation(INT_MAX, INT_MAX), exit)); - cout << "GOT NO DEBUG LOG" << endl; + llvm::dbgs() << "GOT NO DEBUG LOG" << "\n"; } } } } } - string prev; - for (auto i : slice) { - auto curr = std::get<0>(i); - cout << std::get<0>(i) << "\t\t\t\t\t\t\t\t\t\t\t\t" << std::get<1>(i) - << "\t\t\t\t\t" << psr::llvmIRToString(std::get<2>(i)) << endl; - if (curr != prev) { - textSlice.emplace_back(curr); - } - prev = curr; - } - cout << endl << endl << endl << endl; - - for (auto &s : textSlice) { - cout << s << endl; - } - cout << endl << endl << endl << endl; +// string prev; +// for (auto i : slice) { +// auto curr = std::get<0>(i); +// llvm::dbgs() << std::get<0>(i) << "\t\t\t\t\t\t\t\t\t\t\t\t" << std::get<1>(i) +// << "\t\t\t\t\t" << psr::llvmIRToString(std::get<2>(i)) << "\n"; +// if (curr != prev) { +// textSlice.emplace_back(curr); +// } +// prev = curr; +// } +// llvm::dbgs() << "\n" << "\n" << "\n" << "\n"; +// +// for (auto &s : textSlice) { +// llvm::dbgs() << s << "\n"; +// } + llvm::dbgs() << "\n" << "\n" << "\n" << "\n"; for (auto &p : slices) { llvm::dbgs() << p.first->getName() << "\t" << p.second.size() << "\n"; for (auto &s : p.second) { diff --git a/unittests/CMakeLists.txt b/unittests/CMakeLists.txt index 0d8320aa99..1d99d648f9 100644 --- a/unittests/CMakeLists.txt +++ b/unittests/CMakeLists.txt @@ -10,3 +10,4 @@ add_subdirectory(Flex) add_subdirectory(PhasarClang) add_subdirectory(PhasarLLVM) add_subdirectory(Utils) +add_subdirectory(Slicer) \ No newline at end of file From 50a8245c1e64c3915507c0fd0ea9190890ad535e Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 4 Dec 2020 10:48:51 +0100 Subject: [PATCH 06/42] Current state --- tools/boomerang/CMakeLists.txt | 111 +++++++++--------- tools/boomerang/slicer.cpp | 204 +++++++++++++++++---------------- 2 files changed, 156 insertions(+), 159 deletions(-) diff --git a/tools/boomerang/CMakeLists.txt b/tools/boomerang/CMakeLists.txt index 458a72829b..6228a0b9b3 100644 --- a/tools/boomerang/CMakeLists.txt +++ b/tools/boomerang/CMakeLists.txt @@ -1,84 +1,75 @@ # Build a stand-alone executable -if(PHASAR_IN_TREE) - add_phasar_executable(boomerang - boomerang.cpp - ) - add_phasar_executable(slicer - tools/phasar/slicer.cpp - ) +if (PHASAR_IN_TREE) + add_phasar_executable(boomerang + boomerang.cpp + ) + add_phasar_executable(slicer + tools/phasar/slicer.cpp + ) -else() - add_executable(boomerang - boomerang.cpp - ) - add_executable(slicer - slicer.cpp - ) -endif() +else () + add_executable(boomerang + boomerang.cpp + ) + add_executable(slicer + slicer.cpp + ) +endif () find_package(Boost COMPONENTS log filesystem program_options graph ${BOOST_THREAD} REQUIRED) target_link_libraries(boomerang - LINK_PUBLIC - phasar_config - phasar_controller - phasar_db - phasar_controlflow - phasar_ifdside - phasar_mono - phasar_wpds - phasar_syncpds - ${PHASAR_PLUGINS_LIB} - wali - phasar_passes - phasar_pointer - phasar_typehierarchy - phasar_phasarllvm_utils - phasar_utils - ${Boost_LIBRARIES} - ${CMAKE_DL_LIBS} - ${CMAKE_THREAD_LIBS_INIT} -) + LINK_PUBLIC + phasar_config + phasar_controller + phasar_db + phasar_controlflow + phasar_ifdside + phasar_mono + phasar_wpds + phasar_syncpds + ${PHASAR_PLUGINS_LIB} + wali + phasar_passes + phasar_pointer + phasar_typehierarchy + phasar_phasarllvm_utils + phasar_utils + ${Boost_LIBRARIES} + ${CMAKE_DL_LIBS} + ${CMAKE_THREAD_LIBS_INIT} + ) target_link_libraries(slicer LINK_PUBLIC phasar_config phasar_controller phasar_db - phasar_experimental - phasar_clang phasar_controlflow phasar_ifdside phasar_mono - phasar_passes + phasar_wpds + phasar_syncpds ${PHASAR_PLUGINS_LIB} + wali + phasar_passes phasar_pointer + phasar_typehierarchy phasar_phasarllvm_utils phasar_utils - boost_program_options - boost_filesystem - boost_graph - boost_system - boost_log - ${BOOST_THREAD} ${Boost_LIBRARIES} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} - #${CLANG_LIBRARIES} - #${llvm_libs} - curl - gtest ) -if(USE_LLVM_FAT_LIB) - llvm_config(boomerang USE_SHARED ${LLVM_LINK_COMPONENTS}) -else() - llvm_config(boomerang ${LLVM_LINK_COMPONENTS}) -endif() -if(USE_LLVM_FAT_LIB) - llvm_config(slicer USE_SHARED ${LLVM_LINK_COMPONENTS}) -else() - llvm_config(slicer ${LLVM_LINK_COMPONENTS}) -endif() -set(LLVM_LINK_COMPONENTS -) +if (USE_LLVM_FAT_LIB) + llvm_config(boomerang USE_SHARED ${LLVM_LINK_COMPONENTS}) +else () + llvm_config(boomerang ${LLVM_LINK_COMPONENTS}) +endif () +if (USE_LLVM_FAT_LIB) + llvm_config(slicer USE_SHARED ${LLVM_LINK_COMPONENTS}) +else () + llvm_config(slicer ${LLVM_LINK_COMPONENTS}) +endif () +set(LLVM_LINK_COMPONENTS) diff --git a/tools/boomerang/slicer.cpp b/tools/boomerang/slicer.cpp index ab25672c58..d14c3ea3d2 100644 --- a/tools/boomerang/slicer.cpp +++ b/tools/boomerang/slicer.cpp @@ -91,13 +91,10 @@ ostream &operator<<(ostream &os, const Term &t) { return os; } - - - class SlicerFact { public: SlicerFact() = default; - SlicerFact(const Location *l, const Value *i) : l(l), i(i) { } + SlicerFact(const Location *l, const Value *i) : l(l), i(i) {} bool operator<(const SlicerFact &rhs) const { return i < rhs.i; } bool operator==(const SlicerFact &rhs) const { return i == rhs.i && l == rhs.l; @@ -140,18 +137,17 @@ class NormalFlowFunction : public FlowFunction { facts.insert(source); // check logic for conditions if (!source.isZero()) { - const auto* user = dyn_cast(source.getInstruction()); + const auto *user = dyn_cast(source.getInstruction()); if (user) { llvm::dbgs() << "USER:\n"; user->dump(); llvm::dbgs() << curr->getFunction()->getName() << "\n"; for (unsigned int i = 0; i < user->getNumOperands(); ++i) { const auto used = user->getOperandUse(i).get(); - for (auto i=0; i < used->getNumUses();++i) { + for (auto unsigned i = 0; i < used->getNumUses(); ++i) { used->uses(); } - const auto *use = - dyn_cast(user->getOperandUse(i).get()); + const auto *use = dyn_cast(user->getOperandUse(i).get()); if (use) { if (use == curr || use == source.getInstruction()) { llvm::dbgs() << "USE:\n"; @@ -185,13 +181,13 @@ class CallFlowFunction : public FlowFunction { facts.insert(source); #ifdef __INTERPROCEDURAL__ if (!source.isZero()) { -// for (unsigned int i = 0; i < callStmt->getNumOperands(); ++i) { -// const auto op = callStmt->getOperand(i); -// if (source.getInstruction() == op) { -// facts.insert(SlicerFact(source.getLocation(), -// getNthFunctionArgument(destMthd, i))); -// } -// } + // for (unsigned int i = 0; i < callStmt->getNumOperands(); ++i) { + // const auto op = callStmt->getOperand(i); + // if (source.getInstruction() == op) { + // facts.insert(SlicerFact(source.getLocation(), + // getNthFunctionArgument(destMthd, i))); + // } + // } auto targets = ICF->getStartPointsOf(destMthd); for (auto target : targets) { llvm::dbgs() << "TARGET: \t"; @@ -266,8 +262,7 @@ class CallToRetFlowFunction : public FlowFunction { set callees; }; -template -struct SlicerAnalysisDomain : public AnalysisDomain { +template struct SlicerAnalysisDomain : public AnalysisDomain { using d_t = SlicerFact; using n_t = const llvm::Instruction *; using f_t = const llvm::Function *; @@ -278,12 +273,10 @@ struct SlicerAnalysisDomain : public AnalysisDomain { }; template -class IFDSSLicer - : public IFDSTabulationProblem> { +class IFDSSLicer : public IFDSTabulationProblem> { public: IFDSSLicer(ICFG_T *icfg, const LLVMTypeHierarchy *th, const ProjectIRDB *irdb, - LLVMPointsToInfo *PT, - map> sc, + LLVMPointsToInfo *PT, map> sc, const std::vector *terms, const std::set &entrypoints) : IFDSTabulationProblem>(irdb, th, icfg, PT), @@ -291,9 +284,7 @@ class IFDSSLicer } private: - SlicerFact createZeroValue() const override { - return SlicerFact(); - } + SlicerFact createZeroValue() const override { return SlicerFact(); } shared_ptr> getNormalFlowFunction(const Instruction *curr, const Instruction *succ) override { @@ -302,14 +293,15 @@ class IFDSSLicer shared_ptr> getCallFlowFunction(const Instruction *callStmt, const Function *destMthd) override { - return make_shared>(callStmt, destMthd, this->getICFG()); + return make_shared>(callStmt, destMthd, + this->getICFG()); } shared_ptr> getRetFlowFunction(const Instruction *callSite, const Function *calleeMthd, const Instruction *exitStmt, const Instruction *retSite) override { return make_shared>(callSite, calleeMthd, exitStmt, - retSite); + retSite); } shared_ptr> getCallToRetFlowFunction(const Instruction *callSite, @@ -322,7 +314,7 @@ class IFDSSLicer const Instruction *i; if (std::is_same::value) { i = &this->ICF->getFunction(entrypoint)->back().back(); - } else if (std::is_same::value){ + } else if (std::is_same::value) { i = &this->ICF->getFunction(entrypoint)->front().front(); } else { assert(false && "Only defined for LLVMBASED ICFGs"); @@ -371,7 +363,7 @@ std::string createSlice(string target, set entrypoints, LLVMTypeHierarchy th(DB); LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, set(entrypoints), &th); - LLVMBasedICFG fcg(DB,CallGraphAnalysisType::DTA, set(entrypoints),&th); + LLVMBasedICFG fcg(DB, CallGraphAnalysisType::DTA, set(entrypoints), &th); LLVMPointsToGraph PT(DB); map> sc; for (auto *module : DB.getAllModules()) { @@ -435,9 +427,9 @@ std::string createSlice(string target, set entrypoints, IFDSSLicer slicer(&cg, &th, &DB, &PT, sc, &terms, entrypoints); IFDSSLicer slicer2(&fcg, &th, &DB, &PT, sc, &terms, - entrypoints); + entrypoints); IFDSSolver test(slicer); -// IFDSSolver test(slicer2); + // IFDSSolver test(slicer2); test.solve(); ofstream out; out.open("out/graph.dot"); @@ -457,7 +449,7 @@ std::string createSlice(string target, set entrypoints, map textSlices; for (const auto module : DB.getAllModules()) { for (auto &function : module->functions()) { - llvm::dbgs() <<"\n\n\n" << function.getName() << "\n\n\n"; + llvm::dbgs() << "\n\n\n" << function.getName() << "\n\n\n"; bool isUsed = false; for (auto &bb : function) { for (const auto &i : bb) { @@ -467,7 +459,7 @@ std::string createSlice(string target, set entrypoints, } llvm::dbgs() << "INS: " << llvmIRToString(&i) << "\n"; llvm::dbgs() << "SRC: " << psr::getSrcCodeFromIR(&i) << "\n" - << res.size() << "\n"; + << res.size() << "\n"; for (auto fact : res) { if (!fact.isZero()) { auto extractedInstruction = fact.getInstruction(); @@ -477,41 +469,46 @@ std::string createSlice(string target, set entrypoints, << psr::getSrcCodeFromIR(&i) << "\n" << "\n"; if (extractedInstruction == &i) { - slice.insert( - std::make_tuple(psr::getSrcCodeFromIR(extractedInstruction), - *fact.getLocation(), extractedInstruction)); - slices[&function].insert( - std::make_tuple(psr::getSrcCodeFromIR(extractedInstruction), - *fact.getLocation(), extractedInstruction)); - const auto ins = dyn_cast(fact.getInstruction()); - if (ins) { - const auto *blockExit = ins->getParent()->getTerminator(); - const auto instStr = psr::llvmIRToString(blockExit); - const auto exitSrc = psr::getSrcCodeFromIR(blockExit); - if (auto *dl = blockExit->getDebugLoc().get()) { - cout << "ADDING " << llvmIRToString(blockExit) << " " - << exitSrc << "\n"; - slice.insert(std::make_tuple( - exitSrc, *createLocation(dl->getLine(), dl->getColumn()), - blockExit)); - slices[&function].insert(std::make_tuple( - exitSrc, *createLocation(dl->getLine(), dl->getColumn()), - blockExit)); - } else { - cerr << "DID NOT FIND LOCATION" << "\n"; - slice.insert(std::make_tuple(exitSrc, *createLocation(0, 0), - blockExit)); - slices[&function].insert(std::make_tuple( - exitSrc, *createLocation(0, 0), blockExit)); - } + slice.insert( + std::make_tuple(psr::getSrcCodeFromIR(extractedInstruction), + *fact.getLocation(), extractedInstruction)); + slices[&function].insert( + std::make_tuple(psr::getSrcCodeFromIR(extractedInstruction), + *fact.getLocation(), extractedInstruction)); + const auto ins = dyn_cast(fact.getInstruction()); + if (ins) { + const auto *blockExit = ins->getParent()->getTerminator(); + const auto instStr = psr::llvmIRToString(blockExit); + const auto exitSrc = psr::getSrcCodeFromIR(blockExit); + if (auto *dl = blockExit->getDebugLoc().get()) { + cout << "ADDING " << llvmIRToString(blockExit) << " " + << exitSrc << "\n"; + slice.insert(std::make_tuple( + exitSrc, + *createLocation(dl->getLine(), dl->getColumn()), + blockExit)); + slices[&function].insert(std::make_tuple( + exitSrc, + *createLocation(dl->getLine(), dl->getColumn()), + blockExit)); + } else { + cerr << "DID NOT FIND LOCATION" + << "\n"; + slice.insert(std::make_tuple(exitSrc, *createLocation(0, 0), + blockExit)); + slices[&function].insert(std::make_tuple( + exitSrc, *createLocation(0, 0), blockExit)); + } - isUsed = true; + isUsed = true; + } + } else { + cout << "DISCARDED PREVIOUS" + << "\n"; } } else { - cout << "DISCARDED PREVIOUS" << "\n"; - } - } else { - llvm::dbgs() << "ZERO" << "\n"; + llvm::dbgs() << "ZERO" + << "\n"; } } // cout << "\n"; @@ -525,16 +522,18 @@ std::string createSlice(string target, set entrypoints, for (auto &ins : bb) { if (auto *dl = ins.getDebugLoc().get()) { slice.insert(std::make_tuple( - source, *createLocation(dl->getLine(), dl->getColumn()), entry)); + source, *createLocation(dl->getLine(), dl->getColumn()), + entry)); slices[&function].insert(std::make_tuple( - source, *createLocation(dl->getLine(), dl->getColumn()), entry)); + source, *createLocation(dl->getLine(), dl->getColumn()), + entry)); goto added; // we found the first instruction with debug info } } } - slice.insert(std::make_tuple(source, *createLocation(0, 0), entry)); - slices[&function].insert( - std::make_tuple(source, *createLocation(0, 0), entry)); + slice.insert(std::make_tuple(source, *createLocation(0, 0), entry)); + slices[&function].insert( + std::make_tuple(source, *createLocation(0, 0), entry)); added: const auto exits = cg.getStartPointsOf(&function); for (const auto *exit : exits) { @@ -547,31 +546,38 @@ std::string createSlice(string target, set entrypoints, *createLocation(dl->getLine(), dl->getColumn()), exit)); } else { slice.insert(std::make_tuple(psr::getSrcCodeFromIR(exit), - *createLocation(INT_MAX, INT_MAX), exit)); - slices[&function].insert(std::make_tuple( - psr::getSrcCodeFromIR(exit), *createLocation(INT_MAX, INT_MAX), exit)); - llvm::dbgs() << "GOT NO DEBUG LOG" << "\n"; + *createLocation(INT_MAX, INT_MAX), + exit)); + slices[&function].insert( + std::make_tuple(psr::getSrcCodeFromIR(exit), + *createLocation(INT_MAX, INT_MAX), exit)); + llvm::dbgs() << "GOT NO DEBUG LOG" + << "\n"; } } } } } -// string prev; -// for (auto i : slice) { -// auto curr = std::get<0>(i); -// llvm::dbgs() << std::get<0>(i) << "\t\t\t\t\t\t\t\t\t\t\t\t" << std::get<1>(i) -// << "\t\t\t\t\t" << psr::llvmIRToString(std::get<2>(i)) << "\n"; -// if (curr != prev) { -// textSlice.emplace_back(curr); -// } -// prev = curr; -// } -// llvm::dbgs() << "\n" << "\n" << "\n" << "\n"; -// -// for (auto &s : textSlice) { -// llvm::dbgs() << s << "\n"; -// } - llvm::dbgs() << "\n" << "\n" << "\n" << "\n"; + // string prev; + // for (auto i : slice) { + // auto curr = std::get<0>(i); + // llvm::dbgs() << std::get<0>(i) << "\t\t\t\t\t\t\t\t\t\t\t\t" << + // std::get<1>(i) + // << "\t\t\t\t\t" << psr::llvmIRToString(std::get<2>(i)) << "\n"; + // if (curr != prev) { + // textSlice.emplace_back(curr); + // } + // prev = curr; + // } + // llvm::dbgs() << "\n" << "\n" << "\n" << "\n"; + // + // for (auto &s : textSlice) { + // llvm::dbgs() << s << "\n"; + // } + llvm::dbgs() << "\n" + << "\n" + << "\n" + << "\n"; for (auto &p : slices) { llvm::dbgs() << p.first->getName() << "\t" << p.second.size() << "\n"; for (auto &s : p.second) { @@ -587,21 +593,21 @@ int main(int argc, const char **argv) { std::cout << "Current path is " << bofs::current_path() << '\n'; // const auto target = "./targets/w_defects.ll"; // const auto target = "./targets/main_linked.ll"; -// const auto target = "./targets/ex.ll"; -// const auto target = -// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/memcached/memcached.ll"; -// const auto target = "./targets/toSlice.ll"; - const auto target = "./targets/min_ex.ll"; + // const auto target = "./targets/ex.ll"; + // const auto target = + // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/memcached/memcached.ll"; + // const auto target = "./targets/toSlice.ll"; + const auto target = "./targets/min_ex.ll"; // const auto target = // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/git/git-linked.ll"; const auto entryfunction = "main"; -// const auto entryfunction = "parse_command"; + // const auto entryfunction = "parse_command"; const set entrypoints{entryfunction}; // initializeLogger(true); -// std::ifstream in("targets/locations_json.json"); -// std::ifstream in("targets/locations_memcached_command.json"); -// std::ifstream in("targets/locations_memcached_single.json"); -// std::ifstream in("targets/toSlice.json"); + // std::ifstream in("targets/locations_json.json"); + // std::ifstream in("targets/locations_memcached_command.json"); + // std::ifstream in("targets/locations_memcached_single.json"); + // std::ifstream in("targets/toSlice.json"); std::ifstream in("targets/min_ex.json"); json j; in >> j; From a5ced92fc3dc8a1af2ee477b4f382c39629ce31b Mon Sep 17 00:00:00 2001 From: Patrick Date: Sun, 13 Dec 2020 22:53:12 +0100 Subject: [PATCH 07/42] State --- tools/boomerang/slicer.cpp | 288 ++++++++++++++++++++++--------------- 1 file changed, 172 insertions(+), 116 deletions(-) diff --git a/tools/boomerang/slicer.cpp b/tools/boomerang/slicer.cpp index d14c3ea3d2..7c44a0080e 100644 --- a/tools/boomerang/slicer.cpp +++ b/tools/boomerang/slicer.cpp @@ -39,10 +39,13 @@ struct Location { unsigned int line; unsigned int column; map meta; + Location() {} + Location(unsigned int line, unsigned int column) + : line(line), column(column) {} }; // TODO Memory Leak here Location *createLocation(unsigned int line, unsigned int column) { - return new Location{.line = line, .column = column}; + return new Location(line, column); } bool operator<(const Location &l1, const Location &l2) { @@ -52,7 +55,7 @@ struct SliceComparator { template bool operator()(const tuple &l, const tuple &r) const { - return std::get<1>(l) < std::get<1>(r); + return std::get<1>(l) < std::get<1>(r) || std::get<0>(l) < std::get<0>(r); } }; void to_json(json &j, const Location &l) { @@ -68,6 +71,11 @@ ostream &operator<<(ostream &os, const Location &l) { return os; } +raw_ostream &operator<<(raw_ostream &os, const Location &l) { + os << "(" << l.line << "," << l.column << ")"; + return os; +} + struct Term { std::string file; std::string term; @@ -101,6 +109,7 @@ class SlicerFact { } friend std::ostream &operator<<(std::ostream &os, const SlicerFact &rhs); + friend raw_ostream &operator<<(raw_ostream &os, const SlicerFact &rhs); [[nodiscard]] bool isZero() const { return i == nullptr; } const llvm::Value *getInstruction() { return i; } const Location *getLocation() { return l; } @@ -121,6 +130,19 @@ std::ostream &operator<<(std::ostream &os, const SlicerFact &rhs) { } return os; } + +raw_ostream &operator<<(raw_ostream &os, const SlicerFact &rhs) { + std::string temp; + llvm::raw_string_ostream rso(temp); + if (!rhs.isZero()) { + rhs.i->print(rso, true); + os << temp << " " << *rhs.l; + } else { + os << "Zero"; + } + return os; +} + namespace std { template <> struct hash { size_t operator()(const SlicerFact &x) const { return 0; } @@ -137,28 +159,60 @@ class NormalFlowFunction : public FlowFunction { facts.insert(source); // check logic for conditions if (!source.isZero()) { + // llvm::dbgs() << "===================\n"; + // llvm::dbgs() << "succ: " <<*curr << "\n"; + // llvm::dbgs() << "Source: "<< *source.getInstruction() << "\n"; + // llvm::dbgs() << curr->getFunction()->getName() << "\n"; + + for (const auto &user : curr->users()) { + // llvm::dbgs() << "USE" << *user << "\n"; + if (user == source.getInstruction()) { + // llvm::dbgs() << "RELEVANT USE" << "\n"; + facts.insert(SlicerFact(source.getLocation(), curr)); + for (unsigned int i = 0; i < curr->getNumOperands(); ++i) { + const auto *operand = curr->getOperand(i); + // llvm::dbgs() << "OPERAND: " << *operand << "\n"; + facts.insert(SlicerFact(source.getLocation(), operand)); + for (const auto &user2 : operand->users()) { + // llvm::dbgs() << "USE2" << *user << "\n"; + facts.insert(SlicerFact(source.getLocation(), user2)); + } + } + // for (const auto &user2 : curr->users()) { + // if (user2 != source.getInstruction()) { + // facts.insert(SlicerFact(source.getLocation(), user2)); + // } + // } + } + } const auto *user = dyn_cast(source.getInstruction()); if (user) { - llvm::dbgs() << "USER:\n"; - user->dump(); - llvm::dbgs() << curr->getFunction()->getName() << "\n"; + // llvm::dbgs() << "USER:\n"; + // user->dump(); + for (unsigned int i = 0; i < user->getNumOperands(); ++i) { - const auto used = user->getOperandUse(i).get(); - for (auto unsigned i = 0; i < used->getNumUses(); ++i) { - used->uses(); - } - const auto *use = dyn_cast(user->getOperandUse(i).get()); - if (use) { - if (use == curr || use == source.getInstruction()) { - llvm::dbgs() << "USE:\n"; - user->getOperandUse(i)->dump(); - llvm::dbgs() << "\n\n"; - if (auto *dl = use->getDebugLoc().get()) { - facts.insert(SlicerFact( - createLocation(dl->getLine(), dl->getColumn()), use)); - } - } - } + // const auto *used = user->getOperandUse(i).get(); + // llvm::dbgs() << "USEDTEST\n"; + // used->dump(); + // for (const auto& use : used->uses()){ + // llvm::dbgs() <<"USEDTEST:\n"; + // use->dump(); + // facts.insert(SlicerFact(source.getLocation(), used)); + // } + // const auto *use = + // dyn_cast(user->getOperandUse(i).get()); if + // (use) { + // if (use == curr || use == source.getInstruction()) { + // llvm::dbgs() << "USE:\n"; + // user->getOperandUse(i)->dump(); + // llvm::dbgs() << "\n\n"; + // if (auto *dl = use->getDebugLoc().get()) { + // facts.insert(SlicerFact( + // createLocation(dl->getLine(), dl->getColumn()), + // use)); + // } + // } + // } } } } @@ -178,22 +232,13 @@ class CallFlowFunction : public FlowFunction { std::set computeTargets(SlicerFact source) override { set facts; - facts.insert(source); +// facts.insert(source); #ifdef __INTERPROCEDURAL__ if (!source.isZero()) { - // for (unsigned int i = 0; i < callStmt->getNumOperands(); ++i) { - // const auto op = callStmt->getOperand(i); - // if (source.getInstruction() == op) { - // facts.insert(SlicerFact(source.getLocation(), - // getNthFunctionArgument(destMthd, i))); - // } - // } auto targets = ICF->getStartPointsOf(destMthd); for (auto target : targets) { - llvm::dbgs() << "TARGET: \t"; - target->dump(); + facts.insert(SlicerFact(source.getLocation(), target)); } - cout << &targets; } #endif return facts; @@ -213,25 +258,25 @@ class RetFlowFunction : public FlowFunction { : callSite(callSite), calleeMthd(calleeMthd), exitStmt(exitStmt), retSite(retSite) {} std::set computeTargets(SlicerFact source) override { - llvm::dbgs() << "\n"; - callSite->dump(); - calleeMthd->dump(); - exitStmt->dump(); - retSite->dump(); - llvm::dbgs() << "\n"; + // llvm::dbgs() << "\n"; + // callSite->dump(); + // calleeMthd->dump(); + // exitStmt->dump(); + // retSite->dump(); + // llvm::dbgs() << "\n"; set facts; - facts.insert(source); +// facts.insert(source); #ifdef __INTERPROCEDURAL__ - for (unsigned int i = 0; i < callSite->getNumOperands(); ++i) { - const auto op = callSite->getOperand(i); - if (source.getInstruction() == op) { - facts.insert(SlicerFact(source.getLocation(), - getNthFunctionArgument(calleeMthd, i))); - } - } - if (!source.isZero()) { - facts.insert(SlicerFact(source.getLocation(), exitStmt)); - } +// for (unsigned int i = 0; i < callSite->getNumOperands(); ++i) { +// const auto op = callSite->getOperand(i); +// if (source.getInstruction() == op) { +// facts.insert(SlicerFact(source.getLocation(), +// getNthFunctionArgument(calleeMthd, i))); +// } +// } +// if (!source.isZero()) { +// facts.insert(SlicerFact(source.getLocation(), exitStmt)); +// } #endif return facts; } @@ -359,7 +404,7 @@ class IFDSSLicer : public IFDSTabulationProblem> { std::string createSlice(string target, set entrypoints, vector terms) { ProjectIRDB DB({target}, IRDBOptions::WPA); - LOG_IF_ENABLE(BOOST_LOG(lg::get()) << "STARTED") + initializeLogger(false); LLVMTypeHierarchy th(DB); LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, set(entrypoints), &th); @@ -378,9 +423,6 @@ std::string createSlice(string target, set entrypoints, if (const auto *store = dyn_cast(&i)) { if (const auto *global = dyn_cast(store->getPointerOperand())) { - // global->dump(); - llvm::dbgs() << global->getValueName()->first() << "\n"; - auto name = global->getValueName()->first(); for (const auto &t : terms) { if (name.find(t.term) != StringRef::npos) { @@ -397,7 +439,6 @@ std::string createSlice(string target, set entrypoints, for (auto &l : t.locations) { // check same statement if (l.line == line && t.file == file) { - i.dump(); facts.insert(SlicerFact(&l, &i)); if (const auto *branch = dyn_cast(&i)) { if (branch->isConditional()) { @@ -447,68 +488,75 @@ std::string createSlice(string target, set entrypoints, SliceComparator>> slices; map textSlices; + llvm::dbgs() << "SOLVING DONE\n"; for (const auto module : DB.getAllModules()) { for (auto &function : module->functions()) { llvm::dbgs() << "\n\n\n" << function.getName() << "\n\n\n"; bool isUsed = false; for (auto &bb : function) { for (const auto &i : bb) { + llvm::dbgs() + << "========================================================\n"; auto res = test.ifdsResultsAt(&i); if (llvm::isa(&i)) { // cout << "RET: " << llvmIRToString(&i) << "\n"; } - llvm::dbgs() << "INS: " << llvmIRToString(&i) << "\n"; + llvm::dbgs() << "INS: " << llvmIRToString(&i) + << " FACTS:" << res.size() << "\n"; llvm::dbgs() << "SRC: " << psr::getSrcCodeFromIR(&i) << "\n" << res.size() << "\n"; for (auto fact : res) { if (!fact.isZero()) { auto extractedInstruction = fact.getInstruction(); - cout << "FACT INS: " << llvmIRToString(fact.getInstruction()) - << "\n"; - cout << "SRC: " << *fact.getLocation() << " " - << psr::getSrcCodeFromIR(&i) << "\n" - << "\n"; - if (extractedInstruction == &i) { + llvm::dbgs() << "FACT INS: " + << llvmIRToString(fact.getInstruction()) << "\n"; + llvm::dbgs() << "SRC: " << *fact.getLocation() << " " + << psr::getSrcCodeFromIR(extractedInstruction) + << "\n" + << "\n"; + // if (extractedInstruction-> == function && + // extractedInstruction == &i || true) { + + const auto ins = dyn_cast(fact.getInstruction()); + + if (ins && ins->getFunction() == &function) { slice.insert( std::make_tuple(psr::getSrcCodeFromIR(extractedInstruction), *fact.getLocation(), extractedInstruction)); - slices[&function].insert( + auto insert_res = slices[&function].insert( std::make_tuple(psr::getSrcCodeFromIR(extractedInstruction), *fact.getLocation(), extractedInstruction)); - const auto ins = dyn_cast(fact.getInstruction()); - if (ins) { - const auto *blockExit = ins->getParent()->getTerminator(); - const auto instStr = psr::llvmIRToString(blockExit); - const auto exitSrc = psr::getSrcCodeFromIR(blockExit); - if (auto *dl = blockExit->getDebugLoc().get()) { - cout << "ADDING " << llvmIRToString(blockExit) << " " - << exitSrc << "\n"; - slice.insert(std::make_tuple( - exitSrc, - *createLocation(dl->getLine(), dl->getColumn()), - blockExit)); - slices[&function].insert(std::make_tuple( - exitSrc, - *createLocation(dl->getLine(), dl->getColumn()), - blockExit)); - } else { - cerr << "DID NOT FIND LOCATION" - << "\n"; - slice.insert(std::make_tuple(exitSrc, *createLocation(0, 0), - blockExit)); - slices[&function].insert(std::make_tuple( - exitSrc, *createLocation(0, 0), blockExit)); - } - - isUsed = true; + llvm::dbgs() << "ADDED: " << insert_res.second << "\n"; + const auto *blockExit = ins->getParent()->getTerminator(); + const auto instStr = psr::llvmIRToString(blockExit); + const auto exitSrc = psr::getSrcCodeFromIR(blockExit); + if (auto *dl = blockExit->getDebugLoc().get()) { + llvm::dbgs() << "ADDING " << llvmIRToString(blockExit) << " " + << exitSrc << "\n"; + slice.insert(std::make_tuple( + exitSrc, *createLocation(dl->getLine(), dl->getColumn()), + blockExit)); + slices[&function].insert(std::make_tuple( + exitSrc, *createLocation(dl->getLine(), dl->getColumn()), + blockExit)); + } else { + cerr << "DID NOT FIND LOCATION" + << "\n"; + slice.insert(std::make_tuple(exitSrc, *createLocation(0, 0), + blockExit)); + slices[&function].insert(std::make_tuple( + exitSrc, *createLocation(0, 0), blockExit)); } - } else { - cout << "DISCARDED PREVIOUS" - << "\n"; + + isUsed = true; } + // } else { + // cout << "DISCARDED PREVIOUS" + // << "\n"; + // } } else { - llvm::dbgs() << "ZERO" - << "\n"; + // llvm::dbgs() << "ZERO" + // << "\n"; } } // cout << "\n"; @@ -558,31 +606,42 @@ std::string createSlice(string target, set entrypoints, } } } - // string prev; - // for (auto i : slice) { - // auto curr = std::get<0>(i); - // llvm::dbgs() << std::get<0>(i) << "\t\t\t\t\t\t\t\t\t\t\t\t" << - // std::get<1>(i) - // << "\t\t\t\t\t" << psr::llvmIRToString(std::get<2>(i)) << "\n"; - // if (curr != prev) { - // textSlice.emplace_back(curr); - // } - // prev = curr; - // } - // llvm::dbgs() << "\n" << "\n" << "\n" << "\n"; - // - // for (auto &s : textSlice) { - // llvm::dbgs() << s << "\n"; - // } + cout << "\n"; llvm::dbgs() << "\n" << "\n" << "\n" << "\n"; for (auto &p : slices) { llvm::dbgs() << p.first->getName() << "\t" << p.second.size() << "\n"; + vector> slice_vec; for (auto &s : p.second) { - llvm::dbgs() << std::get<0>(s) << "\n"; + auto src = std::get<0>(s); + auto loc = dyn_cast(std::get<2>(s))->getDebugLoc(); + // llvm::dbgs() << std::get<0>(s) << "\n"; + if (loc) { + if (std::find_if(slice_vec.begin(), slice_vec.end(), + [&src](const pair &elem) { + return elem.first == src; + }) == slice_vec.end()) { + slice_vec.push_back( + make_pair(src, Location(loc->getLine(), loc->getColumn()))); + } + } else { + llvm::dbgs() << "No Location for " << *std::get<2>(s) << " " << src + << "\n"; + } + } + std::sort(slice_vec.begin(), slice_vec.end(), + [](const pair &lhs, + const pair &rhs) -> bool { + auto lhs_loc = lhs.second; + auto rhs_loc = rhs.second; + return rhs_loc.line < lhs_loc.line; + }); + for (const auto &line : slice_vec) { + cout << line.first << endl; } + cout << endl << endl; } return ""; } @@ -597,7 +656,8 @@ int main(int argc, const char **argv) { // const auto target = // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/memcached/memcached.ll"; // const auto target = "./targets/toSlice.ll"; - const auto target = "./targets/min_ex.ll"; + const auto target = "./targets/min_ex_ssa.ll"; + // const auto target = "./targets/parson_linked.ll"; // const auto target = // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/git/git-linked.ll"; const auto entryfunction = "main"; @@ -609,14 +669,10 @@ int main(int argc, const char **argv) { // std::ifstream in("targets/locations_memcached_single.json"); // std::ifstream in("targets/toSlice.json"); std::ifstream in("targets/min_ex.json"); + // std::ifstream in("targets/parson_serialize.json"); json j; in >> j; auto terms = j.get>(); - ProjectIRDB DB({target}, IRDBOptions::WPA); - LOG_IF_ENABLE(BOOST_LOG(lg::get()) << "STARTED") - LLVMTypeHierarchy th(DB); - LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, entrypoints, &th); - LLVMPointsToGraph PT(DB); createSlice(target, entrypoints, terms); std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); std::cout << "Time difference = " From 3fd00d9991dd38a9658d863a3101ea5fcf95edc8 Mon Sep 17 00:00:00 2001 From: Patrick Date: Mon, 14 Dec 2020 17:06:14 +0100 Subject: [PATCH 08/42] Move to SSA --- lib/Utils/LLVMIRToSrc.cpp | 24 +-- tools/boomerang/slicer.cpp | 323 +++++++++++++------------------------ 2 files changed, 123 insertions(+), 224 deletions(-) diff --git a/lib/Utils/LLVMIRToSrc.cpp b/lib/Utils/LLVMIRToSrc.cpp index ca948ac471..da13cda3f0 100644 --- a/lib/Utils/LLVMIRToSrc.cpp +++ b/lib/Utils/LLVMIRToSrc.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "boost/algorithm/string/trim.hpp" #include "boost/filesystem.hpp" @@ -88,12 +89,12 @@ llvm::DISubprogram *getDISubprogram(const llvm::Value *V) { llvm::DILocation *getDILocation(const llvm::Value *V) { // Arguments and Instruction such as AllocaInst - if (auto *DbgIntr = getDbgVarIntrinsic(V)) { - if (auto *MN = DbgIntr->getMetadata(llvm::LLVMContext::MD_dbg)) { + if (const auto *I = llvm::dyn_cast(V)) { + if (auto *MN = I->getMetadata(llvm::LLVMContext::MD_dbg)) { return llvm::dyn_cast(MN); } - } else if (const auto *I = llvm::dyn_cast(V)) { - if (auto *MN = I->getMetadata(llvm::LLVMContext::MD_dbg)) { + } else if (auto *DbgIntr = getDbgVarIntrinsic(V)) { + if (auto *MN = DbgIntr->getMetadata(llvm::LLVMContext::MD_dbg)) { return llvm::dyn_cast(MN); } } @@ -208,7 +209,7 @@ unsigned int getColumnFromIR(const llvm::Value *V) { std::string getSrcCodeFromIR(const llvm::Value *V) { unsigned int LineNr = getLineFromIR(V); unsigned int columnNr = getColumnFromIR(V); - //TODO + // TODO if (LineNr > 0) { boost::filesystem::path Path(getFilePathFromIR(V)); if (boost::filesystem::exists(Path) && @@ -222,19 +223,18 @@ std::string getSrcCodeFromIR(const llvm::Value *V) { } std::getline(Ifs, SrcLine); std::string res; - //TODO - unsigned int i =0;// columnNr -1; - while (true){ + // TODO + unsigned int i = 0; // columnNr -1; + while (true) { auto current_char = SrcLine[i]; res.push_back(current_char); i++; - if (current_char == ';' || current_char == '}'|| SrcLine.length() == i) { + if (current_char == ';' || current_char == '}' || + SrcLine.length() == i) { break; } - } -// boost::algorithm::trim(SrcLine); - + // boost::algorithm::trim(SrcLine); return res; } } diff --git a/tools/boomerang/slicer.cpp b/tools/boomerang/slicer.cpp index 7c44a0080e..7106640f94 100644 --- a/tools/boomerang/slicer.cpp +++ b/tools/boomerang/slicer.cpp @@ -159,60 +159,17 @@ class NormalFlowFunction : public FlowFunction { facts.insert(source); // check logic for conditions if (!source.isZero()) { - // llvm::dbgs() << "===================\n"; - // llvm::dbgs() << "succ: " <<*curr << "\n"; - // llvm::dbgs() << "Source: "<< *source.getInstruction() << "\n"; - // llvm::dbgs() << curr->getFunction()->getName() << "\n"; +// llvm::dbgs() << "===================\n"; +// llvm::dbgs() << "succ: " <<*curr << "\n"; +// llvm::dbgs() << "Source: "<< *source.getInstruction() << "\n"; +// llvm::dbgs() << curr->getFunction()->getName() << "\n"; for (const auto &user : curr->users()) { - // llvm::dbgs() << "USE" << *user << "\n"; +// llvm::dbgs() << "USE" << *user << "\n"; if (user == source.getInstruction()) { - // llvm::dbgs() << "RELEVANT USE" << "\n"; +// llvm::dbgs() << "RELEVANT USE" << "\n"; facts.insert(SlicerFact(source.getLocation(), curr)); - for (unsigned int i = 0; i < curr->getNumOperands(); ++i) { - const auto *operand = curr->getOperand(i); - // llvm::dbgs() << "OPERAND: " << *operand << "\n"; - facts.insert(SlicerFact(source.getLocation(), operand)); - for (const auto &user2 : operand->users()) { - // llvm::dbgs() << "USE2" << *user << "\n"; - facts.insert(SlicerFact(source.getLocation(), user2)); - } - } - // for (const auto &user2 : curr->users()) { - // if (user2 != source.getInstruction()) { - // facts.insert(SlicerFact(source.getLocation(), user2)); - // } - // } - } - } - const auto *user = dyn_cast(source.getInstruction()); - if (user) { - // llvm::dbgs() << "USER:\n"; - // user->dump(); - - for (unsigned int i = 0; i < user->getNumOperands(); ++i) { - // const auto *used = user->getOperandUse(i).get(); - // llvm::dbgs() << "USEDTEST\n"; - // used->dump(); - // for (const auto& use : used->uses()){ - // llvm::dbgs() <<"USEDTEST:\n"; - // use->dump(); - // facts.insert(SlicerFact(source.getLocation(), used)); - // } - // const auto *use = - // dyn_cast(user->getOperandUse(i).get()); if - // (use) { - // if (use == curr || use == source.getInstruction()) { - // llvm::dbgs() << "USE:\n"; - // user->getOperandUse(i)->dump(); - // llvm::dbgs() << "\n\n"; - // if (auto *dl = use->getDebugLoc().get()) { - // facts.insert(SlicerFact( - // createLocation(dl->getLine(), dl->getColumn()), - // use)); - // } - // } - // } + } } } @@ -401,93 +358,10 @@ class IFDSSLicer : public IFDSTabulationProblem> { const std::set &entrypoints; }; -std::string createSlice(string target, set entrypoints, - vector terms) { - ProjectIRDB DB({target}, IRDBOptions::WPA); - initializeLogger(false); - LLVMTypeHierarchy th(DB); - LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, set(entrypoints), - &th); - LLVMBasedICFG fcg(DB, CallGraphAnalysisType::DTA, set(entrypoints), &th); - LLVMPointsToGraph PT(DB); - map> sc; - for (auto *module : DB.getAllModules()) { - for (auto &function : module->functions()) { - for (auto &bb : function) { - for (const auto &i : bb) { - set facts; - if (auto *debuglog = i.getDebugLoc().get()) { - auto line = debuglog->getLine(); - auto column = debuglog->getColumn(); - auto file = debuglog->getFilename(); - if (const auto *store = dyn_cast(&i)) { - if (const auto *global = - dyn_cast(store->getPointerOperand())) { - auto name = global->getValueName()->first(); - for (const auto &t : terms) { - if (name.find(t.term) != StringRef::npos) { - for (const auto &l : t.locations) { - if (l.line == line && false) { - facts.insert(SlicerFact(&l, &i)); - } - } - } - } - } - } - for (auto &t : terms) { - for (auto &l : t.locations) { - // check same statement - if (l.line == line && t.file == file) { - facts.insert(SlicerFact(&l, &i)); - if (const auto *branch = dyn_cast(&i)) { - if (branch->isConditional()) { - const auto *constbranch = branch->getSuccessor(0); - // Assume first branch is true branch -- we're pretty sure - // that is always the case - for (const auto &inst : *constbranch) { - if (auto *debuglog2 = inst.getDebugLoc().get()) { - const auto *loc = createLocation( - debuglog2->getLine(), debuglog2->getColumn()); - facts.insert(SlicerFact(loc, &inst)); - } - } - } - } - } - } - } - } - if (!facts.empty()) { - sc[&i] = facts; - } - } - } - } - } - IFDSSLicer slicer(&cg, &th, &DB, &PT, sc, &terms, - entrypoints); - IFDSSLicer slicer2(&fcg, &th, &DB, &PT, sc, &terms, - entrypoints); - IFDSSolver test(slicer); - // IFDSSolver test(slicer2); - test.solve(); - ofstream out; - out.open("out/graph.dot"); - test.emitESGAsDot(out); - out.close(); - out.open("out/results.txt"); - test.dumpResults(out); - out.close(); - cout << "\n"; - set, SliceComparator> - slice; - vector textSlice; +template +void process_results(ProjectIRDB &DB,IFDSSolver &solver,LLVMBasedBackwardsICFG &cg) { map, - SliceComparator>> - slices; - map textSlices; + set> slice_instruction; llvm::dbgs() << "SOLVING DONE\n"; for (const auto module : DB.getAllModules()) { for (auto &function : module->functions()) { @@ -497,10 +371,7 @@ std::string createSlice(string target, set entrypoints, for (const auto &i : bb) { llvm::dbgs() << "========================================================\n"; - auto res = test.ifdsResultsAt(&i); - if (llvm::isa(&i)) { - // cout << "RET: " << llvmIRToString(&i) << "\n"; - } + auto res = solver.ifdsResultsAt(&i); llvm::dbgs() << "INS: " << llvmIRToString(&i) << " FACTS:" << res.size() << "\n"; llvm::dbgs() << "SRC: " << psr::getSrcCodeFromIR(&i) << "\n" @@ -520,46 +391,28 @@ std::string createSlice(string target, set entrypoints, const auto ins = dyn_cast(fact.getInstruction()); if (ins && ins->getFunction() == &function) { - slice.insert( - std::make_tuple(psr::getSrcCodeFromIR(extractedInstruction), - *fact.getLocation(), extractedInstruction)); - auto insert_res = slices[&function].insert( - std::make_tuple(psr::getSrcCodeFromIR(extractedInstruction), - *fact.getLocation(), extractedInstruction)); - llvm::dbgs() << "ADDED: " << insert_res.second << "\n"; + slice_instruction[&function].insert(extractedInstruction); const auto *blockExit = ins->getParent()->getTerminator(); const auto instStr = psr::llvmIRToString(blockExit); const auto exitSrc = psr::getSrcCodeFromIR(blockExit); if (auto *dl = blockExit->getDebugLoc().get()) { llvm::dbgs() << "ADDING " << llvmIRToString(blockExit) << " " << exitSrc << "\n"; - slice.insert(std::make_tuple( - exitSrc, *createLocation(dl->getLine(), dl->getColumn()), - blockExit)); - slices[&function].insert(std::make_tuple( - exitSrc, *createLocation(dl->getLine(), dl->getColumn()), - blockExit)); +// slices[&function].insert(std::make_tuple( +// exitSrc, *createLocation(dl->getLine(), dl->getColumn()), +// blockExit)); } else { cerr << "DID NOT FIND LOCATION" << "\n"; - slice.insert(std::make_tuple(exitSrc, *createLocation(0, 0), - blockExit)); - slices[&function].insert(std::make_tuple( - exitSrc, *createLocation(0, 0), blockExit)); +// slice.insert(std::make_tuple(exitSrc, *createLocation(0, 0), +// blockExit)); } isUsed = true; } - // } else { - // cout << "DISCARDED PREVIOUS" - // << "\n"; - // } } else { - // llvm::dbgs() << "ZERO" - // << "\n"; } } - // cout << "\n"; } } if (isUsed) { @@ -569,36 +422,26 @@ std::string createSlice(string target, set entrypoints, for (auto &bb : function) { for (auto &ins : bb) { if (auto *dl = ins.getDebugLoc().get()) { - slice.insert(std::make_tuple( - source, *createLocation(dl->getLine(), dl->getColumn()), - entry)); - slices[&function].insert(std::make_tuple( - source, *createLocation(dl->getLine(), dl->getColumn()), - entry)); +// slice.insert(std::make_tuple( +// source, *createLocation(dl->getLine(), dl->getColumn()), +// entry)); goto added; // we found the first instruction with debug info } } } - slice.insert(std::make_tuple(source, *createLocation(0, 0), entry)); - slices[&function].insert( - std::make_tuple(source, *createLocation(0, 0), entry)); - added: +// slices[&function].insert( +// std::make_tuple(source, *createLocation(0, 0), entry)); + added: const auto exits = cg.getStartPointsOf(&function); for (const auto *exit : exits) { if (auto *dl = exit->getDebugLoc().get()) { - slice.insert(std::make_tuple( - psr::getSrcCodeFromIR(exit), - *createLocation(dl->getLine(), dl->getColumn()), exit)); - slices[&function].insert(std::make_tuple( - psr::getSrcCodeFromIR(exit), - *createLocation(dl->getLine(), dl->getColumn()), exit)); +// slices[&function].insert(std::make_tuple( +// psr::getSrcCodeFromIR(exit), +// *createLocation(dl->getLine(), dl->getColumn()), exit)); } else { - slice.insert(std::make_tuple(psr::getSrcCodeFromIR(exit), - *createLocation(INT_MAX, INT_MAX), - exit)); - slices[&function].insert( - std::make_tuple(psr::getSrcCodeFromIR(exit), - *createLocation(INT_MAX, INT_MAX), exit)); +// slices[&function].insert( +// std::make_tuple(psr::getSrcCodeFromIR(exit), +// *createLocation(INT_MAX, INT_MAX), exit)); llvm::dbgs() << "GOT NO DEBUG LOG" << "\n"; } @@ -611,38 +454,94 @@ std::string createSlice(string target, set entrypoints, << "\n" << "\n" << "\n"; - for (auto &p : slices) { + for (auto &p : slice_instruction) { llvm::dbgs() << p.first->getName() << "\t" << p.second.size() << "\n"; - vector> slice_vec; for (auto &s : p.second) { - auto src = std::get<0>(s); - auto loc = dyn_cast(std::get<2>(s))->getDebugLoc(); - // llvm::dbgs() << std::get<0>(s) << "\n"; - if (loc) { - if (std::find_if(slice_vec.begin(), slice_vec.end(), - [&src](const pair &elem) { - return elem.first == src; - }) == slice_vec.end()) { - slice_vec.push_back( - make_pair(src, Location(loc->getLine(), loc->getColumn()))); + llvm::dbgs() << *s <<"\t" << psr::getSrcCodeFromIR(s) << "\n"; + } + } + +} + +std::string createSlice(string target, set entrypoints, + vector terms) { + ProjectIRDB DB({target}, IRDBOptions::WPA); + initializeLogger(false); + LLVMTypeHierarchy th(DB); + LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, set(entrypoints), + &th); + LLVMBasedICFG fcg(DB, CallGraphAnalysisType::DTA, set(entrypoints), &th); + LLVMPointsToGraph PT(DB); + map> sc; + for (auto *module : DB.getAllModules()) { + for (auto &function : module->functions()) { + for (auto &bb : function) { + for (const auto &i : bb) { + set facts; + if (auto *debuglog = i.getDebugLoc().get()) { + auto line = debuglog->getLine(); + auto column = debuglog->getColumn(); + auto file = debuglog->getFilename(); + if (const auto *store = dyn_cast(&i)) { + if (const auto *global = + dyn_cast(store->getPointerOperand())) { + auto name = global->getValueName()->first(); + for (const auto &t : terms) { + if (name.find(t.term) != StringRef::npos) { + for (const auto &l : t.locations) { + if (l.line == line && false) { + facts.insert(SlicerFact(&l, &i)); + } + } + } + } + } + } + for (auto &t : terms) { + for (auto &l : t.locations) { + // check same statement + if (l.line == line && t.file == file) { + facts.insert(SlicerFact(&l, &i)); + if (const auto *branch = dyn_cast(&i)) { + if (branch->isConditional()) { + const auto *constbranch = branch->getSuccessor(0); + // Assume first branch is true branch -- we're pretty sure + // that is always the case + for (const auto &inst : *constbranch) { + if (auto *debuglog2 = inst.getDebugLoc().get()) { + const auto *loc = createLocation( + debuglog2->getLine(), debuglog2->getColumn()); + facts.insert(SlicerFact(loc, &inst)); + } + } + } + } + } + } + } + } + if (!facts.empty()) { + sc[&i] = facts; + } } - } else { - llvm::dbgs() << "No Location for " << *std::get<2>(s) << " " << src - << "\n"; } } - std::sort(slice_vec.begin(), slice_vec.end(), - [](const pair &lhs, - const pair &rhs) -> bool { - auto lhs_loc = lhs.second; - auto rhs_loc = rhs.second; - return rhs_loc.line < lhs_loc.line; - }); - for (const auto &line : slice_vec) { - cout << line.first << endl; - } - cout << endl << endl; } + IFDSSLicer slicer(&cg, &th, &DB, &PT, sc, &terms, + entrypoints); + IFDSSLicer slicer2(&fcg, &th, &DB, &PT, sc, &terms, + entrypoints); + IFDSSolver solver(slicer); + solver.solve(); + ofstream out; + out.open("out/graph.dot"); + solver.emitESGAsDot(out); + out.close(); + out.open("out/results.txt"); + solver.dumpResults(out); + out.close(); + cout << "\n"; + process_results(DB,solver,cg); return ""; } From 12d09fd67ee0e8e9871e3c89d137ef22334d8394 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 17 Dec 2020 12:39:49 +0100 Subject: [PATCH 09/42] Ignore Buildfolders --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 285bc28f71..336508980f 100644 --- a/.gitignore +++ b/.gitignore @@ -140,3 +140,5 @@ unittests/PhasarLLVM/ifdside/Problems/IFDSTaintAnalysisTest unittests/PhasarLLVM/Pointer/LLVMTypeHierarchyTest unittests/Utils/LLVMShorthandsTest unittests/Utils/PAMMTest + +cmake-build*/* \ No newline at end of file From f87f19b2772abc2cefbdcbfb8441e63c003b6127 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 17 Dec 2020 12:42:38 +0100 Subject: [PATCH 10/42] Refactor a bit --- tools/CMakeLists.txt | 1 + tools/boomerang/CMakeLists.txt | 35 -- tools/module-extractor/CMakeLists.txt | 43 ++ .../depfinder.cpp | 0 .../mytest.cpp | 0 .../slicer.cpp | 403 +++++------------- tools/module-extractor/slicer.h | 216 ++++++++++ 7 files changed, 369 insertions(+), 329 deletions(-) create mode 100644 tools/module-extractor/CMakeLists.txt rename tools/{boomerang => module-extractor}/depfinder.cpp (100%) rename tools/{boomerang => module-extractor}/mytest.cpp (100%) rename tools/{boomerang => module-extractor}/slicer.cpp (59%) create mode 100644 tools/module-extractor/slicer.h diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index b493441acd..77c3ad2428 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -2,3 +2,4 @@ add_subdirectory(boomerang) add_subdirectory(example-tool) add_subdirectory(phasar-clang) add_subdirectory(phasar-llvm) +add_subdirectory(module-extractor) \ No newline at end of file diff --git a/tools/boomerang/CMakeLists.txt b/tools/boomerang/CMakeLists.txt index 6228a0b9b3..bc85bf3815 100644 --- a/tools/boomerang/CMakeLists.txt +++ b/tools/boomerang/CMakeLists.txt @@ -3,17 +3,10 @@ if (PHASAR_IN_TREE) add_phasar_executable(boomerang boomerang.cpp ) - add_phasar_executable(slicer - tools/phasar/slicer.cpp - ) - else () add_executable(boomerang boomerang.cpp ) - add_executable(slicer - slicer.cpp - ) endif () find_package(Boost COMPONENTS log filesystem program_options graph ${BOOST_THREAD} REQUIRED) @@ -39,37 +32,9 @@ target_link_libraries(boomerang ${CMAKE_THREAD_LIBS_INIT} ) -target_link_libraries(slicer - LINK_PUBLIC - phasar_config - phasar_controller - phasar_db - phasar_controlflow - phasar_ifdside - phasar_mono - phasar_wpds - phasar_syncpds - ${PHASAR_PLUGINS_LIB} - wali - phasar_passes - phasar_pointer - phasar_typehierarchy - phasar_phasarllvm_utils - phasar_utils - ${Boost_LIBRARIES} - ${CMAKE_DL_LIBS} - ${CMAKE_THREAD_LIBS_INIT} - ) - - if (USE_LLVM_FAT_LIB) llvm_config(boomerang USE_SHARED ${LLVM_LINK_COMPONENTS}) else () llvm_config(boomerang ${LLVM_LINK_COMPONENTS}) endif () -if (USE_LLVM_FAT_LIB) - llvm_config(slicer USE_SHARED ${LLVM_LINK_COMPONENTS}) -else () - llvm_config(slicer ${LLVM_LINK_COMPONENTS}) -endif () set(LLVM_LINK_COMPONENTS) diff --git a/tools/module-extractor/CMakeLists.txt b/tools/module-extractor/CMakeLists.txt new file mode 100644 index 0000000000..7d1be0d26d --- /dev/null +++ b/tools/module-extractor/CMakeLists.txt @@ -0,0 +1,43 @@ +# Build a stand-alone executable +if (PHASAR_IN_TREE) + add_phasar_executable(slicer + tools/phasar/slicer.cpp + ) +else () + add_executable(slicer + ../module-extractor/slicer.cpp + ) +endif () + +find_package(Boost COMPONENTS log filesystem program_options graph ${BOOST_THREAD} REQUIRED) + +target_link_libraries(slicer + LINK_PUBLIC + phasar_config + phasar_controller + phasar_db + phasar_controlflow + phasar_ifdside + phasar_mono + phasar_wpds + phasar_syncpds + ${PHASAR_PLUGINS_LIB} + wali + phasar_passes + phasar_pointer + phasar_typehierarchy + phasar_phasarllvm_utils + phasar_utils + ${Boost_LIBRARIES} + ${CMAKE_DL_LIBS} + ${CMAKE_THREAD_LIBS_INIT} + ) + + +if (USE_LLVM_FAT_LIB) + llvm_config(slicer USE_SHARED ${LLVM_LINK_COMPONENTS}) +else () + llvm_config(slicer ${LLVM_LINK_COMPONENTS}) +endif () + +set(LLVM_LINK_COMPONENTS) diff --git a/tools/boomerang/depfinder.cpp b/tools/module-extractor/depfinder.cpp similarity index 100% rename from tools/boomerang/depfinder.cpp rename to tools/module-extractor/depfinder.cpp diff --git a/tools/boomerang/mytest.cpp b/tools/module-extractor/mytest.cpp similarity index 100% rename from tools/boomerang/mytest.cpp rename to tools/module-extractor/mytest.cpp diff --git a/tools/boomerang/slicer.cpp b/tools/module-extractor/slicer.cpp similarity index 59% rename from tools/boomerang/slicer.cpp rename to tools/module-extractor/slicer.cpp index 7106640f94..7701d38e8a 100644 --- a/tools/boomerang/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -1,56 +1,7 @@ -#include -#include +#include "slicer.h" -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include #define __INTERPROCEDURAL__ -namespace bofs = boost::filesystem; -using namespace llvm; -using namespace std; -using namespace psr; -using json = nlohmann::json; -struct Term; - -struct Location { - unsigned int line; - unsigned int column; - map meta; - Location() {} - Location(unsigned int line, unsigned int column) - : line(line), column(column) {} -}; -// TODO Memory Leak here -Location *createLocation(unsigned int line, unsigned int column) { - return new Location(line, column); -} -bool operator<(const Location &l1, const Location &l2) { - return l1.line < l2.line || (l1.line == l2.line && l1.column < l2.column); -} struct SliceComparator { template bool operator()(const tuple &l, @@ -58,221 +9,6 @@ struct SliceComparator { return std::get<1>(l) < std::get<1>(r) || std::get<0>(l) < std::get<0>(r); } }; -void to_json(json &j, const Location &l) { - j = json{{"line", l.line}, {"column", l.column}, {"meta", l.meta}}; -} -void from_json(const json &j, Location &l) { - j.at("line").get_to(l.line); - j.at("column").get_to(l.column); - j.at("meta").get_to(l.meta); -} -ostream &operator<<(ostream &os, const Location &l) { - os << "(" << l.line << "," << l.column << ")"; - return os; -} - -raw_ostream &operator<<(raw_ostream &os, const Location &l) { - os << "(" << l.line << "," << l.column << ")"; - return os; -} - -struct Term { - std::string file; - std::string term; - vector locations; -}; -void to_json(json &j, const Term &t) { - j = json{{"file", t.file}, {"term", t.term}, {"locations", t.locations}}; -} -void from_json(const json &j, Term &t) { - j.at("file").get_to(t.file); - j.at("term").get_to(t.term); - j.at("locations").get_to(t.locations); -} - -ostream &operator<<(ostream &os, const Term &t) { - os << '\'' << t.term << "' in " << t.file << " at ["; - for (auto const &l : t.locations) { - os << l << ","; - } - os << "]"; - return os; -} - -class SlicerFact { -public: - SlicerFact() = default; - SlicerFact(const Location *l, const Value *i) : l(l), i(i) {} - bool operator<(const SlicerFact &rhs) const { return i < rhs.i; } - bool operator==(const SlicerFact &rhs) const { - return i == rhs.i && l == rhs.l; - } - - friend std::ostream &operator<<(std::ostream &os, const SlicerFact &rhs); - friend raw_ostream &operator<<(raw_ostream &os, const SlicerFact &rhs); - [[nodiscard]] bool isZero() const { return i == nullptr; } - const llvm::Value *getInstruction() { return i; } - const Location *getLocation() { return l; } - -private: - const Location *l = nullptr; - const Value *i = nullptr; -}; - -std::ostream &operator<<(std::ostream &os, const SlicerFact &rhs) { - std::string temp; - llvm::raw_string_ostream rso(temp); - if (!rhs.isZero()) { - rhs.i->print(rso, true); - os << temp << " " << *rhs.l; - } else { - os << "Zero"; - } - return os; -} - -raw_ostream &operator<<(raw_ostream &os, const SlicerFact &rhs) { - std::string temp; - llvm::raw_string_ostream rso(temp); - if (!rhs.isZero()) { - rhs.i->print(rso, true); - os << temp << " " << *rhs.l; - } else { - os << "Zero"; - } - return os; -} - -namespace std { -template <> struct hash { - size_t operator()(const SlicerFact &x) const { return 0; } -}; -} // namespace std - -class NormalFlowFunction : public FlowFunction { -public: - NormalFlowFunction(const Instruction *curr, const Instruction *succ) - : curr(curr), succ(succ) {} - - std::set computeTargets(SlicerFact source) override { - set facts; - facts.insert(source); - // check logic for conditions - if (!source.isZero()) { -// llvm::dbgs() << "===================\n"; -// llvm::dbgs() << "succ: " <<*curr << "\n"; -// llvm::dbgs() << "Source: "<< *source.getInstruction() << "\n"; -// llvm::dbgs() << curr->getFunction()->getName() << "\n"; - - for (const auto &user : curr->users()) { -// llvm::dbgs() << "USE" << *user << "\n"; - if (user == source.getInstruction()) { -// llvm::dbgs() << "RELEVANT USE" << "\n"; - facts.insert(SlicerFact(source.getLocation(), curr)); - - } - } - } - return facts; - } - -private: - const Instruction *curr; - const Instruction *succ; -}; -template -class CallFlowFunction : public FlowFunction { -public: - CallFlowFunction(const Instruction *callStmt, const Function *destMthd, - const ICFG_T *ICF) - : callStmt(callStmt), destMthd(destMthd), ICF(ICF) {} - - std::set computeTargets(SlicerFact source) override { - set facts; -// facts.insert(source); -#ifdef __INTERPROCEDURAL__ - if (!source.isZero()) { - auto targets = ICF->getStartPointsOf(destMthd); - for (auto target : targets) { - facts.insert(SlicerFact(source.getLocation(), target)); - } - } -#endif - return facts; - } - -private: - const Instruction *callStmt; - const Function *destMthd; - const ICFG_T *ICF; -}; - -template -class RetFlowFunction : public FlowFunction { -public: - RetFlowFunction(const Instruction *callSite, const Function *calleeMthd, - const Instruction *exitStmt, const Instruction *retSite) - : callSite(callSite), calleeMthd(calleeMthd), exitStmt(exitStmt), - retSite(retSite) {} - std::set computeTargets(SlicerFact source) override { - // llvm::dbgs() << "\n"; - // callSite->dump(); - // calleeMthd->dump(); - // exitStmt->dump(); - // retSite->dump(); - // llvm::dbgs() << "\n"; - set facts; -// facts.insert(source); -#ifdef __INTERPROCEDURAL__ -// for (unsigned int i = 0; i < callSite->getNumOperands(); ++i) { -// const auto op = callSite->getOperand(i); -// if (source.getInstruction() == op) { -// facts.insert(SlicerFact(source.getLocation(), -// getNthFunctionArgument(calleeMthd, i))); -// } -// } -// if (!source.isZero()) { -// facts.insert(SlicerFact(source.getLocation(), exitStmt)); -// } -#endif - return facts; - } - -private: - const Instruction *callSite; - const Function *calleeMthd; - const Instruction *exitStmt; - - const Instruction *retSite; -}; - -class CallToRetFlowFunction : public FlowFunction { -public: - CallToRetFlowFunction(const Instruction *callSite, const Instruction *retSite, - set callees) - : callSite(callSite), retSite(retSite), callees(std::move(callees)) {} - - std::set computeTargets(SlicerFact source) override { - set facts; - facts.insert(source); - return facts; - } - -private: - const Instruction *callSite; - const Instruction *retSite; - set callees; -}; - -template struct SlicerAnalysisDomain : public AnalysisDomain { - using d_t = SlicerFact; - using n_t = const llvm::Instruction *; - using f_t = const llvm::Function *; - using t_t = const llvm::StructType *; - using v_t = const llvm::Value *; - using c_t = ICFG_T; - using i_t = ICFG_T; -}; template class IFDSSLicer : public IFDSTabulationProblem> { @@ -359,9 +95,9 @@ class IFDSSLicer : public IFDSTabulationProblem> { }; template -void process_results(ProjectIRDB &DB,IFDSSolver &solver,LLVMBasedBackwardsICFG &cg) { - map> slice_instruction; +void process_results(ProjectIRDB &DB, IFDSSolver &solver, + LLVMBasedBackwardsICFG &cg) { + map> slice_instruction; llvm::dbgs() << "SOLVING DONE\n"; for (const auto module : DB.getAllModules()) { for (auto &function : module->functions()) { @@ -398,14 +134,16 @@ void process_results(ProjectIRDB &DB,IFDSSolver &solver,LLVMBa if (auto *dl = blockExit->getDebugLoc().get()) { llvm::dbgs() << "ADDING " << llvmIRToString(blockExit) << " " << exitSrc << "\n"; -// slices[&function].insert(std::make_tuple( -// exitSrc, *createLocation(dl->getLine(), dl->getColumn()), -// blockExit)); + // slices[&function].insert(std::make_tuple( + // exitSrc, + // *createLocation(dl->getLine(), + // dl->getColumn()), blockExit)); } else { cerr << "DID NOT FIND LOCATION" << "\n"; -// slice.insert(std::make_tuple(exitSrc, *createLocation(0, 0), -// blockExit)); + // slice.insert(std::make_tuple(exitSrc, + // *createLocation(0, 0), + // blockExit)); } isUsed = true; @@ -422,26 +160,28 @@ void process_results(ProjectIRDB &DB,IFDSSolver &solver,LLVMBa for (auto &bb : function) { for (auto &ins : bb) { if (auto *dl = ins.getDebugLoc().get()) { -// slice.insert(std::make_tuple( -// source, *createLocation(dl->getLine(), dl->getColumn()), -// entry)); + // slice.insert(std::make_tuple( + // source, *createLocation(dl->getLine(), + // dl->getColumn()), entry)); goto added; // we found the first instruction with debug info } } } -// slices[&function].insert( -// std::make_tuple(source, *createLocation(0, 0), entry)); - added: + // slices[&function].insert( + // std::make_tuple(source, *createLocation(0, 0), entry)); + added: const auto exits = cg.getStartPointsOf(&function); for (const auto *exit : exits) { if (auto *dl = exit->getDebugLoc().get()) { -// slices[&function].insert(std::make_tuple( -// psr::getSrcCodeFromIR(exit), -// *createLocation(dl->getLine(), dl->getColumn()), exit)); + // slices[&function].insert(std::make_tuple( + // psr::getSrcCodeFromIR(exit), + // *createLocation(dl->getLine(), dl->getColumn()), + // exit)); } else { -// slices[&function].insert( -// std::make_tuple(psr::getSrcCodeFromIR(exit), -// *createLocation(INT_MAX, INT_MAX), exit)); + // slices[&function].insert( + // std::make_tuple(psr::getSrcCodeFromIR(exit), + // *createLocation(INT_MAX, INT_MAX), + // exit)); llvm::dbgs() << "GOT NO DEBUG LOG" << "\n"; } @@ -457,10 +197,9 @@ void process_results(ProjectIRDB &DB,IFDSSolver &solver,LLVMBa for (auto &p : slice_instruction) { llvm::dbgs() << p.first->getName() << "\t" << p.second.size() << "\n"; for (auto &s : p.second) { - llvm::dbgs() << *s <<"\t" << psr::getSrcCodeFromIR(s) << "\n"; + llvm::dbgs() << *s << "\t" << psr::getSrcCodeFromIR(s) << "\n"; } } - } std::string createSlice(string target, set entrypoints, @@ -541,37 +280,49 @@ std::string createSlice(string target, set entrypoints, solver.dumpResults(out); out.close(); cout << "\n"; - process_results(DB,solver,cg); + process_results(DB, solver, cg); return ""; } int main(int argc, const char **argv) { - std::chrono::steady_clock::time_point begin = - std::chrono::steady_clock::now(); + if (argc < 3) { + cout << "Please provide the correct params" << endl; + //TODO USAGE + return -1; + } std::cout << "Current path is " << bofs::current_path() << '\n'; + const auto target = argv[1]; // const auto target = "./targets/w_defects.ll"; // const auto target = "./targets/main_linked.ll"; // const auto target = "./targets/ex.ll"; // const auto target = // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/memcached/memcached.ll"; // const auto target = "./targets/toSlice.ll"; - const auto target = "./targets/min_ex_ssa.ll"; +// const auto target = "./targets/min_ex_ssa.ll"; // const auto target = "./targets/parson_linked.ll"; // const auto target = // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/git/git-linked.ll"; - const auto entryfunction = "main"; +// const auto entryfunction = "main"; // const auto entryfunction = "parse_command"; - const set entrypoints{entryfunction}; + // initializeLogger(true); // std::ifstream in("targets/locations_json.json"); // std::ifstream in("targets/locations_memcached_command.json"); // std::ifstream in("targets/locations_memcached_single.json"); // std::ifstream in("targets/toSlice.json"); - std::ifstream in("targets/min_ex.json"); +// std::ifstream in("targets/min_ex.json"); // std::ifstream in("targets/parson_serialize.json"); + std::ifstream in(argv[2]); json j; in >> j; auto terms = j.get>(); + set entrypoints; + for (int i= 3; i< argc; ++i) { + entrypoints.insert(argv[i]); + cout << argv[i] << endl; + } + std::chrono::steady_clock::time_point begin = + std::chrono::steady_clock::now(); createSlice(target, entrypoints, terms); std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); std::cout << "Time difference = " @@ -597,3 +348,67 @@ int main(int argc, const char **argv) { // Recursive Control dependency backward - branch conditions // branch conditions forward -> include block // Coll Declarations + +std::set NormalFlowFunction::computeTargets(SlicerFact source) { + set facts; + facts.insert(source); + // check logic for conditions + if (!source.isZero()) { + // llvm::dbgs() << "===================\n"; + // llvm::dbgs() << "succ: " <<*curr << "\n"; + // llvm::dbgs() << "Source: "<< *source.getInstruction() << "\n"; + // llvm::dbgs() << curr->getFunction()->getName() << "\n"; + + for (const auto &user : curr->users()) { + // llvm::dbgs() << "USE" << *user << "\n"; + if (user == source.getInstruction()) { + // llvm::dbgs() << "RELEVANT USE" << "\n"; + facts.insert(SlicerFact(source.getLocation(), curr)); + } + } + } + return facts; +} +std::set CallToRetFlowFunction::computeTargets(SlicerFact source) { + set facts; + facts.insert(source); + return facts; +} +template +std::set CallFlowFunction::computeTargets(SlicerFact source) { + set facts; +// facts.insert(source); +#ifdef __INTERPROCEDURAL__ + if (!source.isZero()) { + auto targets = ICF->getStartPointsOf(destMthd); + for (auto target : targets) { + facts.insert(SlicerFact(source.getLocation(), target)); + } + } +#endif + return facts; +} +template +std::set RetFlowFunction::computeTargets(SlicerFact source) { + // llvm::dbgs() << "\n"; + // callSite->dump(); + // calleeMthd->dump(); + // exitStmt->dump(); + // retSite->dump(); + // llvm::dbgs() << "\n"; + set facts; +// facts.insert(source); +#ifdef __INTERPROCEDURAL__ + // for (unsigned int i = 0; i < callSite->getNumOperands(); ++i) { +// const auto op = callSite->getOperand(i); +// if (source.getInstruction() == op) { +// facts.insert(SlicerFact(source.getLocation(), +// getNthFunctionArgument(calleeMthd, i))); +// } +// } +// if (!source.isZero()) { +// facts.insert(SlicerFact(source.getLocation(), exitStmt)); +// } +#endif + return facts; +} diff --git a/tools/module-extractor/slicer.h b/tools/module-extractor/slicer.h new file mode 100644 index 0000000000..2dc0409b54 --- /dev/null +++ b/tools/module-extractor/slicer.h @@ -0,0 +1,216 @@ +#ifndef PHASAR_SLICER_H +#define PHASAR_SLICER_H + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace bofs = boost::filesystem; +using namespace llvm; +using namespace std; +using namespace psr; +using json = nlohmann::json; + +struct Term; +struct Location { + unsigned int line; + unsigned int column; + map meta; + Location() {} + Location(unsigned int line, unsigned int column) + : line(line), column(column) {} +}; +// TODO Memory Leak here +Location *createLocation(unsigned int line, unsigned int column) { + return new Location(line, column); +} + +bool operator<(const Location &l1, const Location &l2) { + return l1.line < l2.line || (l1.line == l2.line && l1.column < l2.column); +} + +void to_json(json &j, const Location &l) { + j = json{{"line", l.line}, {"column", l.column}, {"meta", l.meta}}; +} +void from_json(const json &j, Location &l) { + j.at("line").get_to(l.line); + j.at("column").get_to(l.column); + j.at("meta").get_to(l.meta); +} +ostream &operator<<(ostream &os, const Location &l) { + os << "(" << l.line << "," << l.column << ")"; + return os; +} + +raw_ostream &operator<<(raw_ostream &os, const Location &l) { + os << "(" << l.line << "," << l.column << ")"; + return os; +} + +struct Term { + std::string file; + std::string term; + vector locations; +}; +void to_json(json &j, const Term &t) { + j = json{{"file", t.file}, {"term", t.term}, {"locations", t.locations}}; +} +void from_json(const json &j, Term &t) { + j.at("file").get_to(t.file); + j.at("term").get_to(t.term); + j.at("locations").get_to(t.locations); +} + +ostream &operator<<(ostream &os, const Term &t) { + os << '\'' << t.term << "' in " << t.file << " at ["; + for (auto const &l : t.locations) { + os << l << ","; + } + os << "]"; + return os; +} + +class SlicerFact { +public: + SlicerFact() = default; + SlicerFact(const Location *l, const Value *i) : l(l), i(i) {} + bool operator<(const SlicerFact &rhs) const { return i < rhs.i; } + bool operator==(const SlicerFact &rhs) const { + return i == rhs.i && l == rhs.l; + } + + friend std::ostream &operator<<(std::ostream &os, const SlicerFact &rhs); + friend raw_ostream &operator<<(raw_ostream &os, const SlicerFact &rhs); + [[nodiscard]] bool isZero() const { return i == nullptr; } + const llvm::Value *getInstruction() { return i; } + const Location *getLocation() { return l; } + +private: + const Location *l = nullptr; + const Value *i = nullptr; +}; + +std::ostream &operator<<(std::ostream &os, const SlicerFact &rhs) { + std::string temp; + llvm::raw_string_ostream rso(temp); + if (!rhs.isZero()) { + rhs.i->print(rso, true); + os << temp << " " << *rhs.l; + } else { + os << "Zero"; + } + return os; +} + +raw_ostream &operator<<(raw_ostream &os, const SlicerFact &rhs) { + std::string temp; + llvm::raw_string_ostream rso(temp); + if (!rhs.isZero()) { + rhs.i->print(rso, true); + os << temp << " " << *rhs.l; + } else { + os << "Zero"; + } + return os; +} + +namespace std { +template <> struct hash { + size_t operator()(const SlicerFact &x) const { return 0; } +}; +} // namespace std +template struct SlicerAnalysisDomain : public AnalysisDomain { + using d_t = SlicerFact; + using n_t = const llvm::Instruction *; + using f_t = const llvm::Function *; + using t_t = const llvm::StructType *; + using v_t = const llvm::Value *; + using c_t = ICFG_T; + using i_t = ICFG_T; +}; + +class NormalFlowFunction : public FlowFunction { +public: + NormalFlowFunction(const Instruction *curr, const Instruction *succ) + : curr(curr), succ(succ) {} + + std::set computeTargets(SlicerFact source) override; + +private: + [[maybe_unused]] const Instruction *curr; + [[maybe_unused]] const Instruction *succ; +}; + +template +class CallFlowFunction : public FlowFunction { +public: + CallFlowFunction(const Instruction *callStmt, const Function *destMthd, + const ICFG_T *ICF) + : callStmt(callStmt), destMthd(destMthd), ICF(ICF) {} + + std::set computeTargets(SlicerFact source) override; + +private: + [[maybe_unused]] const Instruction *callStmt; + [[maybe_unused]] const Function *destMthd; + [[maybe_unused]] const ICFG_T *ICF; +}; + +template +class RetFlowFunction : public FlowFunction { +public: + RetFlowFunction(const Instruction *callSite, const Function *calleeMthd, + const Instruction *exitStmt, const Instruction *retSite) + : callSite(callSite), calleeMthd(calleeMthd), exitStmt(exitStmt), + retSite(retSite) {} + std::set computeTargets(SlicerFact source) override; + +private: + [[maybe_unused]] const Instruction *callSite; + [[maybe_unused]] const Function *calleeMthd; + [[maybe_unused]] const Instruction *exitStmt; + + [[maybe_unused]] const Instruction *retSite; +}; + +class CallToRetFlowFunction : public FlowFunction { +public: + CallToRetFlowFunction(const Instruction *callSite, const Instruction *retSite, + set callees) + : callSite(callSite), retSite(retSite), callees(std::move(callees)) {} + + std::set computeTargets(SlicerFact source) override; + +private: + [[maybe_unused]] const Instruction *callSite; + [[maybe_unused]] const Instruction *retSite; + [[maybe_unused]] set callees; +}; + +#endif // PHASAR_SLICER_H From f55d18355f283c32b3801acc9b482a035650aa7a Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 17 Dec 2020 12:44:00 +0100 Subject: [PATCH 11/42] Add targets --- targets/ex.c | 71 ++ targets/gcode.c | 1163 ++++++++++++++++++++++ targets/locations_memcached_command.json | 192 ++++ targets/locations_memcached_single.json | 10 + targets/min_ex.c | 15 +- targets/min_ex.json | 22 + targets/parson_parse.json | 203 ++++ targets/parson_serialize.json | 173 ++++ targets/toSlice.json | 22 + 9 files changed, 1868 insertions(+), 3 deletions(-) create mode 100755 targets/ex.c create mode 100755 targets/gcode.c create mode 100644 targets/locations_memcached_command.json create mode 100644 targets/locations_memcached_single.json create mode 100644 targets/min_ex.json create mode 100644 targets/parson_parse.json create mode 100644 targets/parson_serialize.json diff --git a/targets/ex.c b/targets/ex.c new file mode 100755 index 0000000000..ef1bee780f --- /dev/null +++ b/targets/ex.c @@ -0,0 +1,71 @@ +int parse_unit(char*); +int unit; +void* axis_command; +void* parse_axis_command(char*); +void move_x(void*); +void move_y(void*); +void move_z(void*); +void home_axes(); +#define NULL 0 +#define UNSUPPORTED_COMMAND "" +#define FAIL(error) ""; +#define FOO "" + +void parse_command(char* input) { + axis_command = NULL; + int test2 =0; + if (input[0] == 'G') { + unit = parse_unit(input); // mm or inches + axis_command = parse_axis_command(input); + move_x(axis_command); + move_y(axis_command); +#ifdef Z_ENABLED + move_z(axis_command); +#endif + } else if (input[0] == 'H'){ + coolant(); + } else { FAIL(UNSUPPORTED_COMMAND) } + int test = 0; + test = getTest(); + if (axis_command) { + do_command(test,test2); + } +} + +int getTest(int a, int b){ + int i = 0; + int j = 2; + return b; +} + + +// The Slice should look like this: + + void parse_command(char* input) { + axis_command = NULL; + if (input[0] == 'G') { + axis_command = parse_axis_command(input); + move_x(axis_command); + move_y(axis_command); + } else if (input[0] == 'H'){ + } else { } + if (axis_command) { + FOO; + } + } + + void parse_command(char* input) { + axis_command = NULL; + if (input[0] == 'G') { + unit = parse_unit(input); // mm or inches + axis_command = parse_axis_command(input); + move_x(axis_command); + move_y(axis_command); + #ifdef Z_ENABLED + move_z(axis_command); + #endif + } else if (input[0] == 'H'){ + coolant(); + } else { FAIL(UNSUPPORTED_COMMAND) } + if (axis_command) {} + } \ No newline at end of file diff --git a/targets/gcode.c b/targets/gcode.c new file mode 100755 index 0000000000..2844e2c59c --- /dev/null +++ b/targets/gcode.c @@ -0,0 +1,1163 @@ +/* + gcode.c - rs274/ngc parser. + Part of Grbl + + Copyright (c) 2011-2016 Sungeun K. Jeon for Gnea Research LLC + Copyright (c) 2009-2011 Simen Svale Skogsrud + + Grbl is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Grbl is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Grbl. If not, see . +*/ + +#include "grbl.h" + +// NOTE: Max line number is defined by the g-code standard to be 99999. It seems to be an +// arbitrary value, and some GUIs may require more. So we increased it based on a max safe +// value when converting a float (7.2 digit precision)s to an integer. +#define MAX_LINE_NUMBER 10000000 +#define MAX_TOOL_NUMBER 255 // Limited by max unsigned 8-bit value + +#define AXIS_COMMAND_NONE 0 +#define AXIS_COMMAND_NON_MODAL 1 +#define AXIS_COMMAND_MOTION_MODE 2 +#define AXIS_COMMAND_TOOL_LENGTH_OFFSET 3 // *Undefined but required + +// Declare gc extern struct +parser_state_t gc_state; +parser_block_t gc_block; + +#define FAIL(status) return(status); + + +void gc_init() +{ + memset(&gc_state, 0, sizeof(parser_state_t)); + + // Load default G54 coordinate system. + if (!(settings_read_coord_data(gc_state.modal.coord_select,gc_state.coord_system))) { + report_status_message(STATUS_SETTING_READ_FAIL); + } +} + + +// Sets g-code parser position in mm. Input in steps. Called by the system abort and hard +// limit pull-off routines. +void gc_sync_position() +{ + system_convert_array_steps_to_mpos(gc_state.position,sys_position); +} + + +// Executes one line of 0-terminated G-Code. The line is assumed to contain only uppercase +// characters and signed floating point values (no whitespace). Comments and block delete +// characters have been removed. In this function, all units and positions are converted and +// exported to grbl's internal functions in terms of (mm, mm/min) and absolute machine +// coordinates, respectively. +uint8_t gc_execute_line(char *line) +{ + /* ------------------------------------------------------------------------------------- + STEP 1: Initialize parser block struct and copy current g-code state modes. The parser + updates these modes and commands as the block line is parser and will only be used and + executed after successful error-checking. The parser block struct also contains a block + values struct, word tracking variables, and a non-modal commands tracker for the new + block. This struct contains all of the necessary information to execute the block. */ + + memset(&gc_block, 0, sizeof(parser_block_t)); // Initialize the parser block struct. + memcpy(&gc_block.modal,&gc_state.modal,sizeof(gc_modal_t)); // Copy current modes + + uint8_t axis_command = AXIS_COMMAND_NONE; + uint8_t axis_0, axis_1, axis_linear; + #ifdef A_AXIS_ENABLE + uint8_t axis_a; + #endif + uint8_t coord_select = 0; // Tracks G10 P coordinate selection for execution + + // Initialize bitflag tracking variables for axis indices compatible operations. + uint8_t axis_words = 0; // XYZ tracking + uint8_t ijk_words = 0; // IJK tracking + + // Initialize command and value words and parser flags variables. + uint16_t command_words = 0; // Tracks G and M command words. Also used for modal group violations. + uint16_t value_words = 0; // Tracks value words. + uint8_t gc_parser_flags = GC_PARSER_NONE; + + // Determine if the line is a jogging motion or a normal g-code block. + if (line[0] == '$') { // NOTE: `$J=` already parsed when passed to this function. + // Set G1 and G94 enforced modes to ensure accurate error checks. + gc_parser_flags |= GC_PARSER_JOG_MOTION; + gc_block.modal.motion = MOTION_MODE_LINEAR; + gc_block.modal.feed_rate = FEED_RATE_MODE_UNITS_PER_MIN; + gc_block.values.n = JOG_LINE_NUMBER; // Initialize default line number reported during jog. + } + + /* ------------------------------------------------------------------------------------- + STEP 2: Import all g-code words in the block line. A g-code word is a letter followed by + a number, which can either be a 'G'/'M' command or sets/assigns a command value. Also, + perform initial error-checks for command word modal group violations, for any repeated + words, and for negative values set for the value words F, N, P, T, and S. */ + + uint8_t word_bit; // Bit-value for assigning tracking variables + uint8_t char_counter; + char letter; + float value; + uint8_t int_value = 0; + uint16_t mantissa = 0; + if (gc_parser_flags & GC_PARSER_JOG_MOTION) { char_counter = 3; } // Start parsing after `$J=` + else { char_counter = 0; } + + while (line[char_counter] != 0) { // Loop until no more g-code words in line. + + // Import the next g-code word, expecting a letter followed by a value. Otherwise, error out. + letter = line[char_counter]; + if((letter < 'A') || (letter > 'Z')) { FAIL(STATUS_EXPECTED_COMMAND_LETTER); } // [Expected word letter] + char_counter++; + if (!read_float(line, &char_counter, &value)) { FAIL(STATUS_BAD_NUMBER_FORMAT); } // [Expected word value] + + // Convert values to smaller uint8 significand and mantissa values for parsing this word. + // NOTE: Mantissa is multiplied by 100 to catch non-integer command values. This is more + // accurate than the NIST gcode requirement of x10 when used for commands, but not quite + // accurate enough for value words that require integers to within 0.0001. This should be + // a good enough comprimise and catch most all non-integer errors. To make it compliant, + // we would simply need to change the mantissa to int16, but this add compiled flash space. + // Maybe update this later. + int_value = trunc(value); + mantissa = round(100*(value - int_value)); // Compute mantissa for Gxx.x commands. + // NOTE: Rounding must be used to catch small floating point errors. + + // Check if the g-code word is supported or errors due to modal group violations or has + // been repeated in the g-code block. If ok, update the command or record its value. + switch(letter) { + + /* 'G' and 'M' Command Words: Parse commands and check for modal group violations. + NOTE: Modal group numbers are defined in Table 4 of NIST RS274-NGC v3, pg.20 */ + + case 'G': + // Determine 'G' command and its modal group + switch(int_value) { + case 10: case 28: case 30: case 92: + // Check for G10/28/30/92 being called with G0/1/2/3/38 on same block. + // * G43.1 is also an axis command but is not explicitly defined this way. + if (mantissa == 0) { // Ignore G28.1, G30.1, and G92.1 + if (axis_command) { FAIL(STATUS_GCODE_AXIS_COMMAND_CONFLICT); } // [Axis word/command conflict] + axis_command = AXIS_COMMAND_NON_MODAL; + } + // No break. Continues to next line. + case 4: case 53: + word_bit = MODAL_GROUP_G0; + gc_block.non_modal_command = int_value; + if ((int_value == 28) || (int_value == 30) || (int_value == 92)) { + if (!((mantissa == 0) || (mantissa == 10))) { FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); } + gc_block.non_modal_command += mantissa; + mantissa = 0; // Set to zero to indicate valid non-integer G command. + } + break; + case 0: case 1: case 2: case 3: case 38: + // Check for G0/1/2/3/38 being called with G10/28/30/92 on same block. + // * G43.1 is also an axis command but is not explicitly defined this way. + if (axis_command) { FAIL(STATUS_GCODE_AXIS_COMMAND_CONFLICT); } // [Axis word/command conflict] + axis_command = AXIS_COMMAND_MOTION_MODE; + // No break. Continues to next line. + case 80: + word_bit = MODAL_GROUP_G1; + gc_block.modal.motion = int_value; + if (int_value == 38){ + if (!((mantissa == 20) || (mantissa == 30) || (mantissa == 40) || (mantissa == 50))) { + FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); // [Unsupported G38.x command] + } + gc_block.modal.motion += (mantissa/10)+100; + mantissa = 0; // Set to zero to indicate valid non-integer G command. + } + break; + case 17: case 18: case 19: + word_bit = MODAL_GROUP_G2; + gc_block.modal.plane_select = int_value - 17; + break; + case 90: case 91: + if (mantissa == 0) { + word_bit = MODAL_GROUP_G3; + gc_block.modal.distance = int_value - 90; + } else { + word_bit = MODAL_GROUP_G4; + if ((mantissa != 10) || (int_value == 90)) { FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); } // [G90.1 not supported] + mantissa = 0; // Set to zero to indicate valid non-integer G command. + // Otherwise, arc IJK incremental mode is default. G91.1 does nothing. + } + break; + case 93: case 94: + word_bit = MODAL_GROUP_G5; + gc_block.modal.feed_rate = 94 - int_value; + break; + case 20: case 21: + word_bit = MODAL_GROUP_G6; + gc_block.modal.units = 21 - int_value; + break; + case 40: + word_bit = MODAL_GROUP_G7; + // NOTE: Not required since cutter radius compensation is always disabled. Only here + // to support G40 commands that often appear in g-code program headers to setup defaults. + // gc_block.modal.cutter_comp = CUTTER_COMP_DISABLE; // G40 + break; + case 43: case 49: + word_bit = MODAL_GROUP_G8; + // NOTE: The NIST g-code standard vaguely states that when a tool length offset is changed, + // there cannot be any axis motion or coordinate offsets updated. Meaning G43, G43.1, and G49 + // all are explicit axis commands, regardless if they require axis words or not. + if (axis_command) { FAIL(STATUS_GCODE_AXIS_COMMAND_CONFLICT); } // [Axis word/command conflict] } + axis_command = AXIS_COMMAND_TOOL_LENGTH_OFFSET; + if (int_value == 49) { // G49 + gc_block.modal.tool_length = TOOL_LENGTH_OFFSET_CANCEL; + } else if (mantissa == 10) { // G43.1 + gc_block.modal.tool_length = TOOL_LENGTH_OFFSET_ENABLE_DYNAMIC; + } else { FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); } // [Unsupported G43.x command] + mantissa = 0; // Set to zero to indicate valid non-integer G command. + break; + case 54: case 55: case 56: case 57: case 58: case 59: + // NOTE: G59.x are not supported. (But their int_values would be 60, 61, and 62.) + word_bit = MODAL_GROUP_G12; + gc_block.modal.coord_select = int_value - 54; // Shift to array indexing. + break; + case 61: + word_bit = MODAL_GROUP_G13; + if (mantissa != 0) { FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); } // [G61.1 not supported] + // gc_block.modal.control = CONTROL_MODE_EXACT_PATH; // G61 + break; + default: FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); // [Unsupported G command] + } + if (mantissa > 0) { FAIL(STATUS_GCODE_COMMAND_VALUE_NOT_INTEGER); } // [Unsupported or invalid Gxx.x command] + // Check for more than one command per modal group violations in the current block + // NOTE: Variable 'word_bit' is always assigned, if the command is valid. + if ( bit_istrue(command_words,bit(word_bit)) ) { FAIL(STATUS_GCODE_MODAL_GROUP_VIOLATION); } + command_words |= bit(word_bit); + break; + + case 'M': + + // Determine 'M' command and its modal group + if (mantissa > 0) { FAIL(STATUS_GCODE_COMMAND_VALUE_NOT_INTEGER); } // [No Mxx.x commands] + switch(int_value) { + case 0: case 1: case 2: case 30: + word_bit = MODAL_GROUP_M4; + switch(int_value) { + case 0: gc_block.modal.program_flow = PROGRAM_FLOW_PAUSED; break; // Program pause + case 1: break; // Optional stop not supported. Ignore. + default: gc_block.modal.program_flow = int_value; // Program end and reset + } + break; + case 3: case 4: case 5: + word_bit = MODAL_GROUP_M7; + switch(int_value) { + case 3: gc_block.modal.spindle = SPINDLE_ENABLE_CW; break; + case 4: gc_block.modal.spindle = SPINDLE_ENABLE_CCW; break; + case 5: gc_block.modal.spindle = SPINDLE_DISABLE; break; + } + break; + case 7: case 8: case 9: + word_bit = MODAL_GROUP_M8; + switch(int_value) { + case 7: gc_block.modal.coolant = COOLANT_MIST_ENABLE; break; + case 8: gc_block.modal.coolant = COOLANT_FLOOD_ENABLE; break; + case 9: gc_block.modal.coolant = COOLANT_DISABLE; break; + } + break; + #ifdef ENABLE_PARKING_OVERRIDE_CONTROL + case 56: + word_bit = MODAL_GROUP_M9; + gc_block.modal.override = OVERRIDE_PARKING_MOTION; + break; + #endif + default: FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); // [Unsupported M command] + } + + // Check for more than one command per modal group violations in the current block + // NOTE: Variable 'word_bit' is always assigned, if the command is valid. + if ( bit_istrue(command_words,bit(word_bit)) ) { FAIL(STATUS_GCODE_MODAL_GROUP_VIOLATION); } + command_words |= bit(word_bit); + break; + + // NOTE: All remaining letters assign values. + default: + + /* Non-Command Words: This initial parsing phase only checks for repeats of the remaining + legal g-code words and stores their value. Error-checking is performed later since some + words (I,J,K,L,P,R) have multiple connotations and/or depend on the issued commands. */ + switch(letter){ + // case 'B': // Not supported + // case 'C': // Not supported + // case 'D': // Not supported + case 'F': word_bit = WORD_F; gc_block.values.f = value; break; + // case 'H': // Not supported + case 'I': word_bit = WORD_I; gc_block.values.ijk[X_AXIS] = value; ijk_words |= (1< MAX_TOOL_NUMBER) { FAIL(STATUS_GCODE_MAX_VALUE_EXCEEDED); } + gc_block.values.t = int_value; + break; + case 'X': word_bit = WORD_X; gc_block.values.xyz[X_AXIS] = value; axis_words |= (1< MAX_LINE_NUMBER) { FAIL(STATUS_GCODE_INVALID_LINE_NUMBER); } // [Exceeds max line number] + } + // bit_false(value_words,bit(WORD_N)); // NOTE: Single-meaning value word. Set at end of error-checking. + + // Track for unused words at the end of error-checking. + // NOTE: Single-meaning value words are removed all at once at the end of error-checking, because + // they are always used when present. This was done to save a few bytes of flash. For clarity, the + // single-meaning value words may be removed as they are used. Also, axis words are treated in the + // same way. If there is an explicit/implicit axis command, XYZ words are always used and are + // are removed at the end of error-checking. + + // [1. Comments ]: MSG's NOT SUPPORTED. Comment handling performed by protocol. + + // [2. Set feed rate mode ]: G93 F word missing with G1,G2/3 active, implicitly or explicitly. Feed rate + // is not defined after switching to G94 from G93. + // NOTE: For jogging, ignore prior feed rate mode. Enforce G94 and check for required F word. + if (gc_parser_flags & GC_PARSER_JOG_MOTION) { + if (bit_isfalse(value_words,bit(WORD_F))) { FAIL(STATUS_GCODE_UNDEFINED_FEED_RATE); } + if (gc_block.modal.units == UNITS_MODE_INCHES) { gc_block.values.f *= MM_PER_INCH; } + } else { + if (gc_block.modal.feed_rate == FEED_RATE_MODE_INVERSE_TIME) { // = G93 + // NOTE: G38 can also operate in inverse time, but is undefined as an error. Missing F word check added here. + if (axis_command == AXIS_COMMAND_MOTION_MODE) { + if ((gc_block.modal.motion != MOTION_MODE_NONE) && (gc_block.modal.motion != MOTION_MODE_SEEK)) { + if (bit_isfalse(value_words,bit(WORD_F))) { FAIL(STATUS_GCODE_UNDEFINED_FEED_RATE); } // [F word missing] + } + } + // NOTE: It seems redundant to check for an F word to be passed after switching from G94 to G93. We would + // accomplish the exact same thing if the feed rate value is always reset to zero and undefined after each + // inverse time block, since the commands that use this value already perform undefined checks. This would + // also allow other commands, following this switch, to execute and not error out needlessly. This code is + // combined with the above feed rate mode and the below set feed rate error-checking. + + // [3. Set feed rate ]: F is negative (done.) + // - In inverse time mode: Always implicitly zero the feed rate value before and after block completion. + // NOTE: If in G93 mode or switched into it from G94, just keep F value as initialized zero or passed F word + // value in the block. If no F word is passed with a motion command that requires a feed rate, this will error + // out in the motion modes error-checking. However, if no F word is passed with NO motion command that requires + // a feed rate, we simply move on and the state feed rate value gets updated to zero and remains undefined. + } else { // = G94 + // - In units per mm mode: If F word passed, ensure value is in mm/min, otherwise push last state value. + if (gc_state.modal.feed_rate == FEED_RATE_MODE_UNITS_PER_MIN) { // Last state is also G94 + if (bit_istrue(value_words,bit(WORD_F))) { + if (gc_block.modal.units == UNITS_MODE_INCHES) { gc_block.values.f *= MM_PER_INCH; } + } else { + gc_block.values.f = gc_state.feed_rate; // Push last state feed rate + } + } // Else, switching to G94 from G93, so don't push last state feed rate. Its undefined or the passed F word value. + } + } + // bit_false(value_words,bit(WORD_F)); // NOTE: Single-meaning value word. Set at end of error-checking. + + // [4. Set spindle speed ]: S is negative (done.) + if (bit_isfalse(value_words,bit(WORD_S))) { gc_block.values.s = gc_state.spindle_speed; } + // bit_false(value_words,bit(WORD_S)); // NOTE: Single-meaning value word. Set at end of error-checking. + + // [5. Select tool ]: NOT SUPPORTED. Only tracks value. T is negative (done.) Not an integer. Greater than max tool value. + // bit_false(value_words,bit(WORD_T)); // NOTE: Single-meaning value word. Set at end of error-checking. + + // [6. Change tool ]: N/A + // [7. Spindle control ]: N/A + // [8. Coolant control ]: N/A + // [9. Override control ]: Not supported except for a Grbl-only parking motion override control. + #ifdef ENABLE_PARKING_OVERRIDE_CONTROL + if (bit_istrue(command_words,bit(MODAL_GROUP_M9))) { // Already set as enabled in parser. + if (bit_istrue(value_words,bit(WORD_P))) { + if (gc_block.values.p == 0.0) { gc_block.modal.override = OVERRIDE_DISABLED; } + bit_false(value_words,bit(WORD_P)); + } + } + #endif + + // [10. Dwell ]: P value missing. P is negative (done.) NOTE: See below. + if (gc_block.non_modal_command == NON_MODAL_DWELL) { + if (bit_isfalse(value_words,bit(WORD_P))) { FAIL(STATUS_GCODE_VALUE_WORD_MISSING); } // [P word missing] + bit_false(value_words,bit(WORD_P)); + } + + // [11. Set active plane ]: N/A + switch (gc_block.modal.plane_select) { + case PLANE_SELECT_XY: + axis_0 = X_AXIS; + axis_1 = Y_AXIS; + axis_linear = Z_AXIS; + break; + case PLANE_SELECT_ZX: + axis_0 = Z_AXIS; + axis_1 = X_AXIS; + axis_linear = Y_AXIS; + break; + default: // case PLANE_SELECT_YZ: + axis_0 = Y_AXIS; + axis_1 = Z_AXIS; + axis_linear = X_AXIS; + } + + // [12. Set length units ]: N/A + // Pre-convert XYZ coordinate values to millimeters, if applicable. + uint8_t idx; + if (gc_block.modal.units == UNITS_MODE_INCHES) { + for (idx=0; idx N_COORDINATE_SYSTEM) { FAIL(STATUS_GCODE_UNSUPPORTED_COORD_SYS); } // [Greater than N sys] + if (gc_state.modal.coord_select != gc_block.modal.coord_select) { + if (!(settings_read_coord_data(gc_block.modal.coord_select,block_coord_system))) { FAIL(STATUS_SETTING_READ_FAIL); } + } + } + + // [16. Set path control mode ]: N/A. Only G61. G61.1 and G64 NOT SUPPORTED. + // [17. Set distance mode ]: N/A. Only G91.1. G90.1 NOT SUPPORTED. + // [18. Set retract mode ]: NOT SUPPORTED. + + // [19. Remaining non-modal actions ]: Check go to predefined position, set G10, or set axis offsets. + // NOTE: We need to separate the non-modal commands that are axis word-using (G10/G28/G30/G92), as these + // commands all treat axis words differently. G10 as absolute offsets or computes current position as + // the axis value, G92 similarly to G10 L20, and G28/30 as an intermediate target position that observes + // all the current coordinate system and G92 offsets. + switch (gc_block.non_modal_command) { + case NON_MODAL_SET_COORDINATE_DATA: + // [G10 Errors]: L missing and is not 2 or 20. P word missing. (Negative P value done.) + // [G10 L2 Errors]: R word NOT SUPPORTED. P value not 0 to nCoordSys(max 9). Axis words missing. + // [G10 L20 Errors]: P must be 0 to nCoordSys(max 9). Axis words missing. + if (!axis_words) { FAIL(STATUS_GCODE_NO_AXIS_WORDS) }; // [No axis words] + if (bit_isfalse(value_words,((1< N_COORDINATE_SYSTEM) { FAIL(STATUS_GCODE_UNSUPPORTED_COORD_SYS); } // [Greater than N sys] + if (gc_block.values.l != 20) { + if (gc_block.values.l == 2) { + if (bit_istrue(value_words,bit(WORD_R))) { FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); } // [G10 L2 R not supported] + } else { FAIL(STATUS_GCODE_UNSUPPORTED_COMMAND); } // [Unsupported L] + } + bit_false(value_words,(bit(WORD_L)|bit(WORD_P))); + + // Determine coordinate system to change and try to load from EEPROM. + if (coord_select > 0) { coord_select--; } // Adjust P1-P6 index to EEPROM coordinate data indexing. + else { coord_select = gc_block.modal.coord_select; } // Index P0 as the active coordinate system + + // NOTE: Store parameter data in IJK values. By rule, they are not in use with this command. + if (!settings_read_coord_data(coord_select,gc_block.values.ijk)) { FAIL(STATUS_SETTING_READ_FAIL); } // [EEPROM read fail] + + // Pre-calculate the coordinate data changes. + for (idx=0; idx WCS = MPos - G92 - TLO - WPos + gc_block.values.ijk[idx] = gc_state.position[idx]-gc_state.coord_offset[idx]-gc_block.values.xyz[idx]; + if (idx == TOOL_LENGTH_OFFSET_AXIS) { gc_block.values.ijk[idx] -= gc_state.tool_length_offset; } + } else { + // L2: Update coordinate system axis to programmed value. + gc_block.values.ijk[idx] = gc_block.values.xyz[idx]; + } + } // Else, keep current stored value. + } + break; + case NON_MODAL_SET_COORDINATE_OFFSET: + // [G92 Errors]: No axis words. + if (!axis_words) { FAIL(STATUS_GCODE_NO_AXIS_WORDS); } // [No axis words] + + // Update axes defined only in block. Offsets current system to defined value. Does not update when + // active coordinate system is selected, but is still active unless G92.1 disables it. + for (idx=0; idx G92 = MPos - WCS - TLO - WPos + gc_block.values.xyz[idx] = gc_state.position[idx]-block_coord_system[idx]-gc_block.values.xyz[idx]; + if (idx == TOOL_LENGTH_OFFSET_AXIS) { gc_block.values.xyz[idx] -= gc_state.tool_length_offset; } + } else { + gc_block.values.xyz[idx] = gc_state.coord_offset[idx]; + } + } + break; + + default: + + // At this point, the rest of the explicit axis commands treat the axis values as the traditional + // target position with the coordinate system offsets, G92 offsets, absolute override, and distance + // modes applied. This includes the motion mode commands. We can now pre-compute the target position. + // NOTE: Tool offsets may be appended to these conversions when/if this feature is added. + if (axis_command != AXIS_COMMAND_TOOL_LENGTH_OFFSET ) { // TLO block any axis command. + if (axis_words) { + for (idx=0; idx C -----------------+--------------- T <- [x,y] + | <------ d/2 ---->| + + C - Current position + T - Target position + O - center of circle that pass through both C and T + d - distance from C to T + r - designated radius + h - distance from center of CT to O + + Expanding the equations: + + d -> sqrt(x^2 + y^2) + h -> sqrt(4 * r^2 - x^2 - y^2)/2 + i -> (x - (y * sqrt(4 * r^2 - x^2 - y^2)) / sqrt(x^2 + y^2)) / 2 + j -> (y + (x * sqrt(4 * r^2 - x^2 - y^2)) / sqrt(x^2 + y^2)) / 2 + + Which can be written: + + i -> (x - (y * sqrt(4 * r^2 - x^2 - y^2))/sqrt(x^2 + y^2))/2 + j -> (y + (x * sqrt(4 * r^2 - x^2 - y^2))/sqrt(x^2 + y^2))/2 + + Which we for size and speed reasons optimize to: + + h_x2_div_d = sqrt(4 * r^2 - x^2 - y^2)/sqrt(x^2 + y^2) + i = (x - (y * h_x2_div_d))/2 + j = (y + (x * h_x2_div_d))/2 + */ + + // First, use h_x2_div_d to compute 4*h^2 to check if it is negative or r is smaller + // than d. If so, the sqrt of a negative number is complex and error out. + float h_x2_div_d = 4.0 * gc_block.values.r*gc_block.values.r - x*x - y*y; + + if (h_x2_div_d < 0) { FAIL(STATUS_GCODE_ARC_RADIUS_ERROR); } // [Arc radius error] + + // Finish computing h_x2_div_d. + h_x2_div_d = -sqrt(h_x2_div_d)/hypot_f(x,y); // == -(h * 2 / d) + // Invert the sign of h_x2_div_d if the circle is counter clockwise (see sketch below) + if (gc_block.modal.motion == MOTION_MODE_CCW_ARC) { h_x2_div_d = -h_x2_div_d; } + + /* The counter clockwise circle lies to the left of the target direction. When offset is positive, + the left hand circle will be generated - when it is negative the right hand circle is generated. + + T <-- Target position + + ^ + Clockwise circles with this center | Clockwise circles with this center will have + will have > 180 deg of angular travel | < 180 deg of angular travel, which is a good thing! + \ | / + center of arc when h_x2_div_d is positive -> x <----- | -----> x <- center of arc when h_x2_div_d is negative + | + | + + C <-- Current position + */ + // Negative R is g-code-alese for "I want a circle with more than 180 degrees of travel" (go figure!), + // even though it is advised against ever generating such circles in a single line of g-code. By + // inverting the sign of h_x2_div_d the center of the circles is placed on the opposite side of the line of + // travel and thus we get the unadvisably long arcs as prescribed. + if (gc_block.values.r < 0) { + h_x2_div_d = -h_x2_div_d; + gc_block.values.r = -gc_block.values.r; // Finished with r. Set to positive for mc_arc + } + // Complete the operation by calculating the actual center of the arc + gc_block.values.ijk[axis_0] = 0.5*(x-(y*h_x2_div_d)); + gc_block.values.ijk[axis_1] = 0.5*(y+(x*h_x2_div_d)); + + } else { // Arc Center Format Offset Mode + if (!(ijk_words & (bit(axis_0)|bit(axis_1)))) { FAIL(STATUS_GCODE_NO_OFFSETS_IN_PLANE); } // [No offsets in plane] + bit_false(value_words,(bit(WORD_I)|bit(WORD_J)|bit(WORD_K))); + + // Convert IJK values to proper units. + if (gc_block.modal.units == UNITS_MODE_INCHES) { + for (idx=0; idx 0.005) { + if (delta_r > 0.5) { FAIL(STATUS_GCODE_INVALID_TARGET); } // [Arc definition error] > 0.5mm + if (delta_r > (0.001*gc_block.values.r)) { FAIL(STATUS_GCODE_INVALID_TARGET); } // [Arc definition error] > 0.005mm AND 0.1% radius + } + } + break; + case MOTION_MODE_PROBE_TOWARD_NO_ERROR: case MOTION_MODE_PROBE_AWAY_NO_ERROR: + gc_parser_flags |= GC_PARSER_PROBE_IS_NO_ERROR; // No break intentional. + case MOTION_MODE_PROBE_TOWARD: case MOTION_MODE_PROBE_AWAY: + if ((gc_block.modal.motion == MOTION_MODE_PROBE_AWAY) || + (gc_block.modal.motion == MOTION_MODE_PROBE_AWAY_NO_ERROR)) { gc_parser_flags |= GC_PARSER_PROBE_IS_AWAY; } + // [G38 Errors]: Target is same current. No axis words. Cutter compensation is enabled. Feed rate + // is undefined. Probe is triggered. NOTE: Probe check moved to probe cycle. Instead of returning + // an error, it issues an alarm to prevent further motion to the probe. It's also done there to + // allow the planner buffer to empty and move off the probe trigger before another probing cycle. + if (!axis_words) { FAIL(STATUS_GCODE_NO_AXIS_WORDS); } // [No axis words] + if (isequal_position_vector(gc_state.position, gc_block.values.xyz)) { FAIL(STATUS_GCODE_INVALID_TARGET); } // [Invalid target] + break; + } + } + } + + // [21. Program flow ]: No error checks required. + + // [0. Non-specific error-checks]: Complete unused value words check, i.e. IJK used when in arc + // radius mode, or axis words that aren't used in the block. + if (gc_parser_flags & GC_PARSER_JOG_MOTION) { + // Jogging only uses the F feed rate and XYZ value words. N is valid, but S and T are invalid. + bit_false(value_words,(bit(WORD_N)|bit(WORD_F))); + } else { + bit_false(value_words,(bit(WORD_N)|bit(WORD_F)|bit(WORD_S)|bit(WORD_T))); // Remove single-meaning value words. + } + if (axis_command) { bit_false(value_words,(bit(WORD_X)|bit(WORD_Y)|bit(WORD_Z) + #ifdef A_AXIS_ENABLE + |bit(WORD_A) + #endif + ));} // Remove axis words. + if (value_words) { FAIL(STATUS_GCODE_UNUSED_WORDS); } // [Unused words] + + /* ------------------------------------------------------------------------------------- + STEP 4: EXECUTE!! + Assumes that all error-checking has been completed and no failure modes exist. We just + need to update the state and execute the block according to the order-of-execution. + */ + + // Initialize planner data struct for motion blocks. + plan_line_data_t plan_data; + plan_line_data_t *pl_data = &plan_data; + memset(pl_data,0,sizeof(plan_line_data_t)); // Zero pl_data struct + + // Intercept jog commands and complete error checking for valid jog commands and execute. + // NOTE: G-code parser state is not updated, except the position to ensure sequential jog + // targets are computed correctly. The final parser position after a jog is updated in + // protocol_execute_realtime() when jogging completes or is canceled. + if (gc_parser_flags & GC_PARSER_JOG_MOTION) { + // Only distance and unit modal commands and G53 absolute override command are allowed. + // NOTE: Feed rate word and axis word checks have already been performed in STEP 3. + if (command_words & ~(bit(MODAL_GROUP_G3) | bit(MODAL_GROUP_G6 | bit(MODAL_GROUP_G0))) ) { FAIL(STATUS_INVALID_JOG_COMMAND) }; + if (!(gc_block.non_modal_command == NON_MODAL_ABSOLUTE_OVERRIDE || gc_block.non_modal_command == NON_MODAL_NO_ACTION)) { FAIL(STATUS_INVALID_JOG_COMMAND); } + + // Initialize planner data to current spindle and coolant modal state. + pl_data->spindle_speed = gc_state.spindle_speed; + plan_data.condition = (gc_state.modal.spindle | gc_state.modal.coolant); + + uint8_t status = jog_execute(&plan_data, &gc_block); + if (status == STATUS_OK) { memcpy(gc_state.position, gc_block.values.xyz, sizeof(gc_block.values.xyz)); } + return(status); + } + + // If in laser mode, setup laser power based on current and past parser conditions. + if (bit_istrue(settings.flags,BITFLAG_LASER_MODE)) { + if ( !((gc_block.modal.motion == MOTION_MODE_LINEAR) || (gc_block.modal.motion == MOTION_MODE_CW_ARC) + || (gc_block.modal.motion == MOTION_MODE_CCW_ARC)) ) { + gc_parser_flags |= GC_PARSER_LASER_DISABLE; + } + + // Any motion mode with axis words is allowed to be passed from a spindle speed update. + // NOTE: G1 and G0 without axis words sets axis_command to none. G28/30 are intentionally omitted. + // TODO: Check sync conditions for M3 enabled motions that don't enter the planner. (zero length). + if (axis_words && (axis_command == AXIS_COMMAND_MOTION_MODE)) { + gc_parser_flags |= GC_PARSER_LASER_ISMOTION; + } else { + // M3 constant power laser requires planner syncs to update the laser when changing between + // a G1/2/3 motion mode state and vice versa when there is no motion in the line. + if (gc_state.modal.spindle == SPINDLE_ENABLE_CW) { + if ((gc_state.modal.motion == MOTION_MODE_LINEAR) || (gc_state.modal.motion == MOTION_MODE_CW_ARC) + || (gc_state.modal.motion == MOTION_MODE_CCW_ARC)) { + if (bit_istrue(gc_parser_flags,GC_PARSER_LASER_DISABLE)) { + gc_parser_flags |= GC_PARSER_LASER_FORCE_SYNC; // Change from G1/2/3 motion mode. + } + } else { + // When changing to a G1 motion mode without axis words from a non-G1/2/3 motion mode. + if (bit_isfalse(gc_parser_flags,GC_PARSER_LASER_DISABLE)) { + gc_parser_flags |= GC_PARSER_LASER_FORCE_SYNC; + } + } + } + } + } + + // [0. Non-specific/common error-checks and miscellaneous setup]: + // NOTE: If no line number is present, the value is zero. + gc_state.line_number = gc_block.values.n; + pl_data->line_number = gc_state.line_number; // Record data for planner use. + + // [1. Comments feedback ]: NOT SUPPORTED + + // [2. Set feed rate mode ]: + gc_state.modal.feed_rate = gc_block.modal.feed_rate; + if (gc_state.modal.feed_rate) { pl_data->condition |= PL_COND_FLAG_INVERSE_TIME; } // Set condition flag for planner use. + + // [3. Set feed rate ]: + gc_state.feed_rate = gc_block.values.f; // Always copy this value. See feed rate error-checking. + pl_data->feed_rate = gc_state.feed_rate; // Record data for planner use. + + // [4. Set spindle speed ]: + if ((gc_state.spindle_speed != gc_block.values.s) || bit_istrue(gc_parser_flags,GC_PARSER_LASER_FORCE_SYNC)) { + if (gc_state.modal.spindle != SPINDLE_DISABLE) { + if (bit_isfalse(gc_parser_flags,GC_PARSER_LASER_ISMOTION)) { + if (bit_istrue(gc_parser_flags,GC_PARSER_LASER_DISABLE)) { + spindle_sync(gc_state.modal.spindle, 0.0); + } else { spindle_sync(gc_state.modal.spindle, gc_block.values.s); } + } + } + gc_state.spindle_speed = gc_block.values.s; // Update spindle speed state. + } + // NOTE: Pass zero spindle speed for all restricted laser motions. + if (bit_isfalse(gc_parser_flags,GC_PARSER_LASER_DISABLE)) { + pl_data->spindle_speed = gc_state.spindle_speed; // Record data for planner use. + } // else { pl_data->spindle_speed = 0.0; } // Initialized as zero already. + + // [5. Select tool ]: NOT SUPPORTED. Only tracks tool value. + gc_state.tool = gc_block.values.t; + + // [6. Change tool ]: NOT SUPPORTED + + // [7. Spindle control ]: + if (gc_state.modal.spindle != gc_block.modal.spindle) { + // Update spindle control and apply spindle speed when enabling it in this block. + // NOTE: All spindle state changes are synced, even in laser mode. Also, pl_data, + // rather than gc_state, is used to manage laser state for non-laser motions. + spindle_sync(gc_block.modal.spindle, pl_data->spindle_speed); + gc_state.modal.spindle = gc_block.modal.spindle; + } + pl_data->condition |= gc_state.modal.spindle; // Set condition flag for planner use. + + // [8. Coolant control ]: + if (gc_state.modal.coolant != gc_block.modal.coolant) { + // NOTE: Coolant M-codes are modal. Only one command per line is allowed. But, multiple states + // can exist at the same time, while coolant disable clears all states. + coolant_sync(gc_block.modal.coolant); + if (gc_block.modal.coolant == COOLANT_DISABLE) { gc_state.modal.coolant = COOLANT_DISABLE; } + else { gc_state.modal.coolant |= gc_block.modal.coolant; } + } + pl_data->condition |= gc_state.modal.coolant; // Set condition flag for planner use. + + // [9. Override control ]: NOT SUPPORTED. Always enabled. Except for a Grbl-only parking control. + #ifdef ENABLE_PARKING_OVERRIDE_CONTROL + if (gc_state.modal.override != gc_block.modal.override) { + gc_state.modal.override = gc_block.modal.override; + mc_override_ctrl_update(gc_state.modal.override); + } + #endif + + // [10. Dwell ]: + if (gc_block.non_modal_command == NON_MODAL_DWELL) { mc_dwell(gc_block.values.p); } + + // [11. Set active plane ]: + gc_state.modal.plane_select = gc_block.modal.plane_select; + + // [12. Set length units ]: + gc_state.modal.units = gc_block.modal.units; + + // [13. Cutter radius compensation ]: G41/42 NOT SUPPORTED + // gc_state.modal.cutter_comp = gc_block.modal.cutter_comp; // NOTE: Not needed since always disabled. + + // [14. Cutter length compensation ]: G43.1 and G49 supported. G43 NOT SUPPORTED. + // NOTE: If G43 were supported, its operation wouldn't be any different from G43.1 in terms + // of execution. The error-checking step would simply load the offset value into the correct + // axis of the block XYZ value array. + if (axis_command == AXIS_COMMAND_TOOL_LENGTH_OFFSET ) { // Indicates a change. + gc_state.modal.tool_length = gc_block.modal.tool_length; + if (gc_state.modal.tool_length == TOOL_LENGTH_OFFSET_CANCEL) { // G49 + gc_block.values.xyz[TOOL_LENGTH_OFFSET_AXIS] = 0.0; + } // else G43.1 + if ( gc_state.tool_length_offset != gc_block.values.xyz[TOOL_LENGTH_OFFSET_AXIS] ) { + gc_state.tool_length_offset = gc_block.values.xyz[TOOL_LENGTH_OFFSET_AXIS]; + system_flag_wco_change(); + } + } + + // [15. Coordinate system selection ]: + if (gc_state.modal.coord_select != gc_block.modal.coord_select) { + gc_state.modal.coord_select = gc_block.modal.coord_select; + memcpy(gc_state.coord_system,block_coord_system,N_AXIS*sizeof(float)); + system_flag_wco_change(); + } + + // [16. Set path control mode ]: G61.1/G64 NOT SUPPORTED + // gc_state.modal.control = gc_block.modal.control; // NOTE: Always default. + + // [17. Set distance mode ]: + gc_state.modal.distance = gc_block.modal.distance; + + // [18. Set retract mode ]: NOT SUPPORTED + + // [19. Go to predefined position, Set G10, or Set axis offsets ]: + switch(gc_block.non_modal_command) { + case NON_MODAL_SET_COORDINATE_DATA: + settings_write_coord_data(coord_select,gc_block.values.ijk); + // Update system coordinate system if currently active. + if (gc_state.modal.coord_select == coord_select) { + memcpy(gc_state.coord_system,gc_block.values.ijk,N_AXIS*sizeof(float)); + system_flag_wco_change(); + } + break; + case NON_MODAL_GO_HOME_0: case NON_MODAL_GO_HOME_1: + // Move to intermediate position before going home. Obeys current coordinate system and offsets + // and absolute and incremental modes. + pl_data->condition |= PL_COND_FLAG_RAPID_MOTION; // Set rapid motion condition flag. + if (axis_command) { mc_line(gc_block.values.xyz, pl_data); } + mc_line(gc_block.values.ijk, pl_data); + memcpy(gc_state.position, gc_block.values.ijk, N_AXIS*sizeof(float)); + break; + case NON_MODAL_SET_HOME_0: + settings_write_coord_data(SETTING_INDEX_G28,gc_state.position); + break; + case NON_MODAL_SET_HOME_1: + settings_write_coord_data(SETTING_INDEX_G30,gc_state.position); + break; + case NON_MODAL_SET_COORDINATE_OFFSET: + memcpy(gc_state.coord_offset,gc_block.values.xyz,sizeof(gc_block.values.xyz)); + system_flag_wco_change(); + break; + case NON_MODAL_RESET_COORDINATE_OFFSET: + clear_vector(gc_state.coord_offset); // Disable G92 offsets by zeroing offset vector. + system_flag_wco_change(); + break; + } + + + // [20. Motion modes ]: + // NOTE: Commands G10,G28,G30,G92 lock out and prevent axis words from use in motion modes. + // Enter motion modes only if there are axis words or a motion mode command word in the block. + gc_state.modal.motion = gc_block.modal.motion; + if (gc_state.modal.motion != MOTION_MODE_NONE) { + if (axis_command == AXIS_COMMAND_MOTION_MODE) { + uint8_t gc_update_pos = GC_UPDATE_POS_TARGET; + if (gc_state.modal.motion == MOTION_MODE_LINEAR) { + mc_line(gc_block.values.xyz, pl_data); + } else if (gc_state.modal.motion == MOTION_MODE_SEEK) { + pl_data->condition |= PL_COND_FLAG_RAPID_MOTION; // Set rapid motion condition flag. + mc_line(gc_block.values.xyz, pl_data); + } else if ((gc_state.modal.motion == MOTION_MODE_CW_ARC) || (gc_state.modal.motion == MOTION_MODE_CCW_ARC)) { + mc_arc(gc_block.values.xyz, pl_data, gc_state.position, gc_block.values.ijk, gc_block.values.r, + axis_0, axis_1, axis_linear, + #ifdef A_AXIS_ENABLE + // axis_a, + #endif + bit_istrue(gc_parser_flags,GC_PARSER_ARC_IS_CLOCKWISE)); + } else { + // NOTE: gc_block.values.xyz is returned from mc_probe_cycle with the updated position value. So + // upon a successful probing cycle, the machine position and the returned value should be the same. + #ifndef ALLOW_FEED_OVERRIDE_DURING_PROBE_CYCLES + pl_data->condition |= PL_COND_FLAG_NO_FEED_OVERRIDE; + #endif + gc_update_pos = mc_probe_cycle(gc_block.values.xyz, pl_data, gc_parser_flags); + } + + // As far as the parser is concerned, the position is now == target. In reality the + // motion control system might still be processing the action and the real tool position + // in any intermediate location. + if (gc_update_pos == GC_UPDATE_POS_TARGET) { + memcpy(gc_state.position, gc_block.values.xyz, sizeof(gc_block.values.xyz)); // gc_state.position[] = gc_block.values.xyz[] + } else if (gc_update_pos == GC_UPDATE_POS_SYSTEM) { + gc_sync_position(); // gc_state.position[] = sys_position + } // == GC_UPDATE_POS_NONE + } + } + + // [21. Program flow ]: + // M0,M1,M2,M30: Perform non-running program flow actions. During a program pause, the buffer may + // refill and can only be resumed by the cycle start run-time command. + gc_state.modal.program_flow = gc_block.modal.program_flow; + if (gc_state.modal.program_flow) { + protocol_buffer_synchronize(); // Sync and finish all remaining buffered motions before moving on. + if (gc_state.modal.program_flow == PROGRAM_FLOW_PAUSED) { + if (sys.state != STATE_CHECK_MODE) { + system_set_exec_state_flag(EXEC_FEED_HOLD); // Use feed hold for program pause. + protocol_execute_realtime(); // Execute suspend. + } + } else { // == PROGRAM_FLOW_COMPLETED + // Upon program complete, only a subset of g-codes reset to certain defaults, according to + // LinuxCNC's program end descriptions and testing. Only modal groups [G-code 1,2,3,5,7,12] + // and [M-code 7,8,9] reset to [G1,G17,G90,G94,G40,G54,M5,M9,M48]. The remaining modal groups + // [G-code 4,6,8,10,13,14,15] and [M-code 4,5,6] and the modal words [F,S,T,H] do not reset. + gc_state.modal.motion = MOTION_MODE_LINEAR; + gc_state.modal.plane_select = PLANE_SELECT_XY; + gc_state.modal.distance = DISTANCE_MODE_ABSOLUTE; + gc_state.modal.feed_rate = FEED_RATE_MODE_UNITS_PER_MIN; + // gc_state.modal.cutter_comp = CUTTER_COMP_DISABLE; // Not supported. + gc_state.modal.coord_select = 0; // G54 + gc_state.modal.spindle = SPINDLE_DISABLE; + gc_state.modal.coolant = COOLANT_DISABLE; + #ifdef ENABLE_PARKING_OVERRIDE_CONTROL + #ifdef DEACTIVATE_PARKING_UPON_INIT + gc_state.modal.override = OVERRIDE_DISABLED; + #else + gc_state.modal.override = OVERRIDE_PARKING_MOTION; + #endif + #endif + + #ifdef RESTORE_OVERRIDES_AFTER_PROGRAM_END + sys.f_override = DEFAULT_FEED_OVERRIDE; + sys.r_override = DEFAULT_RAPID_OVERRIDE; + sys.spindle_speed_ovr = DEFAULT_SPINDLE_SPEED_OVERRIDE; + #endif + + // Execute coordinate change and spindle/coolant stop. + if (sys.state != STATE_CHECK_MODE) { + if (!(settings_read_coord_data(gc_state.modal.coord_select,gc_state.coord_system))) { FAIL(STATUS_SETTING_READ_FAIL); } + system_flag_wco_change(); // Set to refresh immediately just in case something altered. + spindle_set_state(SPINDLE_DISABLE,0.0); + coolant_set_state(COOLANT_DISABLE); + } + report_feedback_message(MESSAGE_PROGRAM_END); + } + gc_state.modal.program_flow = PROGRAM_FLOW_RUNNING; // Reset program flow. + } + + // TODO: % to denote start of program. + + return(STATUS_OK); +} + + +/* + Not supported: + + - Canned cycles + - Tool radius compensation + - A,B,C-axes + - Evaluation of expressions + - Variables + - Override control (TBD) + - Tool changes + - Switches + + (*) Indicates optional parameter, enabled through config.h and re-compile + group 0 = {G92.2, G92.3} (Non modal: Cancel and re-enable G92 offsets) + group 1 = {G81 - G89} (Motion modes: Canned cycles) + group 4 = {M1} (Optional stop, ignored) + group 6 = {M6} (Tool change) + group 7 = {G41, G42} cutter radius compensation (G40 is supported) + group 8 = {G43} tool length offset (G43.1/G49 are supported) + group 8 = {M7*} enable mist coolant (* Compile-option) + group 9 = {M48, M49, M56*} enable/disable override switches (* Compile-option) + group 10 = {G98, G99} return mode canned cycles + group 13 = {G61.1, G64} path control mode (G61 is supported) +*/ diff --git a/targets/locations_memcached_command.json b/targets/locations_memcached_command.json new file mode 100644 index 0000000000..b9d4cbfa48 --- /dev/null +++ b/targets/locations_memcached_command.json @@ -0,0 +1,192 @@ +[ + { + "term": "command", + "file": "memcached.h", + "locations": [ + { + "line": 73, + "column": 27, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 187, + "column": 22, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 189, + "column": 22, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 190, + "column": 22, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 431, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 431, + "column": 28, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 704, + "column": 5, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 730, + "column": 5, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 741, + "column": 16, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 746, + "column": 11, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "command", + "file": "memcached.c", + "locations": [ + {"line" : 82, "column" : 21, "meta" : {}}, + {"line" : 83, "column" : 21, "meta" : {}}, + {"line" : 283, "column" : 23, "meta" : {}}, + {"line" : 602, "column" : 31, "meta" : {}}, + {"line" : 684, "column" : 21, "meta" : {}}, + {"line" : 690, "column" : 33, "meta" : {}}, + {"line" : 693, "column" : 33, "meta" : {}}, + {"line" : 699, "column" : 29, "meta" : {}}, + {"line" : 702, "column" : 29, "meta" : {}}, + {"line" : 1226, "column" : 28, "meta" : {}}, + {"line" : 1491, "column" : 4, "meta" : {}}, + {"line" : 2244, "column" : 25, "meta" : {}}, + {"line" : 2547, "column" : 21, "meta" : {}}, + {"line" : 2555, "column" : 21, "meta" : {}}, + {"line" : 2559, "column" : 21, "meta" : {}}, + {"line" : 2567, "column" : 24, "meta" : {}}, + {"line" : 2570, "column" : 21, "meta" : {}}, + {"line" : 2577, "column" : 25, "meta" : {}}, + {"line" : 2580, "column" : 25, "meta" : {}}, + {"line" : 2625, "column" : 64, "meta" : {}}, + {"line" : 3333, "column" : 29, "meta" : {}}, + {"line" : 4077, "column" : 65, "meta" : {}}, + {"line" : 4091, "column" : 71, "meta" : {}}, + {"line" : 4107, "column" : 62, "meta" : {}}, + {"line" : 4123, "column" : 57, "meta" : {}}, + {"line" : 4125, "column" : 53, "meta" : {}}, + {"line" : 4173, "column" : 80, "meta" : {}}, + {"line" : 5007, "column" : 42, "meta" : {}}, + {"line" : 5035, "column" : 33, "meta" : {}}, + {"line" : 5036, "column" : 34, "meta" : {}}, + {"line" : 5090, "column" : 35, "meta" : {}}, + {"line" : 5091, "column" : 31, "meta" : {}} + ] + }, + { + "term": "cmd", + "file": "memcached.h", + "locations": [ + { + "line": 187, + "column": 5, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 190, + "column": 5, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 691, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 741, + "column": 11, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "memcached.c", + "locations": [ + {"line" : 310, "column" : 28, "meta" : {}}, + {"line" : 322, "column" : 21, "meta" : {}}, + {"line" : 340, "column" : 38, "meta" : {}}, + {"line" : 343, "column" : 41, "meta" : {}}, + {"line" : 350, "column" : 29, "meta" : {}}, + {"line" : 351, "column" : 33, "meta" : {}}, + {"line" : 356, "column" : 74, "meta" : {}}, + {"line" : 503, "column" : 33, "meta" : {}}, + {"line" : 504, "column" : 34, "meta" : {}}, + {"line" : 539, "column" : 25, "meta" : {}}, + {"line" : 610, "column" : 62, "meta" : {}}, + {"line" : 645, "column" : 8, "meta" : {}}, + {"line" : 654, "column" : 13, "meta" : {}}, + {"line" : 931, "column" : 50, "meta" : {}}, + {"line" : 934, "column" : 52, "meta" : {}}, + {"line" : 1202, "column" : 36, "meta" : {}}, + {"line" : 1222, "column" : 32, "meta" : {}}, + {"line" : 1361, "column" : 19, "meta" : {}}, + {"line" : 1362, "column" : 8, "meta" : {}}, + {"line" : 1371, "column" : 38, "meta" : {}}, + {"line" : 1553, "column" : 60, "meta" : {}}, + {"line" : 1661, "column" : 36, "meta" : {}}, + {"line" : 1735, "column" : 18, "meta" : {}}, + {"line" : 1736, "column" : 18, "meta" : {}}, + {"line" : 1737, "column" : 18, "meta" : {}}, + {"line" : 1738, "column" : 18, "meta" : {}}, + {"line" : 1739, "column" : 18, "meta" : {}}, + {"line" : 1765, "column" : 23, "meta" : {}}, + {"line" : 2104, "column" : 53, "meta" : {}}, + {"line" : 2105, "column" : 55, "meta" : {}}, + {"line" : 3281, "column" : 49, "meta" : {}}, + {"line" : 3320, "column" : 46, "meta" : {}}, + {"line" : 3331, "column" : 25, "meta" : {}}, + {"line" : 3345, "column" : 23, "meta" : {}}, + {"line" : 3351, "column" : 23, "meta" : {}}, + {"line" : 3468, "column" : 44, "meta" : {}}, + {"line" : 3534, "column" : 48, "meta" : {}}, + {"line" : 4394, "column" : 17, "meta" : {}} + ] + } +] \ No newline at end of file diff --git a/targets/locations_memcached_single.json b/targets/locations_memcached_single.json new file mode 100644 index 0000000000..2fa50a59f7 --- /dev/null +++ b/targets/locations_memcached_single.json @@ -0,0 +1,10 @@ +[ + { + "term": "cmd", + "file": "memcached.c", + "locations": [ + {"line" : 1362, "column" : 8, "meta" : {}} + + ] + } +] \ No newline at end of file diff --git a/targets/min_ex.c b/targets/min_ex.c index 20aff4030b..77872ac37e 100644 --- a/targets/min_ex.c +++ b/targets/min_ex.c @@ -1,3 +1,12 @@ -// -// Created by torun on 02.11.20. -// +int foo(int i,int k,int j){ + int a = i *k; + int b = i *j; + int c = k *j; + return a * b *c; +} +int main() { + int A = foo(0, 1, 2); + int B = foo(5, 3, 4); + printf("%d\n", A); + printf("%d\n", 8); +} \ No newline at end of file diff --git a/targets/min_ex.json b/targets/min_ex.json new file mode 100644 index 0000000000..0afe9ffdb2 --- /dev/null +++ b/targets/min_ex.json @@ -0,0 +1,22 @@ +[ + { + "term": "foo", + "file": "min_ex.c", + "locations": [ + { + "line": 8, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 9, + "column": 13, + "meta": { + "Kind": "Identifier" + } + } + ] + } +] \ No newline at end of file diff --git a/targets/parson_parse.json b/targets/parson_parse.json new file mode 100644 index 0000000000..38b0dc0b3d --- /dev/null +++ b/targets/parson_parse.json @@ -0,0 +1,203 @@ +[ + { + "term": "parse", + "file": "parson.c", + "locations": [ + { + "line": 113, + "column": 15, + "meta": {} + }, + { + "line": 141, + "column": 21, + "meta": {} + }, + { + "line": 144, + "column": 21, + "meta": {} + }, + { + "line": 145, + "column": 21, + "meta": {} + }, + { + "line": 146, + "column": 21, + "meta": {} + }, + { + "line": 147, + "column": 21, + "meta": {} + }, + { + "line": 148, + "column": 21, + "meta": {} + }, + { + "line": 149, + "column": 21, + "meta": {} + }, + { + "line": 150, + "column": 21, + "meta": {} + }, + { + "line": 185, + "column": 12, + "meta": {} + }, + { + "line": 579, + "column": 12, + "meta": {} + }, + { + "line": 581, + "column": 9, + "meta": {} + }, + { + "line": 585, + "column": 5, + "meta": {} + }, + { + "line": 586, + "column": 10, + "meta": {} + }, + { + "line": 606, + "column": 9, + "meta": {} + }, + { + "line": 607, + "column": 14, + "meta": {} + }, + { + "line": 651, + "column": 25, + "meta": {} + }, + { + "line": 696, + "column": 21, + "meta": {} + }, + { + "line": 703, + "column": 20, + "meta": {} + }, + { + "line": 705, + "column": 20, + "meta": {} + }, + { + "line": 707, + "column": 20, + "meta": {} + }, + { + "line": 713, + "column": 20, + "meta": {} + }, + { + "line": 715, + "column": 20, + "meta": {} + }, + { + "line": 721, + "column": 21, + "meta": {} + }, + { + "line": 755, + "column": 21, + "meta": {} + }, + { + "line": 785, + "column": 21, + "meta": {} + }, + { + "line": 804, + "column": 27, + "meta": {} + }, + { + "line": 831, + "column": 21, + "meta": {} + }, + { + "line": 846, + "column": 21, + "meta": {} + }, + { + "line": 859, + "column": 21, + "meta": {} + }, + { + "line": 871, + "column": 21, + "meta": {} + }, + { + "line": 1117, + "column": 19, + "meta": {} + }, + { + "line": 1123, + "column": 25, + "meta": {} + }, + { + "line": 1128, + "column": 19, + "meta": {} + }, + { + "line": 1134, + "column": 25, + "meta": {} + }, + { + "line": 1139, + "column": 19, + "meta": {} + }, + { + "line": 1146, + "column": 12, + "meta": {} + }, + { + "line": 1149, + "column": 19, + "meta": {} + }, + { + "line": 1159, + "column": 14, + "meta": {} + } + ] + } +] diff --git a/targets/parson_serialize.json b/targets/parson_serialize.json new file mode 100644 index 0000000000..507bbb30e7 --- /dev/null +++ b/targets/parson_serialize.json @@ -0,0 +1,173 @@ +[ + { + "term": "serialize", + "file": "parson.c", + "locations": [ + { + "line": 153, + "column": 20, + "meta": {} + }, + { + "line": 154, + "column": 20, + "meta": {} + }, + { + "line": 891, + "column": 17, + "meta": {} + }, + { + "line": 915, + "column": 32, + "meta": {} + }, + { + "line": 951, + "column": 32, + "meta": {} + }, + { + "line": 964, + "column": 32, + "meta": {} + }, + { + "line": 990, + "column": 28, + "meta": {} + }, + { + "line": 1030, + "column": 17, + "meta": {} + }, + { + "line": 1541, + "column": 20, + "meta": {} + }, + { + "line": 1545, + "column": 18, + "meta": {} + }, + { + "line": 1551, + "column": 20, + "meta": {} + }, + { + "line": 1558, + "column": 18, + "meta": {} + }, + { + "line": 1561, + "column": 11, + "meta": {} + }, + { + "line": 1562, + "column": 9, + "meta": {} + }, + { + "line": 1567, + "column": 19, + "meta": {} + }, + { + "line": 1570, + "column": 15, + "meta": {} + }, + { + "line": 1576, + "column": 15, + "meta": {} + }, + { + "line": 1580, + "column": 13, + "meta": {} + }, + { + "line": 1591, + "column": 33, + "meta": {} + }, + { + "line": 1593, + "column": 19, + "meta": {} + }, + { + "line": 1601, + "column": 20, + "meta": {} + }, + { + "line": 1605, + "column": 18, + "meta": {} + }, + { + "line": 1611, + "column": 20, + "meta": {} + }, + { + "line": 1618, + "column": 18, + "meta": {} + }, + { + "line": 1621, + "column": 11, + "meta": {} + }, + { + "line": 1622, + "column": 9, + "meta": {} + }, + { + "line": 1627, + "column": 19, + "meta": {} + }, + { + "line": 1630, + "column": 15, + "meta": {} + }, + { + "line": 1636, + "column": 15, + "meta": {} + }, + { + "line": 1640, + "column": 13, + "meta": {} + }, + { + "line": 1651, + "column": 33, + "meta": {} + }, + { + "line": 1653, + "column": 19, + "meta": {} + }, + { + "line": 1659, + "column": 16, + "meta": {} + } + ] + } +] \ No newline at end of file diff --git a/targets/toSlice.json b/targets/toSlice.json index e69de29bb2..cf3c06723e 100644 --- a/targets/toSlice.json +++ b/targets/toSlice.json @@ -0,0 +1,22 @@ +[ + { + "term": "foo", + "file": "slicingEx.c", + "locations": [ + { + "line": 71, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 72, + "column": 13, + "meta": { + "Kind": "Identifier" + } + } + ] + } +] \ No newline at end of file From 6ed6e6886e892b80e93d3bd9d5563a12e1369027 Mon Sep 17 00:00:00 2001 From: Patrick Date: Mon, 18 Jan 2021 20:08:29 +0100 Subject: [PATCH 12/42] Fix for GEP --- tools/module-extractor/slicer.cpp | 308 +++++++++++++++++++++++++----- tools/module-extractor/slicer.h | 16 +- 2 files changed, 268 insertions(+), 56 deletions(-) diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index 7701d38e8a..930d27dc76 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -1,5 +1,6 @@ #include "slicer.h" - +#include +#include #define __INTERPROCEDURAL__ struct SliceComparator { @@ -11,18 +12,21 @@ struct SliceComparator { }; template -class IFDSSLicer : public IFDSTabulationProblem> { +class IFDSSlicer : public IFDSTabulationProblem> { public: - IFDSSLicer(ICFG_T *icfg, const LLVMTypeHierarchy *th, const ProjectIRDB *irdb, + IFDSSlicer(ICFG_T *icfg, const LLVMTypeHierarchy *th, const ProjectIRDB *irdb, LLVMPointsToInfo *PT, map> sc, const std::vector *terms, const std::set &entrypoints) : IFDSTabulationProblem>(irdb, th, icfg, PT), terms(terms), slicingCriteria(std::move(sc)), entrypoints(entrypoints) { + } private: - SlicerFact createZeroValue() const override { return SlicerFact(); } + [[nodiscard]] SlicerFact createZeroValue() const override { + return SlicerFact(); + } shared_ptr> getNormalFlowFunction(const Instruction *curr, const Instruction *succ) override { @@ -48,7 +52,7 @@ class IFDSSLicer : public IFDSTabulationProblem> { return make_shared(callSite, retSite, callees); } map> initialSeeds() override { - for (auto &entrypoint : entrypoints) { + for (const auto &entrypoint : entrypoints) { const Instruction *i; if (std::is_same::value) { i = &this->ICF->getFunction(entrypoint)->back().back(); @@ -81,11 +85,13 @@ class IFDSSLicer : public IFDSTabulationProblem> { void printDataFlowFact(std::ostream &os, SlicerFact d) const override { os << d; } - void printFunction(std::ostream &os, const Function *m) const override {} + void printFunction(std::ostream &os, const Function *m) const override { + os << psr::llvmIRToString(m) << endl; + } shared_ptr> - getSummaryFlowFunction(const Instruction *curr, - const Function *destFun) override { + getSummaryFlowFunction([[maybe_unused]] const Instruction *curr, + [[maybe_unused]] const Function *destFun) override { return nullptr; } @@ -94,12 +100,31 @@ class IFDSSLicer : public IFDSTabulationProblem> { const std::set &entrypoints; }; +void copy_files(map> &file_lines) { + for (const auto &file : file_lines) { + std::ifstream in(file.first); + std::ofstream out( + "out/" + file.first.substr(file.first.find_last_of("/"), string::npos)); + std::string line; + int line_nr = 1; + while (std::getline(in, line)) { + if (file.second.find(line_nr) != file.second.end()) { + out << line << endl; + } else { + out << endl; + } + line_nr++; + } + out.close(); + } +} + template void process_results(ProjectIRDB &DB, IFDSSolver &solver, LLVMBasedBackwardsICFG &cg) { map> slice_instruction; llvm::dbgs() << "SOLVING DONE\n"; - for (const auto module : DB.getAllModules()) { + for (auto *const module : DB.getAllModules()) { for (auto &function : module->functions()) { llvm::dbgs() << "\n\n\n" << function.getName() << "\n\n\n"; bool isUsed = false; @@ -129,25 +154,15 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, if (ins && ins->getFunction() == &function) { slice_instruction[&function].insert(extractedInstruction); const auto *blockExit = ins->getParent()->getTerminator(); - const auto instStr = psr::llvmIRToString(blockExit); - const auto exitSrc = psr::getSrcCodeFromIR(blockExit); - if (auto *dl = blockExit->getDebugLoc().get()) { - llvm::dbgs() << "ADDING " << llvmIRToString(blockExit) << " " - << exitSrc << "\n"; - // slices[&function].insert(std::make_tuple( - // exitSrc, - // *createLocation(dl->getLine(), - // dl->getColumn()), blockExit)); - } else { - cerr << "DID NOT FIND LOCATION" - << "\n"; - // slice.insert(std::make_tuple(exitSrc, - // *createLocation(0, 0), - // blockExit)); - } - + slice_instruction[&function].insert(blockExit); isUsed = true; } + // else { + // if (auto arg = + // dyn_cast(fact.getInstruction())) { + // slice_instruction[&function].insert(arg); + // } + // } } else { } } @@ -194,17 +209,64 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, << "\n" << "\n" << "\n"; + map> file_lines; for (auto &p : slice_instruction) { llvm::dbgs() << p.first->getName() << "\t" << p.second.size() << "\n"; - for (auto &s : p.second) { - llvm::dbgs() << *s << "\t" << psr::getSrcCodeFromIR(s) << "\n"; + auto file = psr::getFilePathFromIR(p.first); + auto first = true; + // file_lines[file] + // file_lines[file] = set (); + for (const auto &s : p.second) { + if (first) { + auto line = psr::getLineFromIR(p.first); + llvm::dbgs() << psr::getSrcCodeFromIR(p.first) << "\t" << line << "\n"; + file_lines[file].insert(line); + first = false; + } + + if (auto phi = dyn_cast(s)) { + llvm::dbgs() << "GOT PHI\t" << *s << "\n"; + } else if (auto debug_call = dyn_cast(s)) { + if (auto debug_info = + dyn_cast(debug_call->getOperand(1))) { + if (auto localVariable = + dyn_cast(debug_info->getMetadata())) { + file_lines[file].insert(localVariable->getLine()); + } + } + + } else { + auto line = psr::getLineFromIR(s); + auto src = psr::getSrcCodeFromIR(s); + llvm::dbgs() << *s << "\t" << src << "\t" << line << "\n"; + file_lines[file].insert(line); + if (auto inst = dyn_cast(s)) { + if (inst->getDebugLoc()) { + if (auto scope = + dyn_cast(inst->getDebugLoc().getScope())) { + file_lines[file].insert(scope->getLine()); + } + } + if (auto br = dyn_cast(inst)) { + if (br->getNumOperands() == 1 && src.find("}") == src.npos) { + file_lines[file].insert(line + 1); + } + } + if (auto ret = dyn_cast(inst)) { + if (src.find("}") == src.npos) { + file_lines[file].insert(line + 1); + } + } + } + } } } + copy_files(file_lines); } -std::string createSlice(string target, set entrypoints, - vector terms) { - ProjectIRDB DB({target}, IRDBOptions::WPA); +std::string createSlice(string target, const set &entrypoints, + const vector &terms) { + ProjectIRDB DB({std::move(target)}, IRDBOptions::WPA); initializeLogger(false); LLVMTypeHierarchy th(DB); LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, set(entrypoints), @@ -236,8 +298,8 @@ std::string createSlice(string target, set entrypoints, } } } - for (auto &t : terms) { - for (auto &l : t.locations) { + for (const auto &t : terms) { + for (const auto &l : t.locations) { // check same statement if (l.line == line && t.file == file) { facts.insert(SlicerFact(&l, &i)); @@ -266,9 +328,9 @@ std::string createSlice(string target, set entrypoints, } } } - IFDSSLicer slicer(&cg, &th, &DB, &PT, sc, &terms, + IFDSSlicer slicer(&cg, &th, &DB, &PT, sc, &terms, entrypoints); - IFDSSLicer slicer2(&fcg, &th, &DB, &PT, sc, &terms, + IFDSSlicer slicer2(&fcg, &th, &DB, &PT, sc, &terms, entrypoints); IFDSSolver solver(slicer); solver.solve(); @@ -285,9 +347,22 @@ std::string createSlice(string target, set entrypoints, } int main(int argc, const char **argv) { + const rlim_t kStackSize = 128 * 1024 * 1024; // min stack size = 128 MB + struct rlimit rl; + int result; + result = getrlimit(RLIMIT_STACK, &rl); + if (result == 0) { + if (rl.rlim_cur < kStackSize) { + rl.rlim_cur = kStackSize; + result = setrlimit(RLIMIT_STACK, &rl); + if (result != 0) { + fprintf(stderr, "setrlimit returned result = %d\n", result); + } + } + } if (argc < 3) { cout << "Please provide the correct params" << endl; - //TODO USAGE + // TODO USAGE return -1; } std::cout << "Current path is " << bofs::current_path() << '\n'; @@ -298,26 +373,25 @@ int main(int argc, const char **argv) { // const auto target = // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/memcached/memcached.ll"; // const auto target = "./targets/toSlice.ll"; -// const auto target = "./targets/min_ex_ssa.ll"; + // const auto target = "./targets/min_ex_ssa.ll"; // const auto target = "./targets/parson_linked.ll"; // const auto target = // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/git/git-linked.ll"; -// const auto entryfunction = "main"; + // const auto entryfunction = "main"; // const auto entryfunction = "parse_command"; - // initializeLogger(true); // std::ifstream in("targets/locations_json.json"); // std::ifstream in("targets/locations_memcached_command.json"); // std::ifstream in("targets/locations_memcached_single.json"); // std::ifstream in("targets/toSlice.json"); -// std::ifstream in("targets/min_ex.json"); + // std::ifstream in("targets/min_ex.json"); // std::ifstream in("targets/parson_serialize.json"); std::ifstream in(argv[2]); json j; in >> j; auto terms = j.get>(); set entrypoints; - for (int i= 3; i< argc; ++i) { + for (int i = 3; i < argc; ++i) { entrypoints.insert(argv[i]); cout << argv[i] << endl; } @@ -342,6 +416,19 @@ int main(int argc, const char **argv) { << "Time difference = " << std::chrono::duration_cast(end - begin).count() << "[m]" << std::endl; + // compare_slice( + // "/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/the_silver_searcher/src/ignore.c", + // "/media/Volume/Arbeit/Arbeit/code/phasar/out/ignore.c"); + compare_slice( + "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson/parse.c", + "/media/Volume/Arbeit/Arbeit/code/phasar/out/parson.c"); + // compare_slice( + // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson/serialize.c", + // "/media/Volume/Arbeit/Arbeit/code/phasar/out/parson.c"); + // compare_slice("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/inotify-tools/libinotifytools/src/stats.c", + // "/media/Volume/Arbeit/Arbeit/code/phasar/out/inotifytools.c"); + // compare_slice("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/fping/src/stats.c", + // "/media/Volume/Arbeit/Arbeit/code/phasar/out/fping.c"); return 0; } // TODO: @@ -351,31 +438,105 @@ int main(int argc, const char **argv) { std::set NormalFlowFunction::computeTargets(SlicerFact source) { set facts; - facts.insert(source); + // check logic for conditions - if (!source.isZero()) { - // llvm::dbgs() << "===================\n"; - // llvm::dbgs() << "succ: " <<*curr << "\n"; - // llvm::dbgs() << "Source: "<< *source.getInstruction() << "\n"; - // llvm::dbgs() << curr->getFunction()->getName() << "\n"; + if (!source.isZero()) { + facts.insert(source); + llvm::dbgs() << "===================\n"; + llvm::dbgs() << "curr: " << *curr << "\n"; + llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; + llvm::dbgs() << curr->getFunction()->getName() << "\n"; + auto fun = curr->getFunction()->getName(); + if (fun == "bar" && isa(curr)) { + llvm::dbgs() << ""; + } + if (auto load = dyn_cast(curr)) { + llvm::dbgs() << ""; + } + // if (auto gep = dyn_cast(curr)) { + // llvm::dbgs() << "GEP"; + // } + // if (auto store = dyn_cast(curr)) { + // llvm::dbgs() << "Store"; + // } for (const auto &user : curr->users()) { - // llvm::dbgs() << "USE" << *user << "\n"; + // llvm::dbgs() << "USE" << *user << "\n"; if (user == source.getInstruction()) { - // llvm::dbgs() << "RELEVANT USE" << "\n"; + // llvm::dbgs() << "RELEVANT USE" << + // "\n"; facts.insert(SlicerFact(source.getLocation(), curr)); } } + if (auto gep = dyn_cast(curr)){ + if (auto ins = dyn_cast(source.getInstruction())) { + for (unsigned int i = 0; i < gep->getNumOperands(); ++i) { + for (unsigned int j = 0; j < ins->getNumOperands(); ++j) { + if (gep->getOperand(i) == ins->getOperand(j)) { + facts.insert(SlicerFact(source.getLocation(),gep)); + } + } + } + } + } + if (const auto *br = dyn_cast(curr)) { + for (unsigned int i = 0; i < br->getNumOperands(); ++i) { + if (auto *target = dyn_cast(br->getOperand(i))) { + if (source.getInstruction() == &target->front()) { + facts.insert(SlicerFact(source.getLocation(), curr)); + // This is the phi instruction after the branch if we are the target + // we are relevant + } + } + } + } } return facts; } std::set CallToRetFlowFunction::computeTargets(SlicerFact source) { set facts; - facts.insert(source); + if (!source.isZero() && source.getInstruction() != callSite) { + llvm::dbgs() << "===================\n"; + llvm::dbgs() << "curr: " << *callSite << "\n"; + llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; + llvm::dbgs() << callSite->getFunction()->getName() << "\n"; + auto fun = callSite->getFunction()->getName(); + if (fun == "bar" && isa(source.getInstruction())) { + llvm::dbgs() << ""; + } + if (auto ins = dyn_cast(source.getInstruction())) { + for (unsigned int j = 0; j < ins->getNumOperands(); ++j) { + auto op2 = ins->getOperand(j); + for (unsigned int i = 0; i < callSite->getNumOperands(); ++i) { + auto op1 = callSite->getOperand(i); + if (auto metadata = dyn_cast(op1)) { + if (auto local = + dyn_cast(metadata->getMetadata())) { + if (local->getValue() == ins->getOperand(j)) { + facts.insert(SlicerFact(source.getLocation(), callSite)); + } + } + } + if (callSite->getOperand(i) == ins->getOperand(j)) { + facts.insert(SlicerFact(source.getLocation(), callSite)); + } + } + } + } + for (const auto &user : callSite->users()) { + if (user == source.getInstruction()) { + // llvm::dbgs() << "RELEVANT USE" << + // "\n"; + facts.insert(SlicerFact(source.getLocation(), callSite)); + } + } + facts.insert(source); + } return facts; } template -std::set CallFlowFunction::computeTargets(SlicerFact source) { +std::set +CallFlowFunction::computeTargets(SlicerFact source) { set facts; // facts.insert(source); #ifdef __INTERPROCEDURAL__ @@ -389,7 +550,8 @@ std::set CallFlowFunction::computeTargets(SlicerFact source) return facts; } template -std::set RetFlowFunction::computeTargets(SlicerFact source) { +std::set +RetFlowFunction::computeTargets(SlicerFact source) { // llvm::dbgs() << "\n"; // callSite->dump(); // calleeMthd->dump(); @@ -412,3 +574,45 @@ std::set RetFlowFunction::computeTargets(SlicerFact source) #endif return facts; } + +void compare_slice(string original, string module) { + set original_lines; + set module_lines; + vector intersection; + vector missing; + vector additional; + { + std::ifstream in(original); + std::string line; + int line_nr = 1; + while (std::getline(in, line)) { + original_lines.insert(line); + } + } + { + std::ifstream in(module); + std::string line; + while (std::getline(in, line)) { + module_lines.insert(line); + } + } + set_intersection(original_lines.begin(), original_lines.end(), + module_lines.begin(), module_lines.end(), + std::inserter(intersection, intersection.begin())); + set_difference(original_lines.begin(), original_lines.end(), + module_lines.begin(), module_lines.end(), + std::inserter(missing, missing.begin())); + set_difference(module_lines.begin(), module_lines.end(), + original_lines.begin(), original_lines.end(), + + std::inserter(additional, additional.begin())); + cout << "Intersection Size is\t:" << intersection.size() << endl; + cout << "Additional Size is:\t" << additional.size() << endl; + cout << "Missing Size is:\t" << missing.size() << endl; + cout << "\n\n\n"; + for (auto m : missing) { + cout << m << "\n"; + } +} + +// TODO Check for opening brace \ No newline at end of file diff --git a/tools/module-extractor/slicer.h b/tools/module-extractor/slicer.h index 2dc0409b54..4740353551 100644 --- a/tools/module-extractor/slicer.h +++ b/tools/module-extractor/slicer.h @@ -95,7 +95,12 @@ ostream &operator<<(ostream &os, const Term &t) { os << "]"; return os; } - +class SlicerFact; +namespace std { +template <> struct hash { + size_t operator()(const SlicerFact &x) const; +}; +} class SlicerFact { public: SlicerFact() = default; @@ -111,6 +116,7 @@ class SlicerFact { const llvm::Value *getInstruction() { return i; } const Location *getLocation() { return l; } + friend size_t std::hash::operator()(const SlicerFact &x) const; private: const Location *l = nullptr; const Value *i = nullptr; @@ -140,10 +146,9 @@ raw_ostream &operator<<(raw_ostream &os, const SlicerFact &rhs) { return os; } + namespace std { -template <> struct hash { - size_t operator()(const SlicerFact &x) const { return 0; } -}; + size_t hash::operator()(const SlicerFact &x) const { return llvm::hash_value(x.i); } } // namespace std template struct SlicerAnalysisDomain : public AnalysisDomain { using d_t = SlicerFact; @@ -213,4 +218,7 @@ class CallToRetFlowFunction : public FlowFunction { [[maybe_unused]] set callees; }; + +void compare_slice(string original, string module); #endif // PHASAR_SLICER_H + From d384d838d28463370c69e37158efd1f95d7c0290 Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 19 Feb 2021 10:07:43 +0100 Subject: [PATCH 13/42] Fix some switch statements --- include/phasar/Utils/LLVMIRToSrc.h | 2 +- lib/Utils/LLVMIRToSrc.cpp | 37 +++++++ tools/module-extractor/slicer.cpp | 157 ++++++++++++++++++++++------- 3 files changed, 159 insertions(+), 37 deletions(-) diff --git a/include/phasar/Utils/LLVMIRToSrc.h b/include/phasar/Utils/LLVMIRToSrc.h index f67a0fa514..9334d16927 100644 --- a/include/phasar/Utils/LLVMIRToSrc.h +++ b/include/phasar/Utils/LLVMIRToSrc.h @@ -46,7 +46,7 @@ unsigned int getColumnFromIR(const llvm::Value *V); std::string getSrcCodeFromIR(const llvm::Value *V); std::string getModuleIDFromIR(const llvm::Value *V); - +unsigned int getFunctionHeaderLines(const llvm::Value *V); } // namespace psr #endif diff --git a/lib/Utils/LLVMIRToSrc.cpp b/lib/Utils/LLVMIRToSrc.cpp index da13cda3f0..56f4b4028b 100644 --- a/lib/Utils/LLVMIRToSrc.cpp +++ b/lib/Utils/LLVMIRToSrc.cpp @@ -206,6 +206,43 @@ unsigned int getColumnFromIR(const llvm::Value *V) { return 0; } +unsigned int getFunctionHeaderLines(const llvm::Value *V) { + unsigned int LineNr = getLineFromIR(V); + if (LineNr > 0) { + boost::filesystem::path Path(getFilePathFromIR(V)); + if (boost::filesystem::exists(Path) && + !boost::filesystem::is_directory(Path)) { + std::ifstream Ifs(Path.string(), std::ios::binary); + if (Ifs.is_open()) { + Ifs.seekg(std::ios::beg); + std::string SrcLine; + for (unsigned int I = 0; I < LineNr - 1; ++I) { + Ifs.ignore(std::numeric_limits::max(), '\n'); + } + while (true) { + std::getline(Ifs, SrcLine); + std::string res; + // TODO + unsigned int i = 0; // columnNr -1; + while (true) { + auto current_char = SrcLine[i]; + res.push_back(current_char); + i++; + if (current_char == '{') { + return LineNr; + } + if (SrcLine.length() == i) { + break; + } + } + LineNr++; + // boost::algorithm::trim(SrcLine); + } + } + } + } +} + std::string getSrcCodeFromIR(const llvm::Value *V) { unsigned int LineNr = getLineFromIR(V); unsigned int columnNr = getColumnFromIR(V); diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index 930d27dc76..aa2e03e50c 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -117,6 +117,24 @@ void copy_files(map> &file_lines) { } out.close(); } + if (true) { + std::ofstream out("out/command.c"); + for (const auto &file : file_lines) { + std::ifstream in("out/" + file.first.substr(file.first.find_last_of("/"), string::npos)); + std::string line; + bool last_empty = false; + while (std::getline(in, line)) { + if (line.empty()) { + if (!last_empty) out << endl; + last_empty = true; + } else { + last_empty = false; + out << line << endl; + } + } + } + out.close(); + } } template @@ -126,9 +144,13 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, llvm::dbgs() << "SOLVING DONE\n"; for (auto *const module : DB.getAllModules()) { for (auto &function : module->functions()) { - llvm::dbgs() << "\n\n\n" << function.getName() << "\n\n\n"; + auto fun_name = function.getName(); + llvm::dbgs() << "\n\n\n" << fun_name << "\n\n\n"; bool isUsed = false; for (auto &bb : function) { + if (fun_name == "parse_value") { + llvm::dbgs() << ""; + } for (const auto &i : bb) { llvm::dbgs() << "========================================================\n"; @@ -211,7 +233,7 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, << "\n"; map> file_lines; for (auto &p : slice_instruction) { - llvm::dbgs() << p.first->getName() << "\t" << p.second.size() << "\n"; + llvm::dbgs()<<"F:\t" << p.first->getName() << "\t" << p.second.size() << "\n"; auto file = psr::getFilePathFromIR(p.first); auto first = true; // file_lines[file] @@ -220,7 +242,10 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, if (first) { auto line = psr::getLineFromIR(p.first); llvm::dbgs() << psr::getSrcCodeFromIR(p.first) << "\t" << line << "\n"; - file_lines[file].insert(line); + auto end_line = psr::getFunctionHeaderLines(p.first); + for (unsigned int l = line; l <= end_line; ++ l) { + file_lines[file].insert(l); + } first = false; } @@ -234,13 +259,20 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, file_lines[file].insert(localVariable->getLine()); } } - } else { auto line = psr::getLineFromIR(s); auto src = psr::getSrcCodeFromIR(s); + llvm::dbgs() << *s << "\t" << src << "\t" << line << "\n"; file_lines[file].insert(line); if (auto inst = dyn_cast(s)) { + for (unsigned int i =0; i < inst->getNumOperands();++i){ + if (auto global = dyn_cast(inst->getOperand(i))){ + auto g_line = psr::getLineFromIR(global); + auto g_src = psr::getSrcCodeFromIR(global); + file_lines[file].insert(g_line); + } + } if (inst->getDebugLoc()) { if (auto scope = dyn_cast(inst->getDebugLoc().getScope())) { @@ -248,12 +280,12 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, } } if (auto br = dyn_cast(inst)) { - if (br->getNumOperands() == 1 && src.find("}") == src.npos) { + if (br->isUnconditional() && src.find("}") == src.npos && line != 0) { file_lines[file].insert(line + 1); } } if (auto ret = dyn_cast(inst)) { - if (src.find("}") == src.npos) { + if (src.find("}") == src.npos&& line != 0) { file_lines[file].insert(line + 1); } } @@ -268,6 +300,7 @@ std::string createSlice(string target, const set &entrypoints, const vector &terms) { ProjectIRDB DB({std::move(target)}, IRDBOptions::WPA); initializeLogger(false); +// initializeLogger(true); LLVMTypeHierarchy th(DB); LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, set(entrypoints), &th); @@ -277,6 +310,7 @@ std::string createSlice(string target, const set &entrypoints, for (auto *module : DB.getAllModules()) { for (auto &function : module->functions()) { for (auto &bb : function) { + auto sub = function.getSubprogram(); for (const auto &i : bb) { set facts; if (auto *debuglog = i.getDebugLoc().get()) { @@ -301,7 +335,9 @@ std::string createSlice(string target, const set &entrypoints, for (const auto &t : terms) { for (const auto &l : t.locations) { // check same statement - if (l.line == line && t.file == file) { + if (t.file == file && + (l.line == line || + l.line == sub->getLine())) { facts.insert(SlicerFact(&l, &i)); if (const auto *branch = dyn_cast(&i)) { if (branch->isConditional()) { @@ -416,19 +452,22 @@ int main(int argc, const char **argv) { << "Time difference = " << std::chrono::duration_cast(end - begin).count() << "[m]" << std::endl; - // compare_slice( - // "/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/the_silver_searcher/src/ignore.c", - // "/media/Volume/Arbeit/Arbeit/code/phasar/out/ignore.c"); - compare_slice( - "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson/parse.c", - "/media/Volume/Arbeit/Arbeit/code/phasar/out/parson.c"); - // compare_slice( - // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson/serialize.c", - // "/media/Volume/Arbeit/Arbeit/code/phasar/out/parson.c"); - // compare_slice("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/inotify-tools/libinotifytools/src/stats.c", - // "/media/Volume/Arbeit/Arbeit/code/phasar/out/inotifytools.c"); - // compare_slice("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/fping/src/stats.c", - // "/media/Volume/Arbeit/Arbeit/code/phasar/out/fping.c"); +// compare_slice( +// "/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/memcached/command.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/command.c"); +// compare_slice( +// "/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/the_silver_searcher/src/ignore.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/ignore.c"); +// compare_slice( +// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson/parse.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/parson.c"); +// compare_slice( +// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson/serialize.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/parson.c"); +// compare_slice("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/inotify-tools/libinotifytools/src/stats.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/inotifytools.c"); +// compare_slice("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/fping/src/stats.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/fping.c"); return 0; } // TODO: @@ -442,18 +481,27 @@ std::set NormalFlowFunction::computeTargets(SlicerFact source) { // check logic for conditions if (!source.isZero()) { - facts.insert(source); + if (auto branch = dyn_cast(source.getInstruction())) { + if (!branch->isUnconditional()) { + facts.insert(source); + } + } else if (auto call = dyn_cast(source.getInstruction())) { + // Don't propagate further + } else { + facts.insert(source); + } llvm::dbgs() << "===================\n"; llvm::dbgs() << "curr: " << *curr << "\n"; llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; + llvm::dbgs() << "src: " << psr::getSrcCodeFromIR(curr) << "\n"; llvm::dbgs() << curr->getFunction()->getName() << "\n"; auto fun = curr->getFunction()->getName(); - if (fun == "bar" && isa(curr)) { - llvm::dbgs() << ""; - } - if (auto load = dyn_cast(curr)) { + if (fun == "parse_value") { llvm::dbgs() << ""; } +// if (auto load = dyn_cast(curr)) { +// llvm::dbgs() << ""; +// } // if (auto gep = dyn_cast(curr)) { // llvm::dbgs() << "GEP"; // } @@ -468,6 +516,17 @@ std::set NormalFlowFunction::computeTargets(SlicerFact source) { facts.insert(SlicerFact(source.getLocation(), curr)); } } + if (auto load = dyn_cast(curr) ) { + if (auto ins = dyn_cast(source.getInstruction())) { + for (unsigned int i = 0; i < load->getNumOperands(); ++i) { + for (unsigned int j = 0; j < ins->getNumOperands(); ++j) { + if (load->getOperand(i) == ins->getOperand(j)) { + facts.insert(SlicerFact(source.getLocation(),load)); + } + } + } + } + } if (auto gep = dyn_cast(curr)){ if (auto ins = dyn_cast(source.getInstruction())) { for (unsigned int i = 0; i < gep->getNumOperands(); ++i) { @@ -496,17 +555,17 @@ std::set NormalFlowFunction::computeTargets(SlicerFact source) { std::set CallToRetFlowFunction::computeTargets(SlicerFact source) { set facts; if (!source.isZero() && source.getInstruction() != callSite) { - llvm::dbgs() << "===================\n"; - llvm::dbgs() << "curr: " << *callSite << "\n"; - llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; - llvm::dbgs() << callSite->getFunction()->getName() << "\n"; +// llvm::dbgs() << "===================\n"; +// llvm::dbgs() << "curr: " << *callSite << "\n"; +// llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; +// llvm::dbgs() << callSite->getFunction()->getName() << "\n"; auto fun = callSite->getFunction()->getName(); - if (fun == "bar" && isa(source.getInstruction())) { - llvm::dbgs() << ""; - } +// if (fun == "process_string") { +// llvm::dbgs() << ""; +// } if (auto ins = dyn_cast(source.getInstruction())) { for (unsigned int j = 0; j < ins->getNumOperands(); ++j) { - auto op2 = ins->getOperand(j); +// auto op2 = ins->getOperand(j); for (unsigned int i = 0; i < callSite->getNumOperands(); ++i) { auto op1 = callSite->getOperand(i); if (auto metadata = dyn_cast(op1)) { @@ -541,9 +600,30 @@ CallFlowFunction::computeTargets(SlicerFact source) { // facts.insert(source); #ifdef __INTERPROCEDURAL__ if (!source.isZero()) { +// llvm::dbgs() << "===================\n"; +// llvm::dbgs() << "curr: " << *callStmt << "\n"; +// llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; +// llvm::dbgs() << callStmt->getFunction()->getName() << "\n"; +// +// if (callStmt->getFunction()->getName() == "inotifytools_get_stat_by_filename") { +// llvm::dbgs() << ""; +// } auto targets = ICF->getStartPointsOf(destMthd); - for (auto target : targets) { - facts.insert(SlicerFact(source.getLocation(), target)); + bool isRelevant = false; + // source is global or uses the return value + if (auto inst = dyn_cast(source.getInstruction())) { + for (unsigned int i = 0; i < inst->getNumOperands();++i) { + auto op = inst->getOperand(i); + isRelevant |= isa(op); + } + for (const auto& use : callStmt->uses()) { + isRelevant |= (use.getUser() == inst); + } + } + if (isRelevant) { + for (auto target : targets) { + facts.insert(SlicerFact(source.getLocation(), target)); + } } } #endif @@ -606,13 +686,18 @@ void compare_slice(string original, string module) { original_lines.begin(), original_lines.end(), std::inserter(additional, additional.begin())); - cout << "Intersection Size is\t:" << intersection.size() << endl; + cout << "Original Size is:\t" << original_lines.size() << endl; + cout << "Intersection Size is:\t" << intersection.size() << endl; cout << "Additional Size is:\t" << additional.size() << endl; cout << "Missing Size is:\t" << missing.size() << endl; cout << "\n\n\n"; for (auto m : missing) { cout << m << "\n"; } + cout << "====================================\n"; + for (auto a : additional) { + cout << a << "\n"; + } } // TODO Check for opening brace \ No newline at end of file From 63a2d502556a7c6e64e8e531eaa92b7c7cd84dd1 Mon Sep 17 00:00:00 2001 From: Patrick Date: Thu, 1 Apr 2021 16:07:39 +0200 Subject: [PATCH 14/42] Use clang to find correct Switch statements --- .gitignore | 4 +- CMakeLists.txt | 2 +- targets/locations_fping_stats.json | 197 + targets/locations_inotify_stats.json | 287 ++ targets/locations_inotify_stats_nostat.json | 176 + targets/locations_memcached.json | 3570 +++++++++++++++++ targets/locations_silver_searcher_ignore.json | 288 ++ targets/switch-ex.o.json | 1 + targets/switch.json | 22 + targets/switch_ex.c | 18 + tools/module-extractor/CMakeLists.txt | 1 + tools/module-extractor/slicer.cpp | 136 +- tools/module-extractor/slicer.h | 7 + unittests/Slicer/CMakeLists.txt | 7 + unittests/Slicer/SliceITCW_defectsTest.cpp | 29 +- 15 files changed, 4727 insertions(+), 18 deletions(-) create mode 100644 targets/locations_fping_stats.json create mode 100644 targets/locations_inotify_stats.json create mode 100644 targets/locations_inotify_stats_nostat.json create mode 100644 targets/locations_memcached.json create mode 100644 targets/locations_silver_searcher_ignore.json create mode 100644 targets/switch-ex.o.json create mode 100644 targets/switch.json create mode 100644 targets/switch_ex.c diff --git a/.gitignore b/.gitignore index 336508980f..0212c64a9c 100644 --- a/.gitignore +++ b/.gitignore @@ -141,4 +141,6 @@ unittests/PhasarLLVM/Pointer/LLVMTypeHierarchyTest unittests/Utils/LLVMShorthandsTest unittests/Utils/PAMMTest -cmake-build*/* \ No newline at end of file +cmake-build*/* + +out \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a3a0f2ff1..dbcb9f2d33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required (VERSION 3.0) - +cmake_policy(SET CMP0060 NEW) # Check if we build within the llvm source tree if (DEFINED LLVM_MAIN_SRC_DIR) set(PHASAR_IN_TREE 1) diff --git a/targets/locations_fping_stats.json b/targets/locations_fping_stats.json new file mode 100644 index 0000000000..b1148770ae --- /dev/null +++ b/targets/locations_fping_stats.json @@ -0,0 +1,197 @@ +[ + { + "term": "stats", + "file": "fping.c", + "locations": [ + { + "line": 328, + "column": 11, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 352, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 377, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 380, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 395, + "column": 6, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 531, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 705, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 955, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 956, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1315, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1548, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1551, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1554, + "column": 9, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1555, + "column": 22, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1577, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1588, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1774, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1785, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2011, + "column": 4, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2017, + "column": 6, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2063, + "column": 4, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2066, + "column": 6, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2358, + "column": 15, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2386, + "column": 15, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2387, + "column": 5, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2388, + "column": 22, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2939, + "column": 28, + "meta": { + "Kind": "Identifier" + } + } + ] + } +] \ No newline at end of file diff --git a/targets/locations_inotify_stats.json b/targets/locations_inotify_stats.json new file mode 100644 index 0000000000..4604637ed0 --- /dev/null +++ b/targets/locations_inotify_stats.json @@ -0,0 +1,287 @@ +[ + { + "term": "stats", + "file": "inotifytools.c", + "locations": [ + { + "line": 144, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 156, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 294, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 333, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 351, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 425, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 428, + "column": 27, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 429, + "column": 14, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 430, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 448, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1137, + "column": 15, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1138, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1410, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1508, + "column": 28, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1511, + "column": 38, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1517, + "column": 58, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1521, + "column": 15, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1533, + "column": 28, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1540, + "column": 30, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1544, + "column": 15, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1581, + "column": 28, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1584, + "column": 40, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1590, + "column": 52, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1597, + "column": 22, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "stat", + "file": "inotifytools.c", + "locations": [ + { + "line": 1335, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1342, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1352, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1353, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1472, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1520, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1525, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1543, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1597, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1599, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1621, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1623, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1629, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2124, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2125, + "column": 20, + "meta": { + "Kind": "Identifier" + } + } + ] + } +] \ No newline at end of file diff --git a/targets/locations_inotify_stats_nostat.json b/targets/locations_inotify_stats_nostat.json new file mode 100644 index 0000000000..9e2b062992 --- /dev/null +++ b/targets/locations_inotify_stats_nostat.json @@ -0,0 +1,176 @@ +[ + { + "term": "stats", + "file": "inotifytools.c", + "locations": [ + { + "line": 144, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 156, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 294, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 333, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 351, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 425, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 428, + "column": 27, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 429, + "column": 14, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 430, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 448, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1137, + "column": 15, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1138, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1410, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1508, + "column": 28, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1511, + "column": 38, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1517, + "column": 58, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1521, + "column": 15, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1533, + "column": 28, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1540, + "column": 30, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1544, + "column": 15, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1581, + "column": 28, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1584, + "column": 40, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1590, + "column": 52, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1597, + "column": 22, + "meta": { + "Kind": "Identifier" + } + } + ] + } +] \ No newline at end of file diff --git a/targets/locations_memcached.json b/targets/locations_memcached.json new file mode 100644 index 0000000000..6c6cafe432 --- /dev/null +++ b/targets/locations_memcached.json @@ -0,0 +1,3570 @@ +[ + { + "term": "cmd", + "file": "slabs.c", + "locations": [ + { + "line": 584, + "column": 33, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 585, + "column": 72, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "cmd", + "file": "proto_text.c", + "locations": [ + { + "line": 24, + "column": 26, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 30, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 35, + "column": 53, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 77, + "column": 18, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 109, + "column": 38, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 113, + "column": 54, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 348, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 353, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 407, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 557, + "column": 44, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 561, + "column": 42, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 575, + "column": 44, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 579, + "column": 42, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 786, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 791, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1226, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1230, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1234, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1238, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1242, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1409, + "column": 8, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1551, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1774, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1877, + "column": 8, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1909, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1917, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2122, + "column": 46, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2303, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2559, + "column": 51, + "meta": { + "Kind": "Comment" + } + } + ] + }, + { + "term": "cmd", + "file": "proto_bin.c", + "locations": [ + { + "line": 32, + "column": 15, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 101, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 107, + "column": 17, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 244, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 245, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 253, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 293, + "column": 39, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 339, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 362, + "column": 53, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 381, + "column": 29, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 385, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 423, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 425, + "column": 22, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 444, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 457, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 458, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 459, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 460, + "column": 33, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 461, + "column": 33, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 462, + "column": 35, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 487, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 490, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 503, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 549, + "column": 40, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 571, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 574, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 586, + "column": 40, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 623, + "column": 18, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 624, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 636, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 638, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 797, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 822, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 836, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 852, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 862, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 874, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 875, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 909, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 911, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 914, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 917, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 920, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 923, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 926, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 929, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 932, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 935, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 938, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 941, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 944, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 947, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 950, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 956, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1093, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1095, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1126, + "column": 29, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1133, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1149, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1151, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1154, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1157, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1164, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1219, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1221, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1224, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1274, + "column": 28, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "cmd", + "file": "logger.c", + "locations": [ + { + "line": 188, + "column": 17, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 193, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 196, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 197, + "column": 9, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 201, + "column": 65, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 203, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 679, + "column": 9, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "cmd", + "file": "memcached.c", + "locations": [ + { + "line": 310, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 322, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 340, + "column": 38, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 343, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 350, + "column": 29, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 351, + "column": 33, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 356, + "column": 74, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 503, + "column": 33, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 504, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 539, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 610, + "column": 62, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 645, + "column": 8, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 654, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 931, + "column": 50, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 934, + "column": 52, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1202, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1222, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1361, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1362, + "column": 8, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1371, + "column": 38, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1553, + "column": 60, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1661, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1735, + "column": 18, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1736, + "column": 18, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1737, + "column": 18, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1738, + "column": 18, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1739, + "column": 18, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1765, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2104, + "column": 53, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2105, + "column": 55, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 3281, + "column": 49, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 3320, + "column": 46, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 3331, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 3345, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 3351, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 3468, + "column": 44, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 3534, + "column": 48, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 4394, + "column": 17, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "command", + "file": "proto_bin.c", + "locations": [ + { + "line": 24, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 51, + "column": 14, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 118, + "column": 22, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 185, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 242, + "column": 34, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 550, + "column": 30, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 602, + "column": 14, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 609, + "column": 38, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 618, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 620, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 622, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 623, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 645, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 821, + "column": 40, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 881, + "column": 26, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "command", + "file": "linux_priv.c", + "locations": [ + { + "line": 162, + "column": 27, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "command", + "file": "proto_text.c", + "locations": [ + { + "line": 15, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 23, + "column": 59, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 189, + "column": 17, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 197, + "column": 20, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 201, + "column": 10, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 202, + "column": 9, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 205, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 208, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 211, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 213, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 249, + "column": 14, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 259, + "column": 36, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 281, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 330, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 336, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 346, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 361, + "column": 14, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 408, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 425, + "column": 62, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 463, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 475, + "column": 30, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 595, + "column": 19, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 599, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 627, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 638, + "column": 62, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 641, + "column": 16, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 645, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 649, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 660, + "column": 20, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 664, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 671, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 675, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 683, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 685, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 695, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 701, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 713, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 716, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 720, + "column": 43, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 722, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 749, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 753, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 843, + "column": 58, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 852, + "column": 58, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 862, + "column": 58, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 914, + "column": 58, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 963, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 974, + "column": 38, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 982, + "column": 44, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 990, + "column": 29, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 994, + "column": 44, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 997, + "column": 29, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1221, + "column": 22, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1261, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1268, + "column": 38, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1278, + "column": 44, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1286, + "column": 44, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1329, + "column": 37, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1432, + "column": 29, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1440, + "column": 38, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1450, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1557, + "column": 33, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1562, + "column": 38, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1580, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1600, + "column": 37, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1785, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1800, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1810, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1819, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1825, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1881, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1893, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1925, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1936, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1975, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1989, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2000, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2030, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2038, + "column": 41, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2047, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2057, + "column": 26, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2071, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2087, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2104, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2111, + "column": 43, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2116, + "column": 52, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2155, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2182, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2239, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2296, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2341, + "column": 29, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2345, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2350, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2351, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2359, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2370, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2395, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2401, + "column": 33, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2439, + "column": 56, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2473, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2482, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2514, + "column": 35, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2526, + "column": 20, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2529, + "column": 22, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2530, + "column": 39, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2534, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2545, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2548, + "column": 12, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2558, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2559, + "column": 12, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2560, + "column": 32, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2566, + "column": 13, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2571, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2574, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2577, + "column": 33, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2581, + "column": 23, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2585, + "column": 37, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2588, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2595, + "column": 24, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2599, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2602, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2605, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2608, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2616, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2622, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2625, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2634, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2642, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2646, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2654, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2662, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2666, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2674, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2683, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2686, + "column": 33, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2690, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2695, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2699, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2703, + "column": 22, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2707, + "column": 29, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2711, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2715, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2718, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2720, + "column": 8, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2722, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2727, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2731, + "column": 31, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "command", + "file": "memcached.c", + "locations": [ + { + "line": 82, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 83, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 283, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 602, + "column": 31, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 684, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 690, + "column": 33, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 693, + "column": 33, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 699, + "column": 29, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 702, + "column": 29, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1226, + "column": 28, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 1491, + "column": 4, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2244, + "column": 25, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 2547, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2555, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2559, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2567, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2570, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2577, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2580, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2625, + "column": 64, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 3333, + "column": 29, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 4077, + "column": 65, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 4091, + "column": 71, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 4107, + "column": 62, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 4123, + "column": 57, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 4125, + "column": 53, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 4173, + "column": 80, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 5007, + "column": 42, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 5035, + "column": 33, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 5036, + "column": 34, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 5090, + "column": 35, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 5091, + "column": 31, + "meta": { + "Kind": "Comment" + } + } + ] + }, + { + "term": "COMMAND", + "file": "proto_bin.c", + "locations": [ + { + "line": 184, + "column": 47, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 387, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 391, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 395, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 399, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 403, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 496, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 499, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 580, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 582, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 695, + "column": 61, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 724, + "column": 61, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 889, + "column": 61, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 900, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1065, + "column": 65, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1306, + "column": 23, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "COMMAND", + "file": "proto_text.c", + "locations": [ + { + "line": 79, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 83, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 87, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 91, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 95, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 99, + "column": 21, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 158, + "column": 9, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 159, + "column": 12, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 509, + "column": 29, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 581, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 660, + "column": 40, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1244, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1492, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2010, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2121, + "column": 18, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2360, + "column": 39, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2394, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2402, + "column": 39, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2429, + "column": 46, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2470, + "column": 46, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2479, + "column": 46, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2493, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2499, + "column": 35, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2542, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2561, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2567, + "column": 25, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2568, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2569, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2597, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2600, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2603, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2606, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2613, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2617, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2620, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2623, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2630, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2631, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2639, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2643, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2651, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2659, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2663, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2671, + "column": 27, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2679, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2680, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2685, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2692, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2697, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2701, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2705, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2709, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2713, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2716, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2721, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2725, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2730, + "column": 30, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "COMMAND", + "file": "memcached.c", + "locations": [ + { + "line": 962, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2474, + "column": 19, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 2481, + "column": 19, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "CMD", + "file": "proto_text.c", + "locations": [ + { + "line": 2123, + "column": 29, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "CMD", + "file": "proto_bin.c", + "locations": [ + { + "line": 244, + "column": 50, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 245, + "column": 35, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 293, + "column": 62, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 339, + "column": 43, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 457, + "column": 51, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 458, + "column": 51, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 459, + "column": 51, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 460, + "column": 56, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 461, + "column": 56, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 462, + "column": 58, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 503, + "column": 39, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 798, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 804, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 817, + "column": 27, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 863, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 864, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 865, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 866, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 910, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 911, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 913, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 914, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 916, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 917, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 919, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 920, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 922, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 923, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 925, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 926, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 928, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 929, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 931, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 932, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 934, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 935, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 937, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 938, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 940, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 941, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 943, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 944, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 946, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 947, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 949, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 950, + "column": 34, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 957, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 964, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 971, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 980, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 981, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 982, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 989, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 990, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 991, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 992, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 999, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1006, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1007, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1014, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1015, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1022, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1029, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1038, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1045, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1046, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1053, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1054, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1055, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1056, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1057, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1093, + "column": 39, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1095, + "column": 46, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1133, + "column": 39, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1150, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1153, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1156, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1220, + "column": 30, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 1223, + "column": 30, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "CMD", + "file": "memcached.c", + "locations": [ + { + "line": 1259, + "column": 44, + "meta": { + "Kind": "Identifier" + } + } + ] + }, + { + "term": "CMD", + "file": "logger.c", + "locations": [ + { + "line": 49, + "column": 19, + "meta": { + "Kind": "Identifier" + } + } + ] + } +] \ No newline at end of file diff --git a/targets/locations_silver_searcher_ignore.json b/targets/locations_silver_searcher_ignore.json new file mode 100644 index 0000000000..b54d249b54 --- /dev/null +++ b/targets/locations_silver_searcher_ignore.json @@ -0,0 +1,288 @@ +[ + { + "term": "ignore", + "file": "src/ignore.c", + "locations": [ + { + "line": 9, + "column": 11, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 23, + "column": 1, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 25, + "column": 52, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 27, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 33, + "column": 64, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 34, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 35, + "column": 7, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 36, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 38, + "column": 9, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 42, + "column": 14, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 46, + "column": 1, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 47, + "column": 5, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 83, + "column": 14, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 99, + "column": 10, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 116, + "column": 53, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 168, + "column": 22, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 169, + "column": 26, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 172, + "column": 23, + "meta": { + "Kind": "Comment" + } + }, + { + "line": 173, + "column": 11, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 177, + "column": 29, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 180, + "column": 24, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 193, + "column": 13, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 209, + "column": 17, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 217, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 233, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 240, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 250, + "column": 40, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 260, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 270, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 279, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 299, + "column": 32, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 300, + "column": 45, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 306, + "column": 28, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 311, + "column": 23, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 315, + "column": 48, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 347, + "column": 11, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 353, + "column": 36, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 358, + "column": 18, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 371, + "column": 31, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 381, + "column": 23, + "meta": { + "Kind": "Identifier" + } + } + ] + } +] \ No newline at end of file diff --git a/targets/switch-ex.o.json b/targets/switch-ex.o.json new file mode 100644 index 0000000000..030b2ba4ba --- /dev/null +++ b/targets/switch-ex.o.json @@ -0,0 +1 @@ +{ "directory": "/media/Volume/Arbeit/Arbeit/code/phasar/targets", "file": "../targets/switch_ex.c", "output": "../targets/switch_ex.ll", "arguments": ["/home/torun/code/llvm-project/install/bin/clang-10", "-xc", "../targets/switch_ex.c", "-o", "../targets/switch_ex.ll", "-S", "-emit-llvm", "-g", "--target=x86_64-unknown-linux-gnu"]}, diff --git a/targets/switch.json b/targets/switch.json new file mode 100644 index 0000000000..eac2a2afd9 --- /dev/null +++ b/targets/switch.json @@ -0,0 +1,22 @@ +[ + { + "term": "foo", + "file": "switch_ex.c", + "locations": [ + { + "line": 10, + "column": 5, + "meta": { + "Kind": "Identifier" + } + }, + { + "line": 16, + "column": 5, + "meta": { + "Kind": "Identifier" + } + } + ] + } +] \ No newline at end of file diff --git a/targets/switch_ex.c b/targets/switch_ex.c new file mode 100644 index 0000000000..7914531691 --- /dev/null +++ b/targets/switch_ex.c @@ -0,0 +1,18 @@ + +void foo() {} +void foo2() {} +void foo3() {} + +int main(int argc, char **argv) { + switch (argc) { + case 0: + case 1: + foo(); + break; + case 2: + foo2(); + case 3: + default: + foo3(); + } +} \ No newline at end of file diff --git a/tools/module-extractor/CMakeLists.txt b/tools/module-extractor/CMakeLists.txt index 7d1be0d26d..bab710201c 100644 --- a/tools/module-extractor/CMakeLists.txt +++ b/tools/module-extractor/CMakeLists.txt @@ -31,6 +31,7 @@ target_link_libraries(slicer ${Boost_LIBRARIES} ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} + ${CLANG_LIBRARY} ) diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index aa2e03e50c..e9d4fa2fec 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -125,11 +125,12 @@ void copy_files(map> &file_lines) { bool last_empty = false; while (std::getline(in, line)) { if (line.empty()) { - if (!last_empty) out << endl; + if (!last_empty) { + out << endl; + } last_empty = true; } else { last_empty = false; - out << line << endl; } } } @@ -276,6 +277,10 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, if (inst->getDebugLoc()) { if (auto scope = dyn_cast(inst->getDebugLoc().getScope())) { + auto lines = add_block(file,line); + for (auto line : *lines ){ + file_lines[file].insert(line); + } file_lines[file].insert(scope->getLine()); } } @@ -335,7 +340,9 @@ std::string createSlice(string target, const set &entrypoints, for (const auto &t : terms) { for (const auto &l : t.locations) { // check same statement - if (t.file == file && + if ( +// t.file == file +// && (l.line == line || l.line == sub->getLine())) { facts.insert(SlicerFact(&l, &i)); @@ -490,15 +497,15 @@ std::set NormalFlowFunction::computeTargets(SlicerFact source) { } else { facts.insert(source); } - llvm::dbgs() << "===================\n"; - llvm::dbgs() << "curr: " << *curr << "\n"; - llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; - llvm::dbgs() << "src: " << psr::getSrcCodeFromIR(curr) << "\n"; - llvm::dbgs() << curr->getFunction()->getName() << "\n"; +// llvm::dbgs() << "===================\n"; +// llvm::dbgs() << "curr: " << *curr << "\n"; +// llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; +// llvm::dbgs() << "src: " << psr::getSrcCodeFromIR(curr) << "\n"; +// llvm::dbgs() << curr->getFunction()->getName() << "\n"; auto fun = curr->getFunction()->getName(); - if (fun == "parse_value") { - llvm::dbgs() << ""; - } +// if (fun == "parse_value") { +// llvm::dbgs() << ""; +// } // if (auto load = dyn_cast(curr)) { // llvm::dbgs() << ""; // } @@ -601,10 +608,10 @@ CallFlowFunction::computeTargets(SlicerFact source) { #ifdef __INTERPROCEDURAL__ if (!source.isZero()) { // llvm::dbgs() << "===================\n"; -// llvm::dbgs() << "curr: " << *callStmt << "\n"; +// llvm::dbgs() << "Curr:" <<*callStmt << "\n"; // llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; // llvm::dbgs() << callStmt->getFunction()->getName() << "\n"; -// + // if (callStmt->getFunction()->getName() == "inotifytools_get_stat_by_filename") { // llvm::dbgs() << ""; // } @@ -699,5 +706,108 @@ void compare_slice(string original, string module) { cout << a << "\n"; } } +class RewriteSourceVisitor + : public clang::RecursiveASTVisitor { +public: + RewriteSourceVisitor(clang::ASTContext &context, unsigned int line, + const shared_ptr> &resultingLines) + : context(context), line(line), resulting_lines(resultingLines), candidate_lines() { + } + + [[maybe_unused]] virtual bool VisitStmt(clang::Stmt *S) { + auto es = context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); + auto es4 = context.getSourceManager().getExpansionLineNumber(S->getEndLoc());\ + if (es == es4 && es == line) { + for (auto &l : candidate_lines) { + resulting_lines->insert(l); + } + } + return true; + } + + [[maybe_unused]] virtual bool VisitDefaultStmt(clang::DefaultStmt *S){ + auto line = context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); + candidate_lines.insert(line); + return true; + } + + bool VisitCaseStmt(clang::CaseStmt *S) { + auto line = context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); + candidate_lines.insert(line); + return true; + } + + virtual bool VisitBreakStmt(clang::BreakStmt *S) { + candidate_lines.clear(); + return true; + } + +private: + clang::ASTContext &context; + unsigned int line; + shared_ptr> resulting_lines; + std::set candidate_lines; +}; + + +class RewriteSourceConsumer : public clang::ASTConsumer { +public: + RewriteSourceConsumer( + unsigned int line, + const shared_ptr> &resultingLines) + : line(line), resulting_lines(resultingLines) {} + virtual void HandleTranslationUnit(clang::ASTContext &Context) { + // Traversing the translation unit decl via a RecursiveASTVisitor + // will visit all nodes in the AST. +// llvm::dbgs << Context.getTranslationUnitDecl(); + RewriteSourceVisitor Visitor(Context,line,resulting_lines); + Visitor.TraverseDecl(Context.getTranslationUnitDecl()); + } +private: + // A RecursiveASTVisitor implementation. + + unsigned int line; + shared_ptr> resulting_lines; +}; +class RewriteSourceAction +// : public clang::ASTFrontendAction +{ + + +public: + RewriteSourceAction(unsigned int line, + const shared_ptr> &resultingLines) + : line(line), resulting_lines(resultingLines) {} + + std::unique_ptr newASTConsumer() { + return std::unique_ptr( + new RewriteSourceConsumer(line,resulting_lines)); + } +// virtual std::unique_ptr CreateASTConsumer( +// clang::CompilerInstance &Compiler, llvm::StringRef InFile) { +// return std::unique_ptr( +// new RewriteSourceConsumer(line)); +// } + +private: + unsigned int line; + shared_ptr> resulting_lines; +}; + + +shared_ptr> add_block(std::string file,unsigned int line) { + auto num_args = 0; +// auto args = "-- clang /media/Volume/Arbeit/Arbeit/code/phasar/targets/switch_ex.c -o switch_ex"; + string err = "ERROR_MY"; + auto db = + clang::tooling::CompilationDatabase::autoDetectFromDirectory("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson",err); + std::vector Sources; + Sources.push_back(file); + clang::tooling::ClangTool Tool(*db, Sources); + auto res = make_shared>(); + Tool.run(clang::tooling::newFrontendActionFactory(new RewriteSourceAction(line,res)).get()); +// llvm::dbgs() << ""; + return res; +} // TODO Check for opening brace \ No newline at end of file diff --git a/tools/module-extractor/slicer.h b/tools/module-extractor/slicer.h index 4740353551..91ee99e21c 100644 --- a/tools/module-extractor/slicer.h +++ b/tools/module-extractor/slicer.h @@ -4,6 +4,11 @@ #include #include +#include +#include +#include +#include + #include #include #include @@ -220,5 +225,7 @@ class CallToRetFlowFunction : public FlowFunction { void compare_slice(string original, string module); + +shared_ptr> add_block(std::string file,unsigned int line); #endif // PHASAR_SLICER_H diff --git a/unittests/Slicer/CMakeLists.txt b/unittests/Slicer/CMakeLists.txt index e69de29bb2..fdf337858f 100644 --- a/unittests/Slicer/CMakeLists.txt +++ b/unittests/Slicer/CMakeLists.txt @@ -0,0 +1,7 @@ +set(SlicerTestSources + SliceITCW_defectsTest.cpp + Parson_test.cpp) + +foreach(TEST_SRC ${SlicerTestSources}) + add_phasar_unittest(${TEST_SRC}) +endforeach(TEST_SRC) diff --git a/unittests/Slicer/SliceITCW_defectsTest.cpp b/unittests/Slicer/SliceITCW_defectsTest.cpp index 916622217c..b00f44cd33 100644 --- a/unittests/Slicer/SliceITCW_defectsTest.cpp +++ b/unittests/Slicer/SliceITCW_defectsTest.cpp @@ -1,3 +1,26 @@ -// -// Created by torun on 07.08.20. -// +#include "gtest/gtest.h" + +TEST( bit_shift_test, bit_shift_001 ){ +// For all bitshift tests term ==> sink +} +TEST(dynamic_buffer_overrun_test, dynamic_buffer_overrun_001) { + +} +//void bit_shift_001 () +//{ +// int a = 1; +// int ret; +// ret = a << 32;/*Tool should detect this line as error*/ /*ERROR:Bit shift error*/ +// sink = ret; +//} + + + + + + + +int main(int Argc, char **Argv) { + ::testing::InitGoogleTest(&Argc, Argv); + return RUN_ALL_TESTS(); +} \ No newline at end of file From 9b8a2ea24aab44c4b305a251b314ba5ed7803eaf Mon Sep 17 00:00:00 2001 From: Patrick Date: Tue, 13 Jul 2021 14:10:44 +0200 Subject: [PATCH 15/42] Add targets --- targets/locations_memcached_command.json | 1823 +++++++- targets/locations_memcached_stats.json | 3956 +++++++++++++++++ .../locations_memcached_stats_filtered.json | 3956 +++++++++++++++++ targets/locations_redis_cluster_manager.json | 637 +++ tools/module-extractor/slicer.cpp | 379 +- tools/module-extractor/slicer.h | 49 +- unittests/Slicer/Parson_test.cpp | 9 + unittests/Slicer/SliceComparator.cpp | 11 + 8 files changed, 10485 insertions(+), 335 deletions(-) create mode 100644 targets/locations_memcached_stats.json create mode 100644 targets/locations_memcached_stats_filtered.json create mode 100644 targets/locations_redis_cluster_manager.json create mode 100644 unittests/Slicer/Parson_test.cpp create mode 100644 unittests/Slicer/SliceComparator.cpp diff --git a/targets/locations_memcached_command.json b/targets/locations_memcached_command.json index b9d4cbfa48..c2c4ef172b 100644 --- a/targets/locations_memcached_command.json +++ b/targets/locations_memcached_command.json @@ -1,192 +1,1719 @@ [ { - "term": "command", - "file": "memcached.h", + "term": "cmd", + "file": "proto_bin.c", "locations": [ { - "line": 73, + "line": 32, + "column": 15, + "meta": {} + }, + { + "line": 101, + "column": 12, + "meta": {} + }, + { + "line": 107, + "column": 17, + "meta": {} + }, + { + "line": 244, "column": 27, - "meta": { - "Kind": "Comment" - } + "meta": {} }, { - "line": 187, - "column": 22, - "meta": { - "Kind": "Comment" - } + "line": 245, + "column": 12, + "meta": {} }, { - "line": 189, - "column": 22, - "meta": { - "Kind": "Comment" - } + "line": 253, + "column": 32, + "meta": {} + }, + { + "line": 293, + "column": 39, + "meta": {} + }, + { + "line": 339, + "column": 20, + "meta": {} + }, + { + "line": 362, + "column": 53, + "meta": {} + }, + { + "line": 381, + "column": 29, + "meta": {} + }, + { + "line": 385, + "column": 16, + "meta": {} + }, + { + "line": 423, + "column": 16, + "meta": {} }, { - "line": 190, + "line": 425, "column": 22, - "meta": { - "Kind": "Comment" - } + "meta": {} }, { - "line": 431, - "column": 10, - "meta": { - "Kind": "Identifier" - } + "line": 444, + "column": 36, + "meta": {} + }, + { + "line": 457, + "column": 28, + "meta": {} + }, + { + "line": 458, + "column": 28, + "meta": {} }, { - "line": 431, + "line": 459, "column": 28, - "meta": { - "Kind": "Comment" - } + "meta": {} + }, + { + "line": 460, + "column": 33, + "meta": {} + }, + { + "line": 461, + "column": 33, + "meta": {} + }, + { + "line": 462, + "column": 35, + "meta": {} }, { - "line": 704, - "column": 5, - "meta": { - "Kind": "Comment" - } + "line": 487, + "column": 36, + "meta": {} }, { - "line": 730, - "column": 5, - "meta": { - "Kind": "Comment" - } + "line": 490, + "column": 34, + "meta": {} }, { - "line": 741, + "line": 503, "column": 16, - "meta": { - "Kind": "Comment" - } + "meta": {} }, { - "line": 746, - "column": 11, - "meta": { - "Kind": "Identifier" - } - } - ] - }, - { - "term": "command", - "file": "memcached.c", - "locations": [ - {"line" : 82, "column" : 21, "meta" : {}}, - {"line" : 83, "column" : 21, "meta" : {}}, - {"line" : 283, "column" : 23, "meta" : {}}, - {"line" : 602, "column" : 31, "meta" : {}}, - {"line" : 684, "column" : 21, "meta" : {}}, - {"line" : 690, "column" : 33, "meta" : {}}, - {"line" : 693, "column" : 33, "meta" : {}}, - {"line" : 699, "column" : 29, "meta" : {}}, - {"line" : 702, "column" : 29, "meta" : {}}, - {"line" : 1226, "column" : 28, "meta" : {}}, - {"line" : 1491, "column" : 4, "meta" : {}}, - {"line" : 2244, "column" : 25, "meta" : {}}, - {"line" : 2547, "column" : 21, "meta" : {}}, - {"line" : 2555, "column" : 21, "meta" : {}}, - {"line" : 2559, "column" : 21, "meta" : {}}, - {"line" : 2567, "column" : 24, "meta" : {}}, - {"line" : 2570, "column" : 21, "meta" : {}}, - {"line" : 2577, "column" : 25, "meta" : {}}, - {"line" : 2580, "column" : 25, "meta" : {}}, - {"line" : 2625, "column" : 64, "meta" : {}}, - {"line" : 3333, "column" : 29, "meta" : {}}, - {"line" : 4077, "column" : 65, "meta" : {}}, - {"line" : 4091, "column" : 71, "meta" : {}}, - {"line" : 4107, "column" : 62, "meta" : {}}, - {"line" : 4123, "column" : 57, "meta" : {}}, - {"line" : 4125, "column" : 53, "meta" : {}}, - {"line" : 4173, "column" : 80, "meta" : {}}, - {"line" : 5007, "column" : 42, "meta" : {}}, - {"line" : 5035, "column" : 33, "meta" : {}}, - {"line" : 5036, "column" : 34, "meta" : {}}, - {"line" : 5090, "column" : 35, "meta" : {}}, - {"line" : 5091, "column" : 31, "meta" : {}} - ] - }, - { - "term": "cmd", - "file": "memcached.h", - "locations": [ + "line": 549, + "column": 40, + "meta": {} + }, + { + "line": 571, + "column": 36, + "meta": {} + }, + { + "line": 574, + "column": 34, + "meta": {} + }, + { + "line": 586, + "column": 40, + "meta": {} + }, + { + "line": 623, + "column": 18, + "meta": {} + }, + { + "line": 624, + "column": 24, + "meta": {} + }, + { + "line": 636, + "column": 31, + "meta": {} + }, + { + "line": 638, + "column": 31, + "meta": {} + }, + { + "line": 797, + "column": 16, + "meta": {} + }, + { + "line": 822, + "column": 24, + "meta": {} + }, + { + "line": 836, + "column": 31, + "meta": {} + }, + { + "line": 852, + "column": 31, + "meta": {} + }, + { + "line": 862, + "column": 16, + "meta": {} + }, + { + "line": 874, + "column": 45, + "meta": {} + }, + { + "line": 875, + "column": 20, + "meta": {} + }, + { + "line": 909, + "column": 16, + "meta": {} + }, + { + "line": 911, + "column": 12, + "meta": {} + }, + { + "line": 914, + "column": 12, + "meta": {} + }, + { + "line": 917, + "column": 12, + "meta": {} + }, + { + "line": 920, + "column": 12, + "meta": {} + }, + { + "line": 923, + "column": 12, + "meta": {} + }, + { + "line": 926, + "column": 12, + "meta": {} + }, + { + "line": 929, + "column": 12, + "meta": {} + }, + { + "line": 932, + "column": 12, + "meta": {} + }, + { + "line": 935, + "column": 12, + "meta": {} + }, + { + "line": 938, + "column": 12, + "meta": {} + }, + { + "line": 941, + "column": 12, + "meta": {} + }, + { + "line": 944, + "column": 12, + "meta": {} + }, + { + "line": 947, + "column": 12, + "meta": {} + }, + { + "line": 950, + "column": 12, + "meta": {} + }, + { + "line": 956, + "column": 16, + "meta": {} + }, + { + "line": 1093, + "column": 16, + "meta": {} + }, + { + "line": 1095, + "column": 23, + "meta": {} + }, + { + "line": 1126, + "column": 29, + "meta": {} + }, + { + "line": 1133, + "column": 16, + "meta": {} + }, + { + "line": 1149, + "column": 16, + "meta": {} + }, + { + "line": 1151, + "column": 16, + "meta": {} + }, + { + "line": 1154, + "column": 16, + "meta": {} + }, + { + "line": 1157, + "column": 16, + "meta": {} + }, + { + "line": 1164, + "column": 12, + "meta": {} + }, { - "line": 187, - "column": 5, - "meta": { - "Kind": "Identifier" - } + "line": 1219, + "column": 16, + "meta": {} }, { - "line": 190, - "column": 5, - "meta": { - "Kind": "Identifier" - } + "line": 1221, + "column": 16, + "meta": {} }, { - "line": 691, + "line": 1224, "column": 16, - "meta": { - "Kind": "Identifier" - } + "meta": {} }, { - "line": 741, - "column": 11, + "line": 1274, + "column": 28, "meta": {} } ] }, { "term": "cmd", - "file": "memcached.c", + "file": "proto_text.c", "locations": [ - {"line" : 310, "column" : 28, "meta" : {}}, - {"line" : 322, "column" : 21, "meta" : {}}, - {"line" : 340, "column" : 38, "meta" : {}}, - {"line" : 343, "column" : 41, "meta" : {}}, - {"line" : 350, "column" : 29, "meta" : {}}, - {"line" : 351, "column" : 33, "meta" : {}}, - {"line" : 356, "column" : 74, "meta" : {}}, - {"line" : 503, "column" : 33, "meta" : {}}, - {"line" : 504, "column" : 34, "meta" : {}}, - {"line" : 539, "column" : 25, "meta" : {}}, - {"line" : 610, "column" : 62, "meta" : {}}, - {"line" : 645, "column" : 8, "meta" : {}}, - {"line" : 654, "column" : 13, "meta" : {}}, - {"line" : 931, "column" : 50, "meta" : {}}, - {"line" : 934, "column" : 52, "meta" : {}}, - {"line" : 1202, "column" : 36, "meta" : {}}, - {"line" : 1222, "column" : 32, "meta" : {}}, - {"line" : 1361, "column" : 19, "meta" : {}}, - {"line" : 1362, "column" : 8, "meta" : {}}, - {"line" : 1371, "column" : 38, "meta" : {}}, - {"line" : 1553, "column" : 60, "meta" : {}}, - {"line" : 1661, "column" : 36, "meta" : {}}, - {"line" : 1735, "column" : 18, "meta" : {}}, - {"line" : 1736, "column" : 18, "meta" : {}}, - {"line" : 1737, "column" : 18, "meta" : {}}, - {"line" : 1738, "column" : 18, "meta" : {}}, - {"line" : 1739, "column" : 18, "meta" : {}}, - {"line" : 1765, "column" : 23, "meta" : {}}, - {"line" : 2104, "column" : 53, "meta" : {}}, - {"line" : 2105, "column" : 55, "meta" : {}}, - {"line" : 3281, "column" : 49, "meta" : {}}, - {"line" : 3320, "column" : 46, "meta" : {}}, - {"line" : 3331, "column" : 25, "meta" : {}}, - {"line" : 3345, "column" : 23, "meta" : {}}, - {"line" : 3351, "column" : 23, "meta" : {}}, - {"line" : 3468, "column" : 44, "meta" : {}}, - {"line" : 3534, "column" : 48, "meta" : {}}, - {"line" : 4394, "column" : 17, "meta" : {}} + { + "line": 24, + "column": 26, + "meta": {} + }, + { + "line": 30, + "column": 19, + "meta": {} + }, + { + "line": 35, + "column": 53, + "meta": {} + }, + { + "line": 77, + "column": 18, + "meta": {} + }, + { + "line": 109, + "column": 38, + "meta": {} + }, + { + "line": 113, + "column": 54, + "meta": {} + }, + { + "line": 348, + "column": 31, + "meta": {} + }, + { + "line": 353, + "column": 31, + "meta": {} + }, + { + "line": 407, + "column": 13, + "meta": {} + }, + { + "line": 557, + "column": 44, + "meta": {} + }, + { + "line": 561, + "column": 42, + "meta": {} + }, + { + "line": 575, + "column": 44, + "meta": {} + }, + { + "line": 579, + "column": 42, + "meta": {} + }, + { + "line": 786, + "column": 36, + "meta": {} + }, + { + "line": 791, + "column": 27, + "meta": {} + }, + { + "line": 1226, + "column": 36, + "meta": {} + }, + { + "line": 1230, + "column": 34, + "meta": {} + }, + { + "line": 1234, + "column": 36, + "meta": {} + }, + { + "line": 1238, + "column": 36, + "meta": {} + }, + { + "line": 1242, + "column": 34, + "meta": {} + }, + { + "line": 1409, + "column": 8, + "meta": {} + }, + { + "line": 1551, + "column": 32, + "meta": {} + }, + { + "line": 1774, + "column": 32, + "meta": {} + }, + { + "line": 1877, + "column": 8, + "meta": {} + }, + { + "line": 1909, + "column": 32, + "meta": {} + }, + { + "line": 1917, + "column": 32, + "meta": {} + }, + { + "line": 2122, + "column": 46, + "meta": {} + }, + { + "line": 2303, + "column": 28, + "meta": {} + }, + { + "line": 2559, + "column": 51, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "logger.c", + "locations": [ + { + "line": 188, + "column": 17, + "meta": {} + }, + { + "line": 193, + "column": 24, + "meta": {} + }, + { + "line": 196, + "column": 13, + "meta": {} + }, + { + "line": 197, + "column": 9, + "meta": {} + }, + { + "line": 201, + "column": 65, + "meta": {} + }, + { + "line": 203, + "column": 45, + "meta": {} + }, + { + "line": 679, + "column": 9, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "memcached.c", + "locations": [ + { + "line": 310, + "column": 28, + "meta": {} + }, + { + "line": 322, + "column": 21, + "meta": {} + }, + { + "line": 340, + "column": 38, + "meta": {} + }, + { + "line": 343, + "column": 41, + "meta": {} + }, + { + "line": 350, + "column": 29, + "meta": {} + }, + { + "line": 351, + "column": 33, + "meta": {} + }, + { + "line": 356, + "column": 74, + "meta": {} + }, + { + "line": 503, + "column": 33, + "meta": {} + }, + { + "line": 504, + "column": 34, + "meta": {} + }, + { + "line": 539, + "column": 25, + "meta": {} + }, + { + "line": 610, + "column": 62, + "meta": {} + }, + { + "line": 645, + "column": 8, + "meta": {} + }, + { + "line": 654, + "column": 13, + "meta": {} + }, + { + "line": 931, + "column": 50, + "meta": {} + }, + { + "line": 934, + "column": 52, + "meta": {} + }, + { + "line": 1202, + "column": 36, + "meta": {} + }, + { + "line": 1222, + "column": 32, + "meta": {} + }, + { + "line": 1361, + "column": 19, + "meta": {} + }, + { + "line": 1362, + "column": 8, + "meta": {} + }, + { + "line": 1371, + "column": 38, + "meta": {} + }, + { + "line": 1553, + "column": 60, + "meta": {} + }, + { + "line": 1661, + "column": 36, + "meta": {} + }, + { + "line": 1735, + "column": 18, + "meta": {} + }, + { + "line": 1736, + "column": 18, + "meta": {} + }, + { + "line": 1737, + "column": 18, + "meta": {} + }, + { + "line": 1738, + "column": 18, + "meta": {} + }, + { + "line": 1739, + "column": 18, + "meta": {} + }, + { + "line": 1765, + "column": 23, + "meta": {} + }, + { + "line": 2104, + "column": 53, + "meta": {} + }, + { + "line": 2105, + "column": 55, + "meta": {} + }, + { + "line": 3281, + "column": 49, + "meta": {} + }, + { + "line": 3320, + "column": 46, + "meta": {} + }, + { + "line": 3331, + "column": 25, + "meta": {} + }, + { + "line": 3345, + "column": 23, + "meta": {} + }, + { + "line": 3351, + "column": 23, + "meta": {} + }, + { + "line": 3468, + "column": 44, + "meta": {} + }, + { + "line": 3534, + "column": 48, + "meta": {} + }, + { + "line": 4394, + "column": 17, + "meta": {} + } + ] + }, + { + "term": "command", + "file": "proto_bin.c", + "locations": [ + { + "line": 24, + "column": 26, + "meta": {} + }, + { + "line": 51, + "column": 14, + "meta": {} + }, + { + "line": 118, + "column": 22, + "meta": {} + }, + { + "line": 185, + "column": 31, + "meta": {} + }, + { + "line": 242, + "column": 34, + "meta": {} + }, + { + "line": 550, + "column": 30, + "meta": {} + }, + { + "line": 602, + "column": 14, + "meta": {} + }, + { + "line": 609, + "column": 38, + "meta": {} + }, + { + "line": 618, + "column": 27, + "meta": {} + }, + { + "line": 620, + "column": 27, + "meta": {} + }, + { + "line": 622, + "column": 27, + "meta": {} + }, + { + "line": 623, + "column": 31, + "meta": {} + }, + { + "line": 645, + "column": 26, + "meta": {} + }, + { + "line": 821, + "column": 40, + "meta": {} + }, + { + "line": 881, + "column": 26, + "meta": {} + } + ] + }, + { + "term": "command", + "file": "memcached.c", + "locations": [ + { + "line": 82, + "column": 21, + "meta": {} + }, + { + "line": 83, + "column": 21, + "meta": {} + }, + { + "line": 283, + "column": 23, + "meta": {} + }, + { + "line": 602, + "column": 31, + "meta": {} + }, + { + "line": 684, + "column": 21, + "meta": {} + }, + { + "line": 690, + "column": 33, + "meta": {} + }, + { + "line": 693, + "column": 33, + "meta": {} + }, + { + "line": 699, + "column": 29, + "meta": {} + }, + { + "line": 702, + "column": 29, + "meta": {} + }, + { + "line": 1226, + "column": 28, + "meta": {} + }, + { + "line": 1491, + "column": 4, + "meta": {} + }, + { + "line": 2244, + "column": 25, + "meta": {} + }, + { + "line": 2547, + "column": 21, + "meta": {} + }, + { + "line": 2555, + "column": 21, + "meta": {} + }, + { + "line": 2559, + "column": 21, + "meta": {} + }, + { + "line": 2567, + "column": 24, + "meta": {} + }, + { + "line": 2570, + "column": 21, + "meta": {} + }, + { + "line": 2577, + "column": 25, + "meta": {} + }, + { + "line": 2580, + "column": 25, + "meta": {} + }, + { + "line": 2625, + "column": 64, + "meta": {} + }, + { + "line": 3333, + "column": 29, + "meta": {} + }, + { + "line": 4077, + "column": 65, + "meta": {} + }, + { + "line": 4091, + "column": 71, + "meta": {} + }, + { + "line": 4107, + "column": 62, + "meta": {} + }, + { + "line": 4123, + "column": 57, + "meta": {} + }, + { + "line": 4125, + "column": 53, + "meta": {} + }, + { + "line": 4173, + "column": 80, + "meta": {} + }, + { + "line": 5007, + "column": 42, + "meta": {} + }, + { + "line": 5035, + "column": 33, + "meta": {} + }, + { + "line": 5036, + "column": 34, + "meta": {} + }, + { + "line": 5090, + "column": 35, + "meta": {} + }, + { + "line": 5091, + "column": 31, + "meta": {} + } + ] + }, + { + "term": "command", + "file": "proto_text.c", + "locations": [ + { + "line": 15, + "column": 21, + "meta": {} + }, + { + "line": 23, + "column": 59, + "meta": {} + }, + { + "line": 189, + "column": 17, + "meta": {} + }, + { + "line": 197, + "column": 20, + "meta": {} + }, + { + "line": 201, + "column": 10, + "meta": {} + }, + { + "line": 202, + "column": 9, + "meta": {} + }, + { + "line": 205, + "column": 24, + "meta": {} + }, + { + "line": 208, + "column": 25, + "meta": {} + }, + { + "line": 211, + "column": 12, + "meta": {} + }, + { + "line": 213, + "column": 13, + "meta": {} + }, + { + "line": 249, + "column": 14, + "meta": {} + }, + { + "line": 259, + "column": 36, + "meta": {} + }, + { + "line": 281, + "column": 28, + "meta": {} + }, + { + "line": 330, + "column": 41, + "meta": {} + }, + { + "line": 336, + "column": 24, + "meta": {} + }, + { + "line": 346, + "column": 21, + "meta": {} + }, + { + "line": 361, + "column": 14, + "meta": {} + }, + { + "line": 408, + "column": 13, + "meta": {} + }, + { + "line": 425, + "column": 62, + "meta": {} + }, + { + "line": 463, + "column": 32, + "meta": {} + }, + { + "line": 475, + "column": 30, + "meta": {} + }, + { + "line": 595, + "column": 19, + "meta": {} + }, + { + "line": 599, + "column": 32, + "meta": {} + }, + { + "line": 627, + "column": 45, + "meta": {} + }, + { + "line": 638, + "column": 62, + "meta": {} + }, + { + "line": 641, + "column": 16, + "meta": {} + }, + { + "line": 645, + "column": 21, + "meta": {} + }, + { + "line": 649, + "column": 21, + "meta": {} + }, + { + "line": 660, + "column": 20, + "meta": {} + }, + { + "line": 664, + "column": 41, + "meta": {} + }, + { + "line": 671, + "column": 26, + "meta": {} + }, + { + "line": 675, + "column": 26, + "meta": {} + }, + { + "line": 683, + "column": 26, + "meta": {} + }, + { + "line": 685, + "column": 26, + "meta": {} + }, + { + "line": 695, + "column": 45, + "meta": {} + }, + { + "line": 701, + "column": 45, + "meta": {} + }, + { + "line": 713, + "column": 26, + "meta": {} + }, + { + "line": 716, + "column": 26, + "meta": {} + }, + { + "line": 720, + "column": 43, + "meta": {} + }, + { + "line": 722, + "column": 26, + "meta": {} + }, + { + "line": 749, + "column": 26, + "meta": {} + }, + { + "line": 753, + "column": 41, + "meta": {} + }, + { + "line": 843, + "column": 58, + "meta": {} + }, + { + "line": 852, + "column": 58, + "meta": {} + }, + { + "line": 862, + "column": 58, + "meta": {} + }, + { + "line": 914, + "column": 58, + "meta": {} + }, + { + "line": 963, + "column": 26, + "meta": {} + }, + { + "line": 974, + "column": 38, + "meta": {} + }, + { + "line": 982, + "column": 44, + "meta": {} + }, + { + "line": 990, + "column": 29, + "meta": {} + }, + { + "line": 994, + "column": 44, + "meta": {} + }, + { + "line": 997, + "column": 29, + "meta": {} + }, + { + "line": 1221, + "column": 22, + "meta": {} + }, + { + "line": 1261, + "column": 26, + "meta": {} + }, + { + "line": 1268, + "column": 38, + "meta": {} + }, + { + "line": 1278, + "column": 44, + "meta": {} + }, + { + "line": 1286, + "column": 44, + "meta": {} + }, + { + "line": 1329, + "column": 37, + "meta": {} + }, + { + "line": 1432, + "column": 29, + "meta": {} + }, + { + "line": 1440, + "column": 38, + "meta": {} + }, + { + "line": 1450, + "column": 41, + "meta": {} + }, + { + "line": 1557, + "column": 33, + "meta": {} + }, + { + "line": 1562, + "column": 38, + "meta": {} + }, + { + "line": 1580, + "column": 41, + "meta": {} + }, + { + "line": 1600, + "column": 37, + "meta": {} + }, + { + "line": 1785, + "column": 28, + "meta": {} + }, + { + "line": 1800, + "column": 41, + "meta": {} + }, + { + "line": 1810, + "column": 41, + "meta": {} + }, + { + "line": 1819, + "column": 45, + "meta": {} + }, + { + "line": 1825, + "column": 41, + "meta": {} + }, + { + "line": 1881, + "column": 27, + "meta": {} + }, + { + "line": 1893, + "column": 41, + "meta": {} + }, + { + "line": 1925, + "column": 32, + "meta": {} + }, + { + "line": 1936, + "column": 41, + "meta": {} + }, + { + "line": 1975, + "column": 28, + "meta": {} + }, + { + "line": 1989, + "column": 45, + "meta": {} + }, + { + "line": 2000, + "column": 41, + "meta": {} + }, + { + "line": 2030, + "column": 31, + "meta": {} + }, + { + "line": 2038, + "column": 41, + "meta": {} + }, + { + "line": 2047, + "column": 31, + "meta": {} + }, + { + "line": 2057, + "column": 26, + "meta": {} + }, + { + "line": 2071, + "column": 36, + "meta": {} + }, + { + "line": 2087, + "column": 45, + "meta": {} + }, + { + "line": 2104, + "column": 27, + "meta": {} + }, + { + "line": 2111, + "column": 43, + "meta": {} + }, + { + "line": 2116, + "column": 52, + "meta": {} + }, + { + "line": 2155, + "column": 30, + "meta": {} + }, + { + "line": 2182, + "column": 25, + "meta": {} + }, + { + "line": 2239, + "column": 30, + "meta": {} + }, + { + "line": 2296, + "column": 31, + "meta": {} + }, + { + "line": 2341, + "column": 29, + "meta": {} + }, + { + "line": 2345, + "column": 26, + "meta": {} + }, + { + "line": 2350, + "column": 30, + "meta": {} + }, + { + "line": 2351, + "column": 27, + "meta": {} + }, + { + "line": 2359, + "column": 27, + "meta": {} + }, + { + "line": 2370, + "column": 45, + "meta": {} + }, + { + "line": 2395, + "column": 32, + "meta": {} + }, + { + "line": 2401, + "column": 33, + "meta": {} + }, + { + "line": 2439, + "column": 56, + "meta": {} + }, + { + "line": 2473, + "column": 45, + "meta": {} + }, + { + "line": 2482, + "column": 45, + "meta": {} + }, + { + "line": 2514, + "column": 35, + "meta": {} + }, + { + "line": 2526, + "column": 20, + "meta": {} + }, + { + "line": 2529, + "column": 22, + "meta": {} + }, + { + "line": 2530, + "column": 39, + "meta": {} + }, + { + "line": 2534, + "column": 21, + "meta": {} + }, + { + "line": 2545, + "column": 45, + "meta": {} + }, + { + "line": 2548, + "column": 12, + "meta": {} + }, + { + "line": 2558, + "column": 24, + "meta": {} + }, + { + "line": 2559, + "column": 12, + "meta": {} + }, + { + "line": 2560, + "column": 32, + "meta": {} + }, + { + "line": 2566, + "column": 13, + "meta": {} + }, + { + "line": 2571, + "column": 30, + "meta": {} + }, + { + "line": 2574, + "column": 30, + "meta": {} + }, + { + "line": 2577, + "column": 33, + "meta": {} + }, + { + "line": 2581, + "column": 23, + "meta": {} + }, + { + "line": 2585, + "column": 37, + "meta": {} + }, + { + "line": 2588, + "column": 30, + "meta": {} + }, + { + "line": 2595, + "column": 24, + "meta": {} + }, + { + "line": 2599, + "column": 25, + "meta": {} + }, + { + "line": 2602, + "column": 25, + "meta": {} + }, + { + "line": 2605, + "column": 25, + "meta": {} + }, + { + "line": 2608, + "column": 25, + "meta": {} + }, + { + "line": 2616, + "column": 28, + "meta": {} + }, + { + "line": 2622, + "column": 30, + "meta": {} + }, + { + "line": 2625, + "column": 27, + "meta": {} + }, + { + "line": 2634, + "column": 28, + "meta": {} + }, + { + "line": 2642, + "column": 28, + "meta": {} + }, + { + "line": 2646, + "column": 30, + "meta": {} + }, + { + "line": 2654, + "column": 32, + "meta": {} + }, + { + "line": 2662, + "column": 28, + "meta": {} + }, + { + "line": 2666, + "column": 32, + "meta": {} + }, + { + "line": 2674, + "column": 27, + "meta": {} + }, + { + "line": 2683, + "column": 24, + "meta": {} + }, + { + "line": 2686, + "column": 33, + "meta": {} + }, + { + "line": 2690, + "column": 21, + "meta": {} + }, + { + "line": 2695, + "column": 27, + "meta": {} + }, + { + "line": 2699, + "column": 25, + "meta": {} + }, + { + "line": 2703, + "column": 22, + "meta": {} + }, + { + "line": 2707, + "column": 29, + "meta": {} + }, + { + "line": 2711, + "column": 23, + "meta": {} + }, + { + "line": 2715, + "column": 27, + "meta": {} + }, + { + "line": 2718, + "column": 21, + "meta": {} + }, + { + "line": 2720, + "column": 8, + "meta": {} + }, + { + "line": 2722, + "column": 27, + "meta": {} + }, + { + "line": 2727, + "column": 26, + "meta": {} + }, + { + "line": 2731, + "column": 31, + "meta": {} + } ] } ] \ No newline at end of file diff --git a/targets/locations_memcached_stats.json b/targets/locations_memcached_stats.json new file mode 100644 index 0000000000..e371ddb09a --- /dev/null +++ b/targets/locations_memcached_stats.json @@ -0,0 +1,3956 @@ +[ + { + "term": "cmd", + "file": "tls.c", + "locations": [ + { + "line": 243, + "column": 5, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "thread.c", + "locations": [ + { + "line": 61, + "column": 20, + "meta": {} + }, + { + "line": 62, + "column": 24, + "meta": {} + }, + { + "line": 326, + "column": 13, + "meta": {} + }, + { + "line": 422, + "column": 33, + "meta": {} + }, + { + "line": 778, + "column": 25, + "meta": {} + }, + { + "line": 782, + "column": 27, + "meta": {} + }, + { + "line": 785, + "column": 18, + "meta": {} + }, + { + "line": 788, + "column": 41, + "meta": {} + }, + { + "line": 789, + "column": 29, + "meta": {} + }, + { + "line": 796, + "column": 29, + "meta": {} + }, + { + "line": 797, + "column": 36, + "meta": {} + }, + { + "line": 798, + "column": 29, + "meta": {} + }, + { + "line": 801, + "column": 43, + "meta": {} + }, + { + "line": 805, + "column": 18, + "meta": {} + }, + { + "line": 810, + "column": 12, + "meta": {} + }, + { + "line": 813, + "column": 41, + "meta": {} + }, + { + "line": 814, + "column": 17, + "meta": {} + }, + { + "line": 822, + "column": 17, + "meta": {} + }, + { + "line": 823, + "column": 25, + "meta": {} + }, + { + "line": 829, + "column": 13, + "meta": {} + }, + { + "line": 830, + "column": 29, + "meta": {} + }, + { + "line": 831, + "column": 13, + "meta": {} + }, + { + "line": 832, + "column": 29, + "meta": {} + }, + { + "line": 835, + "column": 9, + "meta": {} + }, + { + "line": 836, + "column": 9, + "meta": {} + }, + { + "line": 837, + "column": 9, + "meta": {} + }, + { + "line": 838, + "column": 43, + "meta": {} + }, + { + "line": 842, + "column": 11, + "meta": {} + }, + { + "line": 848, + "column": 30, + "meta": {} + }, + { + "line": 929, + "column": 9, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "storage.c", + "locations": [ + { + "line": 238, + "column": 10, + "meta": {} + }, + { + "line": 245, + "column": 21, + "meta": {} + }, + { + "line": 253, + "column": 18, + "meta": {} + }, + { + "line": 408, + "column": 5, + "meta": {} + }, + { + "line": 409, + "column": 5, + "meta": {} + }, + { + "line": 410, + "column": 5, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "stats_prefix.c", + "locations": [ + { + "line": 10, + "column": 29, + "meta": {} + }, + { + "line": 16, + "column": 6, + "meta": {} + }, + { + "line": 18, + "column": 19, + "meta": {} + }, + { + "line": 21, + "column": 6, + "meta": {} + }, + { + "line": 26, + "column": 27, + "meta": {} + }, + { + "line": 31, + "column": 16, + "meta": {} + }, + { + "line": 37, + "column": 15, + "meta": {} + }, + { + "line": 58, + "column": 23, + "meta": {} + }, + { + "line": 65, + "column": 42, + "meta": {} + }, + { + "line": 80, + "column": 24, + "meta": {} + }, + { + "line": 81, + "column": 12, + "meta": {} + }, + { + "line": 89, + "column": 6, + "meta": {} + }, + { + "line": 93, + "column": 11, + "meta": {} + }, + { + "line": 103, + "column": 6, + "meta": {} + }, + { + "line": 107, + "column": 11, + "meta": {} + }, + { + "line": 114, + "column": 6, + "meta": {} + }, + { + "line": 118, + "column": 11, + "meta": {} + }, + { + "line": 125, + "column": 7, + "meta": {} + }, + { + "line": 145, + "column": 32, + "meta": {} + }, + { + "line": 152, + "column": 27, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "testapp.c", + "locations": [ + { + "line": 25, + "column": 11, + "meta": {} + }, + { + "line": 247, + "column": 30, + "meta": {} + }, + { + "line": 250, + "column": 5, + "meta": {} + }, + { + "line": 251, + "column": 12, + "meta": {} + }, + { + "line": 253, + "column": 12, + "meta": {} + }, + { + "line": 256, + "column": 12, + "meta": {} + }, + { + "line": 259, + "column": 12, + "meta": {} + }, + { + "line": 261, + "column": 12, + "meta": {} + }, + { + "line": 263, + "column": 12, + "meta": {} + }, + { + "line": 265, + "column": 12, + "meta": {} + }, + { + "line": 270, + "column": 30, + "meta": {} + }, + { + "line": 272, + "column": 5, + "meta": {} + }, + { + "line": 274, + "column": 5, + "meta": {} + }, + { + "line": 275, + "column": 11, + "meta": {} + }, + { + "line": 278, + "column": 5, + "meta": {} + }, + { + "line": 281, + "column": 5, + "meta": {} + }, + { + "line": 284, + "column": 5, + "meta": {} + }, + { + "line": 290, + "column": 30, + "meta": {} + }, + { + "line": 292, + "column": 5, + "meta": {} + }, + { + "line": 294, + "column": 5, + "meta": {} + }, + { + "line": 295, + "column": 11, + "meta": {} + }, + { + "line": 300, + "column": 5, + "meta": {} + }, + { + "line": 305, + "column": 30, + "meta": {} + }, + { + "line": 307, + "column": 5, + "meta": {} + }, + { + "line": 309, + "column": 5, + "meta": {} + }, + { + "line": 310, + "column": 11, + "meta": {} + }, + { + "line": 315, + "column": 5, + "meta": {} + }, + { + "line": 320, + "column": 30, + "meta": {} + }, + { + "line": 328, + "column": 5, + "meta": {} + }, + { + "line": 330, + "column": 37, + "meta": {} + }, + { + "line": 332, + "column": 5, + "meta": {} + }, + { + "line": 335, + "column": 36, + "meta": {} + }, + { + "line": 337, + "column": 5, + "meta": {} + }, + { + "line": 340, + "column": 36, + "meta": {} + }, + { + "line": 342, + "column": 5, + "meta": {} + }, + { + "line": 345, + "column": 36, + "meta": {} + }, + { + "line": 347, + "column": 5, + "meta": {} + }, + { + "line": 350, + "column": 36, + "meta": {} + }, + { + "line": 353, + "column": 5, + "meta": {} + }, + { + "line": 357, + "column": 11, + "meta": {} + }, + { + "line": 374, + "column": 5, + "meta": {} + }, + { + "line": 375, + "column": 11, + "meta": {} + }, + { + "line": 384, + "column": 5, + "meta": {} + }, + { + "line": 840, + "column": 25, + "meta": {} + }, + { + "line": 845, + "column": 25, + "meta": {} + }, + { + "line": 2154, + "column": 28, + "meta": {} + }, + { + "line": 2240, + "column": 8, + "meta": {} + }, + { + "line": 2241, + "column": 8, + "meta": {} + }, + { + "line": 2242, + "column": 8, + "meta": {} + }, + { + "line": 2243, + "column": 8, + "meta": {} + }, + { + "line": 2244, + "column": 8, + "meta": {} + }, + { + "line": 2317, + "column": 5, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "slab_automove_extstore.c", + "locations": [ + { + "line": 43, + "column": 10, + "meta": {} + }, + { + "line": 44, + "column": 10, + "meta": {} + }, + { + "line": 45, + "column": 10, + "meta": {} + }, + { + "line": 46, + "column": 10, + "meta": {} + }, + { + "line": 74, + "column": 15, + "meta": {} + }, + { + "line": 75, + "column": 15, + "meta": {} + }, + { + "line": 142, + "column": 14, + "meta": {} + }, + { + "line": 180, + "column": 15, + "meta": {} + }, + { + "line": 181, + "column": 15, + "meta": {} + }, + { + "line": 264, + "column": 25, + "meta": {} + }, + { + "line": 266, + "column": 25, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "slabs.c", + "locations": [ + { + "line": 524, + "column": 36, + "meta": {} + }, + { + "line": 527, + "column": 16, + "meta": {} + }, + { + "line": 532, + "column": 14, + "meta": {} + }, + { + "line": 555, + "column": 22, + "meta": {} + }, + { + "line": 557, + "column": 27, + "meta": {} + }, + { + "line": 558, + "column": 19, + "meta": {} + }, + { + "line": 559, + "column": 17, + "meta": {} + }, + { + "line": 583, + "column": 48, + "meta": {} + }, + { + "line": 585, + "column": 48, + "meta": {} + }, + { + "line": 587, + "column": 48, + "meta": {} + }, + { + "line": 589, + "column": 48, + "meta": {} + }, + { + "line": 591, + "column": 48, + "meta": {} + }, + { + "line": 593, + "column": 48, + "meta": {} + }, + { + "line": 595, + "column": 48, + "meta": {} + }, + { + "line": 597, + "column": 48, + "meta": {} + }, + { + "line": 602, + "column": 25, + "meta": {} + }, + { + "line": 606, + "column": 9, + "meta": {} + }, + { + "line": 671, + "column": 12, + "meta": {} + }, + { + "line": 673, + "column": 14, + "meta": {} + }, + { + "line": 781, + "column": 5, + "meta": {} + }, + { + "line": 1096, + "column": 13, + "meta": {} + }, + { + "line": 1184, + "column": 5, + "meta": {} + }, + { + "line": 1185, + "column": 5, + "meta": {} + }, + { + "line": 1186, + "column": 5, + "meta": {} + }, + { + "line": 1187, + "column": 5, + "meta": {} + }, + { + "line": 1188, + "column": 5, + "meta": {} + }, + { + "line": 1189, + "column": 5, + "meta": {} + }, + { + "line": 1190, + "column": 5, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "crawler.c", + "locations": [ + { + "line": 149, + "column": 23, + "meta": {} + }, + { + "line": 151, + "column": 19, + "meta": {} + }, + { + "line": 152, + "column": 19, + "meta": {} + }, + { + "line": 161, + "column": 15, + "meta": {} + }, + { + "line": 162, + "column": 15, + "meta": {} + }, + { + "line": 184, + "column": 12, + "meta": {} + }, + { + "line": 346, + "column": 13, + "meta": {} + }, + { + "line": 457, + "column": 5, + "meta": {} + }, + { + "line": 559, + "column": 9, + "meta": {} + }, + { + "line": 560, + "column": 9, + "meta": {} + }, + { + "line": 589, + "column": 18, + "meta": {} + }, + { + "line": 641, + "column": 31, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "sizes.c", + "locations": [ + { + "line": 11, + "column": 46, + "meta": {} + }, + { + "line": 12, + "column": 21, + "meta": {} + }, + { + "line": 13, + "column": 34, + "meta": {} + }, + { + "line": 14, + "column": 41, + "meta": {} + }, + { + "line": 15, + "column": 21, + "meta": {} + }, + { + "line": 23, + "column": 60, + "meta": {} + }, + { + "line": 32, + "column": 21, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "assoc.c", + "locations": [ + { + "line": 68, + "column": 5, + "meta": {} + }, + { + "line": 69, + "column": 5, + "meta": {} + }, + { + "line": 132, + "column": 9, + "meta": {} + }, + { + "line": 133, + "column": 9, + "meta": {} + }, + { + "line": 134, + "column": 9, + "meta": {} + }, + { + "line": 227, + "column": 25, + "meta": {} + }, + { + "line": 228, + "column": 25, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "proto_bin.c", + "locations": [ + { + "line": 338, + "column": 44, + "meta": {} + }, + { + "line": 340, + "column": 28, + "meta": {} + }, + { + "line": 342, + "column": 28, + "meta": {} + }, + { + "line": 344, + "column": 46, + "meta": {} + }, + { + "line": 361, + "column": 36, + "meta": {} + }, + { + "line": 362, + "column": 16, + "meta": {} + }, + { + "line": 363, + "column": 38, + "meta": {} + }, + { + "line": 485, + "column": 40, + "meta": {} + }, + { + "line": 487, + "column": 24, + "meta": {} + }, + { + "line": 488, + "column": 24, + "meta": {} + }, + { + "line": 490, + "column": 24, + "meta": {} + }, + { + "line": 491, + "column": 24, + "meta": {} + }, + { + "line": 493, + "column": 42, + "meta": {} + }, + { + "line": 527, + "column": 52, + "meta": {} + }, + { + "line": 528, + "column": 32, + "meta": {} + }, + { + "line": 529, + "column": 54, + "meta": {} + }, + { + "line": 569, + "column": 40, + "meta": {} + }, + { + "line": 571, + "column": 24, + "meta": {} + }, + { + "line": 572, + "column": 24, + "meta": {} + }, + { + "line": 574, + "column": 24, + "meta": {} + }, + { + "line": 575, + "column": 24, + "meta": {} + }, + { + "line": 577, + "column": 42, + "meta": {} + }, + { + "line": 597, + "column": 9, + "meta": {} + }, + { + "line": 616, + "column": 16, + "meta": {} + }, + { + "line": 617, + "column": 19, + "meta": {} + }, + { + "line": 619, + "column": 9, + "meta": {} + }, + { + "line": 621, + "column": 39, + "meta": {} + }, + { + "line": 626, + "column": 30, + "meta": {} + }, + { + "line": 628, + "column": 73, + "meta": {} + }, + { + "line": 633, + "column": 24, + "meta": {} + }, + { + "line": 645, + "column": 17, + "meta": {} + }, + { + "line": 646, + "column": 20, + "meta": {} + }, + { + "line": 647, + "column": 73, + "meta": {} + }, + { + "line": 649, + "column": 38, + "meta": {} + }, + { + "line": 650, + "column": 20, + "meta": {} + }, + { + "line": 660, + "column": 12, + "meta": {} + }, + { + "line": 661, + "column": 12, + "meta": {} + }, + { + "line": 662, + "column": 72, + "meta": {} + }, + { + "line": 664, + "column": 30, + "meta": {} + }, + { + "line": 665, + "column": 12, + "meta": {} + }, + { + "line": 835, + "column": 40, + "meta": {} + }, + { + "line": 836, + "column": 20, + "meta": {} + }, + { + "line": 837, + "column": 42, + "meta": {} + }, + { + "line": 851, + "column": 40, + "meta": {} + }, + { + "line": 852, + "column": 20, + "meta": {} + }, + { + "line": 853, + "column": 20, + "meta": {} + }, + { + "line": 854, + "column": 42, + "meta": {} + }, + { + "line": 1109, + "column": 9, + "meta": {} + }, + { + "line": 1199, + "column": 9, + "meta": {} + }, + { + "line": 1251, + "column": 52, + "meta": {} + }, + { + "line": 1273, + "column": 36, + "meta": {} + }, + { + "line": 1274, + "column": 16, + "meta": {} + }, + { + "line": 1275, + "column": 38, + "meta": {} + }, + { + "line": 1299, + "column": 9, + "meta": {} + }, + { + "line": 1307, + "column": 44, + "meta": {} + }, + { + "line": 1308, + "column": 24, + "meta": {} + }, + { + "line": 1309, + "column": 46, + "meta": {} + }, + { + "line": 1319, + "column": 40, + "meta": {} + }, + { + "line": 1320, + "column": 20, + "meta": {} + }, + { + "line": 1321, + "column": 42, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "logger.c", + "locations": [ + { + "line": 251, + "column": 89, + "meta": {} + }, + { + "line": 289, + "column": 66, + "meta": {} + }, + { + "line": 352, + "column": 56, + "meta": {} + }, + { + "line": 374, + "column": 22, + "meta": {} + }, + { + "line": 504, + "column": 31, + "meta": {} + }, + { + "line": 506, + "column": 5, + "meta": {} + }, + { + "line": 507, + "column": 5, + "meta": {} + }, + { + "line": 508, + "column": 5, + "meta": {} + }, + { + "line": 509, + "column": 5, + "meta": {} + }, + { + "line": 525, + "column": 23, + "meta": {} + }, + { + "line": 526, + "column": 45, + "meta": {} + }, + { + "line": 553, + "column": 27, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "globals.c", + "locations": [ + { + "line": 22, + "column": 8, + "meta": {} + }, + { + "line": 23, + "column": 8, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "memcached.c", + "locations": [ + { + "line": 91, + "column": 4, + "meta": {} + }, + { + "line": 92, + "column": 13, + "meta": {} + }, + { + "line": 111, + "column": 8, + "meta": {} + }, + { + "line": 112, + "column": 8, + "meta": {} + }, + { + "line": 202, + "column": 13, + "meta": {} + }, + { + "line": 203, + "column": 13, + "meta": {} + }, + { + "line": 204, + "column": 13, + "meta": {} + }, + { + "line": 205, + "column": 5, + "meta": {} + }, + { + "line": 212, + "column": 5, + "meta": {} + }, + { + "line": 215, + "column": 6, + "meta": {} + }, + { + "line": 217, + "column": 13, + "meta": {} + }, + { + "line": 218, + "column": 5, + "meta": {} + }, + { + "line": 220, + "column": 17, + "meta": {} + }, + { + "line": 221, + "column": 10, + "meta": {} + }, + { + "line": 417, + "column": 24, + "meta": {} + }, + { + "line": 514, + "column": 40, + "meta": {} + }, + { + "line": 515, + "column": 20, + "meta": {} + }, + { + "line": 516, + "column": 42, + "meta": {} + }, + { + "line": 563, + "column": 13, + "meta": {} + }, + { + "line": 584, + "column": 13, + "meta": {} + }, + { + "line": 591, + "column": 9, + "meta": {} + }, + { + "line": 717, + "column": 5, + "meta": {} + }, + { + "line": 718, + "column": 5, + "meta": {} + }, + { + "line": 738, + "column": 40, + "meta": {} + }, + { + "line": 739, + "column": 20, + "meta": {} + }, + { + "line": 740, + "column": 42, + "meta": {} + }, + { + "line": 747, + "column": 40, + "meta": {} + }, + { + "line": 748, + "column": 20, + "meta": {} + }, + { + "line": 750, + "column": 24, + "meta": {} + }, + { + "line": 751, + "column": 42, + "meta": {} + }, + { + "line": 772, + "column": 48, + "meta": {} + }, + { + "line": 773, + "column": 28, + "meta": {} + }, + { + "line": 774, + "column": 50, + "meta": {} + }, + { + "line": 908, + "column": 5, + "meta": {} + }, + { + "line": 1048, + "column": 24, + "meta": {} + }, + { + "line": 1096, + "column": 24, + "meta": {} + }, + { + "line": 1119, + "column": 20, + "meta": {} + }, + { + "line": 1123, + "column": 21, + "meta": {} + }, + { + "line": 1125, + "column": 16, + "meta": {} + }, + { + "line": 1174, + "column": 16, + "meta": {} + }, + { + "line": 1252, + "column": 24, + "meta": {} + }, + { + "line": 1255, + "column": 20, + "meta": {} + }, + { + "line": 1278, + "column": 8, + "meta": {} + }, + { + "line": 1281, + "column": 26, + "meta": {} + }, + { + "line": 1284, + "column": 20, + "meta": {} + }, + { + "line": 1286, + "column": 24, + "meta": {} + }, + { + "line": 1297, + "column": 8, + "meta": {} + }, + { + "line": 1300, + "column": 18, + "meta": {} + }, + { + "line": 1301, + "column": 23, + "meta": {} + }, + { + "line": 1302, + "column": 35, + "meta": {} + }, + { + "line": 1306, + "column": 12, + "meta": {} + }, + { + "line": 1308, + "column": 24, + "meta": {} + }, + { + "line": 1314, + "column": 32, + "meta": {} + }, + { + "line": 1317, + "column": 21, + "meta": {} + }, + { + "line": 1318, + "column": 32, + "meta": {} + }, + { + "line": 1320, + "column": 16, + "meta": {} + }, + { + "line": 1321, + "column": 16, + "meta": {} + }, + { + "line": 1324, + "column": 13, + "meta": {} + }, + { + "line": 1333, + "column": 13, + "meta": {} + }, + { + "line": 1346, + "column": 19, + "meta": {} + }, + { + "line": 1349, + "column": 20, + "meta": {} + }, + { + "line": 1352, + "column": 19, + "meta": {} + }, + { + "line": 1355, + "column": 22, + "meta": {} + }, + { + "line": 1358, + "column": 15, + "meta": {} + }, + { + "line": 1532, + "column": 41, + "meta": {} + }, + { + "line": 1533, + "column": 52, + "meta": {} + }, + { + "line": 1534, + "column": 32, + "meta": {} + }, + { + "line": 1535, + "column": 54, + "meta": {} + }, + { + "line": 1548, + "column": 52, + "meta": {} + }, + { + "line": 1549, + "column": 32, + "meta": {} + }, + { + "line": 1550, + "column": 54, + "meta": {} + }, + { + "line": 1554, + "column": 52, + "meta": {} + }, + { + "line": 1555, + "column": 32, + "meta": {} + }, + { + "line": 1556, + "column": 54, + "meta": {} + }, + { + "line": 1629, + "column": 48, + "meta": {} + }, + { + "line": 1630, + "column": 28, + "meta": {} + }, + { + "line": 1631, + "column": 50, + "meta": {} + }, + { + "line": 1655, + "column": 65, + "meta": {} + }, + { + "line": 1663, + "column": 62, + "meta": {} + }, + { + "line": 1667, + "column": 49, + "meta": {} + }, + { + "line": 1674, + "column": 16, + "meta": {} + }, + { + "line": 1682, + "column": 9, + "meta": {} + }, + { + "line": 1685, + "column": 27, + "meta": {} + }, + { + "line": 1686, + "column": 13, + "meta": {} + }, + { + "line": 1690, + "column": 19, + "meta": {} + }, + { + "line": 1691, + "column": 17, + "meta": {} + }, + { + "line": 1692, + "column": 17, + "meta": {} + }, + { + "line": 1693, + "column": 10, + "meta": {} + }, + { + "line": 1695, + "column": 21, + "meta": {} + }, + { + "line": 1712, + "column": 36, + "meta": {} + }, + { + "line": 1715, + "column": 38, + "meta": {} + }, + { + "line": 1721, + "column": 65, + "meta": {} + }, + { + "line": 1722, + "column": 66, + "meta": {} + }, + { + "line": 1724, + "column": 73, + "meta": {} + }, + { + "line": 1726, + "column": 48, + "meta": {} + }, + { + "line": 1727, + "column": 72, + "meta": {} + }, + { + "line": 1728, + "column": 74, + "meta": {} + }, + { + "line": 1729, + "column": 74, + "meta": {} + }, + { + "line": 1730, + "column": 70, + "meta": {} + }, + { + "line": 1731, + "column": 70, + "meta": {} + }, + { + "line": 1732, + "column": 75, + "meta": {} + }, + { + "line": 1733, + "column": 68, + "meta": {} + }, + { + "line": 1734, + "column": 39, + "meta": {} + }, + { + "line": 1735, + "column": 63, + "meta": {} + }, + { + "line": 1736, + "column": 61, + "meta": {} + }, + { + "line": 1737, + "column": 65, + "meta": {} + }, + { + "line": 1738, + "column": 65, + "meta": {} + }, + { + "line": 1739, + "column": 64, + "meta": {} + }, + { + "line": 1740, + "column": 62, + "meta": {} + }, + { + "line": 1741, + "column": 66, + "meta": {} + }, + { + "line": 1742, + "column": 67, + "meta": {} + }, + { + "line": 1743, + "column": 67, + "meta": {} + }, + { + "line": 1746, + "column": 72, + "meta": {} + }, + { + "line": 1747, + "column": 80, + "meta": {} + }, + { + "line": 1748, + "column": 76, + "meta": {} + }, + { + "line": 1749, + "column": 81, + "meta": {} + }, + { + "line": 1750, + "column": 78, + "meta": {} + }, + { + "line": 1751, + "column": 80, + "meta": {} + }, + { + "line": 1754, + "column": 69, + "meta": {} + }, + { + "line": 1755, + "column": 65, + "meta": {} + }, + { + "line": 1756, + "column": 67, + "meta": {} + }, + { + "line": 1757, + "column": 63, + "meta": {} + }, + { + "line": 1758, + "column": 67, + "meta": {} + }, + { + "line": 1759, + "column": 63, + "meta": {} + }, + { + "line": 1760, + "column": 66, + "meta": {} + }, + { + "line": 1761, + "column": 62, + "meta": {} + }, + { + "line": 1762, + "column": 64, + "meta": {} + }, + { + "line": 1763, + "column": 64, + "meta": {} + }, + { + "line": 1764, + "column": 68, + "meta": {} + }, + { + "line": 1765, + "column": 65, + "meta": {} + }, + { + "line": 1766, + "column": 67, + "meta": {} + }, + { + "line": 1768, + "column": 70, + "meta": {} + }, + { + "line": 1770, + "column": 66, + "meta": {} + }, + { + "line": 1771, + "column": 69, + "meta": {} + }, + { + "line": 1773, + "column": 42, + "meta": {} + }, + { + "line": 1774, + "column": 68, + "meta": {} + }, + { + "line": 1775, + "column": 55, + "meta": {} + }, + { + "line": 1777, + "column": 67, + "meta": {} + }, + { + "line": 1778, + "column": 43, + "meta": {} + }, + { + "line": 1779, + "column": 59, + "meta": {} + }, + { + "line": 1780, + "column": 44, + "meta": {} + }, + { + "line": 1782, + "column": 54, + "meta": {} + }, + { + "line": 1783, + "column": 60, + "meta": {} + }, + { + "line": 1784, + "column": 62, + "meta": {} + }, + { + "line": 1785, + "column": 61, + "meta": {} + }, + { + "line": 1786, + "column": 57, + "meta": {} + }, + { + "line": 1787, + "column": 59, + "meta": {} + }, + { + "line": 1788, + "column": 52, + "meta": {} + }, + { + "line": 1789, + "column": 44, + "meta": {} + }, + { + "line": 1792, + "column": 50, + "meta": {} + }, + { + "line": 1793, + "column": 49, + "meta": {} + }, + { + "line": 1796, + "column": 75, + "meta": {} + }, + { + "line": 1799, + "column": 37, + "meta": {} + }, + { + "line": 1800, + "column": 67, + "meta": {} + }, + { + "line": 1801, + "column": 67, + "meta": {} + }, + { + "line": 1802, + "column": 68, + "meta": {} + }, + { + "line": 1803, + "column": 65, + "meta": {} + }, + { + "line": 1808, + "column": 74, + "meta": {} + }, + { + "line": 1809, + "column": 77, + "meta": {} + }, + { + "line": 1810, + "column": 77, + "meta": {} + }, + { + "line": 1812, + "column": 22, + "meta": {} + }, + { + "line": 1834, + "column": 73, + "meta": {} + }, + { + "line": 1836, + "column": 73, + "meta": {} + }, + { + "line": 1842, + "column": 41, + "meta": {} + }, + { + "line": 1843, + "column": 16, + "meta": {} + }, + { + "line": 1896, + "column": 43, + "meta": {} + }, + { + "line": 1931, + "column": 10, + "meta": {} + }, + { + "line": 1934, + "column": 13, + "meta": {} + }, + { + "line": 1938, + "column": 62, + "meta": {} + }, + { + "line": 1939, + "column": 67, + "meta": {} + }, + { + "line": 1940, + "column": 68, + "meta": {} + }, + { + "line": 1943, + "column": 18, + "meta": {} + }, + { + "line": 1945, + "column": 18, + "meta": {} + }, + { + "line": 1947, + "column": 19, + "meta": {} + }, + { + "line": 1949, + "column": 18, + "meta": {} + }, + { + "line": 1951, + "column": 18, + "meta": {} + }, + { + "line": 1953, + "column": 18, + "meta": {} + }, + { + "line": 2073, + "column": 14, + "meta": {} + }, + { + "line": 2082, + "column": 16, + "meta": {} + }, + { + "line": 2111, + "column": 23, + "meta": {} + }, + { + "line": 2116, + "column": 21, + "meta": {} + }, + { + "line": 2118, + "column": 16, + "meta": {} + }, + { + "line": 2121, + "column": 18, + "meta": {} + }, + { + "line": 2415, + "column": 36, + "meta": {} + }, + { + "line": 2416, + "column": 16, + "meta": {} + }, + { + "line": 2417, + "column": 38, + "meta": {} + }, + { + "line": 2484, + "column": 36, + "meta": {} + }, + { + "line": 2486, + "column": 20, + "meta": {} + }, + { + "line": 2488, + "column": 20, + "meta": {} + }, + { + "line": 2490, + "column": 38, + "meta": {} + }, + { + "line": 2503, + "column": 14, + "meta": {} + }, + { + "line": 2505, + "column": 14, + "meta": {} + }, + { + "line": 2598, + "column": 40, + "meta": {} + }, + { + "line": 2599, + "column": 20, + "meta": {} + }, + { + "line": 2600, + "column": 42, + "meta": {} + }, + { + "line": 2656, + "column": 17, + "meta": {} + }, + { + "line": 2673, + "column": 44, + "meta": {} + }, + { + "line": 2674, + "column": 24, + "meta": {} + }, + { + "line": 2675, + "column": 46, + "meta": {} + }, + { + "line": 2739, + "column": 39, + "meta": {} + }, + { + "line": 2740, + "column": 42, + "meta": {} + }, + { + "line": 2741, + "column": 9, + "meta": {} + }, + { + "line": 2742, + "column": 9, + "meta": {} + }, + { + "line": 2746, + "column": 9, + "meta": {} + }, + { + "line": 2747, + "column": 23, + "meta": {} + }, + { + "line": 2748, + "column": 9, + "meta": {} + }, + { + "line": 2908, + "column": 40, + "meta": {} + }, + { + "line": 2909, + "column": 20, + "meta": {} + }, + { + "line": 2910, + "column": 42, + "meta": {} + }, + { + "line": 3044, + "column": 40, + "meta": {} + }, + { + "line": 3045, + "column": 20, + "meta": {} + }, + { + "line": 3046, + "column": 42, + "meta": {} + }, + { + "line": 3132, + "column": 48, + "meta": {} + }, + { + "line": 3133, + "column": 28, + "meta": {} + }, + { + "line": 3134, + "column": 50, + "meta": {} + }, + { + "line": 3224, + "column": 26, + "meta": {} + }, + { + "line": 3226, + "column": 21, + "meta": {} + }, + { + "line": 3272, + "column": 29, + "meta": {} + }, + { + "line": 3356, + "column": 48, + "meta": {} + }, + { + "line": 3357, + "column": 28, + "meta": {} + }, + { + "line": 3358, + "column": 50, + "meta": {} + }, + { + "line": 3409, + "column": 52, + "meta": {} + }, + { + "line": 3410, + "column": 32, + "meta": {} + }, + { + "line": 3411, + "column": 54, + "meta": {} + }, + { + "line": 3484, + "column": 48, + "meta": {} + }, + { + "line": 3485, + "column": 28, + "meta": {} + }, + { + "line": 3486, + "column": 50, + "meta": {} + }, + { + "line": 3784, + "column": 33, + "meta": {} + }, + { + "line": 4026, + "column": 24, + "meta": {} + }, + { + "line": 4104, + "column": 55, + "meta": {} + }, + { + "line": 4105, + "column": 72, + "meta": {} + }, + { + "line": 4107, + "column": 44, + "meta": {} + }, + { + "line": 4124, + "column": 47, + "meta": {} + }, + { + "line": 4173, + "column": 67, + "meta": {} + }, + { + "line": 4554, + "column": 44, + "meta": {} + }, + { + "line": 5513, + "column": 22, + "meta": {} + }, + { + "line": 6125, + "column": 5, + "meta": {} + }, + { + "line": 6348, + "column": 9, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "items.c", + "locations": [ + { + "line": 53, + "column": 7, + "meta": {} + }, + { + "line": 57, + "column": 12, + "meta": {} + }, + { + "line": 60, + "column": 22, + "meta": {} + }, + { + "line": 61, + "column": 17, + "meta": {} + }, + { + "line": 62, + "column": 12, + "meta": {} + }, + { + "line": 69, + "column": 24, + "meta": {} + }, + { + "line": 71, + "column": 11, + "meta": {} + }, + { + "line": 75, + "column": 21, + "meta": {} + }, + { + "line": 81, + "column": 14, + "meta": {} + }, + { + "line": 83, + "column": 9, + "meta": {} + }, + { + "line": 84, + "column": 9, + "meta": {} + }, + { + "line": 85, + "column": 9, + "meta": {} + }, + { + "line": 209, + "column": 13, + "meta": {} + }, + { + "line": 296, + "column": 13, + "meta": {} + }, + { + "line": 381, + "column": 11, + "meta": {} + }, + { + "line": 396, + "column": 5, + "meta": {} + }, + { + "line": 397, + "column": 5, + "meta": {} + }, + { + "line": 398, + "column": 5, + "meta": {} + }, + { + "line": 401, + "column": 10, + "meta": {} + }, + { + "line": 442, + "column": 9, + "meta": {} + }, + { + "line": 491, + "column": 5, + "meta": {} + }, + { + "line": 492, + "column": 5, + "meta": {} + }, + { + "line": 493, + "column": 5, + "meta": {} + }, + { + "line": 501, + "column": 10, + "meta": {} + }, + { + "line": 511, + "column": 9, + "meta": {} + }, + { + "line": 512, + "column": 9, + "meta": {} + }, + { + "line": 514, + "column": 14, + "meta": {} + }, + { + "line": 527, + "column": 9, + "meta": {} + }, + { + "line": 528, + "column": 9, + "meta": {} + }, + { + "line": 530, + "column": 14, + "meta": {} + }, + { + "line": 644, + "column": 36, + "meta": {} + }, + { + "line": 647, + "column": 16, + "meta": {} + }, + { + "line": 650, + "column": 14, + "meta": {} + }, + { + "line": 655, + "column": 32, + "meta": {} + }, + { + "line": 661, + "column": 28, + "meta": {} + }, + { + "line": 671, + "column": 11, + "meta": {} + }, + { + "line": 672, + "column": 9, + "meta": {} + }, + { + "line": 673, + "column": 35, + "meta": {} + }, + { + "line": 681, + "column": 45, + "meta": {} + }, + { + "line": 682, + "column": 45, + "meta": {} + }, + { + "line": 683, + "column": 42, + "meta": {} + }, + { + "line": 684, + "column": 35, + "meta": {} + }, + { + "line": 685, + "column": 37, + "meta": {} + }, + { + "line": 686, + "column": 45, + "meta": {} + }, + { + "line": 687, + "column": 49, + "meta": {} + }, + { + "line": 688, + "column": 45, + "meta": {} + }, + { + "line": 689, + "column": 41, + "meta": {} + }, + { + "line": 690, + "column": 41, + "meta": {} + }, + { + "line": 691, + "column": 44, + "meta": {} + }, + { + "line": 692, + "column": 43, + "meta": {} + }, + { + "line": 728, + "column": 11, + "meta": {} + }, + { + "line": 729, + "column": 19, + "meta": {} + }, + { + "line": 730, + "column": 17, + "meta": {} + }, + { + "line": 731, + "column": 9, + "meta": {} + }, + { + "line": 734, + "column": 39, + "meta": {} + }, + { + "line": 749, + "column": 35, + "meta": {} + }, + { + "line": 750, + "column": 43, + "meta": {} + }, + { + "line": 751, + "column": 39, + "meta": {} + }, + { + "line": 752, + "column": 39, + "meta": {} + }, + { + "line": 753, + "column": 37, + "meta": {} + }, + { + "line": 754, + "column": 45, + "meta": {} + }, + { + "line": 755, + "column": 45, + "meta": {} + }, + { + "line": 756, + "column": 42, + "meta": {} + }, + { + "line": 757, + "column": 45, + "meta": {} + }, + { + "line": 758, + "column": 49, + "meta": {} + }, + { + "line": 759, + "column": 45, + "meta": {} + }, + { + "line": 760, + "column": 41, + "meta": {} + }, + { + "line": 761, + "column": 41, + "meta": {} + }, + { + "line": 762, + "column": 44, + "meta": {} + }, + { + "line": 763, + "column": 43, + "meta": {} + }, + { + "line": 775, + "column": 43, + "meta": {} + }, + { + "line": 778, + "column": 49, + "meta": {} + }, + { + "line": 781, + "column": 50, + "meta": {} + }, + { + "line": 784, + "column": 50, + "meta": {} + }, + { + "line": 787, + "column": 50, + "meta": {} + }, + { + "line": 858, + "column": 9, + "meta": {} + }, + { + "line": 861, + "column": 11, + "meta": {} + }, + { + "line": 863, + "column": 17, + "meta": {} + }, + { + "line": 864, + "column": 9, + "meta": {} + }, + { + "line": 866, + "column": 19, + "meta": {} + }, + { + "line": 870, + "column": 11, + "meta": {} + }, + { + "line": 871, + "column": 9, + "meta": {} + }, + { + "line": 873, + "column": 5, + "meta": {} + }, + { + "line": 874, + "column": 5, + "meta": {} + }, + { + "line": 875, + "column": 5, + "meta": {} + }, + { + "line": 878, + "column": 11, + "meta": {} + }, + { + "line": 879, + "column": 17, + "meta": {} + }, + { + "line": 883, + "column": 16, + "meta": {} + }, + { + "line": 884, + "column": 14, + "meta": {} + }, + { + "line": 885, + "column": 13, + "meta": {} + }, + { + "line": 894, + "column": 19, + "meta": {} + }, + { + "line": 897, + "column": 11, + "meta": {} + }, + { + "line": 898, + "column": 17, + "meta": {} + }, + { + "line": 899, + "column": 9, + "meta": {} + }, + { + "line": 900, + "column": 14, + "meta": {} + }, + { + "line": 901, + "column": 9, + "meta": {} + }, + { + "line": 904, + "column": 19, + "meta": {} + }, + { + "line": 907, + "column": 11, + "meta": {} + }, + { + "line": 908, + "column": 9, + "meta": {} + }, + { + "line": 913, + "column": 18, + "meta": {} + }, + { + "line": 919, + "column": 11, + "meta": {} + }, + { + "line": 920, + "column": 9, + "meta": {} + }, + { + "line": 925, + "column": 18, + "meta": {} + }, + { + "line": 934, + "column": 11, + "meta": {} + }, + { + "line": 935, + "column": 17, + "meta": {} + }, + { + "line": 937, + "column": 9, + "meta": {} + }, + { + "line": 939, + "column": 25, + "meta": {} + }, + { + "line": 940, + "column": 17, + "meta": {} + }, + { + "line": 943, + "column": 40, + "meta": {} + }, + { + "line": 950, + "column": 9, + "meta": {} + }, + { + "line": 951, + "column": 19, + "meta": {} + }, + { + "line": 1001, + "column": 44, + "meta": {} + }, + { + "line": 1002, + "column": 24, + "meta": {} + }, + { + "line": 1003, + "column": 46, + "meta": {} + }, + { + "line": 1013, + "column": 44, + "meta": {} + }, + { + "line": 1014, + "column": 24, + "meta": {} + }, + { + "line": 1015, + "column": 46, + "meta": {} + }, + { + "line": 1121, + "column": 17, + "meta": {} + }, + { + "line": 1126, + "column": 21, + "meta": {} + }, + { + "line": 1139, + "column": 17, + "meta": {} + }, + { + "line": 1141, + "column": 21, + "meta": {} + }, + { + "line": 1169, + "column": 29, + "meta": {} + }, + { + "line": 1176, + "column": 29, + "meta": {} + }, + { + "line": 1183, + "column": 25, + "meta": {} + }, + { + "line": 1201, + "column": 25, + "meta": {} + }, + { + "line": 1202, + "column": 25, + "meta": {} + }, + { + "line": 1204, + "column": 29, + "meta": {} + }, + { + "line": 1206, + "column": 29, + "meta": {} + }, + { + "line": 1209, + "column": 29, + "meta": {} + }, + { + "line": 1224, + "column": 25, + "meta": {} + }, + { + "line": 1462, + "column": 16, + "meta": {} + }, + { + "line": 1606, + "column": 9, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "extstore.c", + "locations": [ + { + "line": 31, + "column": 42, + "meta": {} + }, + { + "line": 32, + "column": 45, + "meta": {} + }, + { + "line": 34, + "column": 28, + "meta": {} + }, + { + "line": 35, + "column": 8, + "meta": {} + }, + { + "line": 36, + "column": 30, + "meta": {} + }, + { + "line": 40, + "column": 28, + "meta": {} + }, + { + "line": 41, + "column": 8, + "meta": {} + }, + { + "line": 42, + "column": 30, + "meta": {} + }, + { + "line": 110, + "column": 21, + "meta": {} + }, + { + "line": 111, + "column": 21, + "meta": {} + }, + { + "line": 157, + "column": 11, + "meta": {} + }, + { + "line": 158, + "column": 19, + "meta": {} + }, + { + "line": 161, + "column": 20, + "meta": {} + }, + { + "line": 181, + "column": 56, + "meta": {} + }, + { + "line": 184, + "column": 30, + "meta": {} + }, + { + "line": 328, + "column": 25, + "meta": {} + }, + { + "line": 329, + "column": 8, + "meta": {} + }, + { + "line": 331, + "column": 8, + "meta": {} + }, + { + "line": 332, + "column": 8, + "meta": {} + }, + { + "line": 351, + "column": 28, + "meta": {} + }, + { + "line": 579, + "column": 8, + "meta": {} + }, + { + "line": 580, + "column": 8, + "meta": {} + }, + { + "line": 581, + "column": 8, + "meta": {} + }, + { + "line": 582, + "column": 8, + "meta": {} + }, + { + "line": 649, + "column": 12, + "meta": {} + }, + { + "line": 650, + "column": 12, + "meta": {} + }, + { + "line": 768, + "column": 28, + "meta": {} + }, + { + "line": 769, + "column": 28, + "meta": {} + }, + { + "line": 832, + "column": 8, + "meta": {} + }, + { + "line": 833, + "column": 8, + "meta": {} + }, + { + "line": 834, + "column": 8, + "meta": {} + }, + { + "line": 949, + "column": 20, + "meta": {} + }, + { + "line": 950, + "column": 20, + "meta": {} + }, + { + "line": 951, + "column": 20, + "meta": {} + }, + { + "line": 961, + "column": 16, + "meta": {} + }, + { + "line": 963, + "column": 19, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "slab_automove.c", + "locations": [ + { + "line": 28, + "column": 10, + "meta": {} + }, + { + "line": 29, + "column": 10, + "meta": {} + }, + { + "line": 30, + "column": 10, + "meta": {} + }, + { + "line": 31, + "column": 10, + "meta": {} + }, + { + "line": 49, + "column": 15, + "meta": {} + }, + { + "line": 50, + "column": 15, + "meta": {} + }, + { + "line": 87, + "column": 15, + "meta": {} + }, + { + "line": 88, + "column": 15, + "meta": {} + }, + { + "line": 155, + "column": 25, + "meta": {} + }, + { + "line": 157, + "column": 25, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "proto_text.c", + "locations": [ + { + "line": 34, + "column": 36, + "meta": {} + }, + { + "line": 35, + "column": 16, + "meta": {} + }, + { + "line": 36, + "column": 38, + "meta": {} + }, + { + "line": 347, + "column": 40, + "meta": {} + }, + { + "line": 348, + "column": 20, + "meta": {} + }, + { + "line": 349, + "column": 42, + "meta": {} + }, + { + "line": 352, + "column": 40, + "meta": {} + }, + { + "line": 353, + "column": 20, + "meta": {} + }, + { + "line": 354, + "column": 20, + "meta": {} + }, + { + "line": 355, + "column": 42, + "meta": {} + }, + { + "line": 497, + "column": 17, + "meta": {} + }, + { + "line": 524, + "column": 58, + "meta": {} + }, + { + "line": 525, + "column": 38, + "meta": {} + }, + { + "line": 526, + "column": 60, + "meta": {} + }, + { + "line": 555, + "column": 48, + "meta": {} + }, + { + "line": 557, + "column": 32, + "meta": {} + }, + { + "line": 558, + "column": 32, + "meta": {} + }, + { + "line": 560, + "column": 32, + "meta": {} + }, + { + "line": 561, + "column": 32, + "meta": {} + }, + { + "line": 563, + "column": 50, + "meta": {} + }, + { + "line": 573, + "column": 48, + "meta": {} + }, + { + "line": 575, + "column": 32, + "meta": {} + }, + { + "line": 576, + "column": 32, + "meta": {} + }, + { + "line": 578, + "column": 32, + "meta": {} + }, + { + "line": 579, + "column": 32, + "meta": {} + }, + { + "line": 582, + "column": 50, + "meta": {} + }, + { + "line": 638, + "column": 28, + "meta": {} + }, + { + "line": 651, + "column": 15, + "meta": {} + }, + { + "line": 652, + "column": 27, + "meta": {} + }, + { + "line": 655, + "column": 44, + "meta": {} + }, + { + "line": 669, + "column": 16, + "meta": {} + }, + { + "line": 670, + "column": 19, + "meta": {} + }, + { + "line": 672, + "column": 9, + "meta": {} + }, + { + "line": 678, + "column": 21, + "meta": {} + }, + { + "line": 680, + "column": 21, + "meta": {} + }, + { + "line": 684, + "column": 39, + "meta": {} + }, + { + "line": 690, + "column": 41, + "meta": {} + }, + { + "line": 714, + "column": 17, + "meta": {} + }, + { + "line": 717, + "column": 26, + "meta": {} + }, + { + "line": 722, + "column": 17, + "meta": {} + }, + { + "line": 723, + "column": 20, + "meta": {} + }, + { + "line": 724, + "column": 70, + "meta": {} + }, + { + "line": 726, + "column": 38, + "meta": {} + }, + { + "line": 727, + "column": 20, + "meta": {} + }, + { + "line": 736, + "column": 12, + "meta": {} + }, + { + "line": 738, + "column": 12, + "meta": {} + }, + { + "line": 739, + "column": 62, + "meta": {} + }, + { + "line": 741, + "column": 30, + "meta": {} + }, + { + "line": 742, + "column": 12, + "meta": {} + }, + { + "line": 790, + "column": 36, + "meta": {} + }, + { + "line": 791, + "column": 16, + "meta": {} + }, + { + "line": 792, + "column": 38, + "meta": {} + }, + { + "line": 1169, + "column": 52, + "meta": {} + }, + { + "line": 1170, + "column": 32, + "meta": {} + }, + { + "line": 1171, + "column": 54, + "meta": {} + }, + { + "line": 1224, + "column": 40, + "meta": {} + }, + { + "line": 1226, + "column": 24, + "meta": {} + }, + { + "line": 1227, + "column": 24, + "meta": {} + }, + { + "line": 1229, + "column": 24, + "meta": {} + }, + { + "line": 1230, + "column": 24, + "meta": {} + }, + { + "line": 1232, + "column": 42, + "meta": {} + }, + { + "line": 1236, + "column": 40, + "meta": {} + }, + { + "line": 1238, + "column": 24, + "meta": {} + }, + { + "line": 1239, + "column": 24, + "meta": {} + }, + { + "line": 1241, + "column": 24, + "meta": {} + }, + { + "line": 1242, + "column": 24, + "meta": {} + }, + { + "line": 1245, + "column": 42, + "meta": {} + }, + { + "line": 1496, + "column": 44, + "meta": {} + }, + { + "line": 1497, + "column": 24, + "meta": {} + }, + { + "line": 1498, + "column": 46, + "meta": {} + }, + { + "line": 1522, + "column": 44, + "meta": {} + }, + { + "line": 1523, + "column": 24, + "meta": {} + }, + { + "line": 1524, + "column": 46, + "meta": {} + }, + { + "line": 1534, + "column": 40, + "meta": {} + }, + { + "line": 1535, + "column": 20, + "meta": {} + }, + { + "line": 1536, + "column": 42, + "meta": {} + }, + { + "line": 1662, + "column": 44, + "meta": {} + }, + { + "line": 1664, + "column": 28, + "meta": {} + }, + { + "line": 1666, + "column": 28, + "meta": {} + }, + { + "line": 1668, + "column": 46, + "meta": {} + }, + { + "line": 1831, + "column": 9, + "meta": {} + }, + { + "line": 1908, + "column": 40, + "meta": {} + }, + { + "line": 1909, + "column": 20, + "meta": {} + }, + { + "line": 1910, + "column": 20, + "meta": {} + }, + { + "line": 1911, + "column": 42, + "meta": {} + }, + { + "line": 1916, + "column": 40, + "meta": {} + }, + { + "line": 1917, + "column": 20, + "meta": {} + }, + { + "line": 1918, + "column": 20, + "meta": {} + }, + { + "line": 1919, + "column": 42, + "meta": {} + }, + { + "line": 1959, + "column": 40, + "meta": {} + }, + { + "line": 1961, + "column": 24, + "meta": {} + }, + { + "line": 1963, + "column": 24, + "meta": {} + }, + { + "line": 1965, + "column": 42, + "meta": {} + }, + { + "line": 2005, + "column": 9, + "meta": {} + }, + { + "line": 2012, + "column": 40, + "meta": {} + }, + { + "line": 2013, + "column": 20, + "meta": {} + }, + { + "line": 2014, + "column": 42, + "meta": {} + }, + { + "line": 2021, + "column": 40, + "meta": {} + }, + { + "line": 2022, + "column": 20, + "meta": {} + }, + { + "line": 2023, + "column": 42, + "meta": {} + }, + { + "line": 2302, + "column": 36, + "meta": {} + }, + { + "line": 2303, + "column": 16, + "meta": {} + }, + { + "line": 2304, + "column": 38, + "meta": {} + }, + { + "line": 2307, + "column": 54, + "meta": {} + }, + { + "line": 2617, + "column": 57, + "meta": {} + } + ] + } +] + diff --git a/targets/locations_memcached_stats_filtered.json b/targets/locations_memcached_stats_filtered.json new file mode 100644 index 0000000000..e371ddb09a --- /dev/null +++ b/targets/locations_memcached_stats_filtered.json @@ -0,0 +1,3956 @@ +[ + { + "term": "cmd", + "file": "tls.c", + "locations": [ + { + "line": 243, + "column": 5, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "thread.c", + "locations": [ + { + "line": 61, + "column": 20, + "meta": {} + }, + { + "line": 62, + "column": 24, + "meta": {} + }, + { + "line": 326, + "column": 13, + "meta": {} + }, + { + "line": 422, + "column": 33, + "meta": {} + }, + { + "line": 778, + "column": 25, + "meta": {} + }, + { + "line": 782, + "column": 27, + "meta": {} + }, + { + "line": 785, + "column": 18, + "meta": {} + }, + { + "line": 788, + "column": 41, + "meta": {} + }, + { + "line": 789, + "column": 29, + "meta": {} + }, + { + "line": 796, + "column": 29, + "meta": {} + }, + { + "line": 797, + "column": 36, + "meta": {} + }, + { + "line": 798, + "column": 29, + "meta": {} + }, + { + "line": 801, + "column": 43, + "meta": {} + }, + { + "line": 805, + "column": 18, + "meta": {} + }, + { + "line": 810, + "column": 12, + "meta": {} + }, + { + "line": 813, + "column": 41, + "meta": {} + }, + { + "line": 814, + "column": 17, + "meta": {} + }, + { + "line": 822, + "column": 17, + "meta": {} + }, + { + "line": 823, + "column": 25, + "meta": {} + }, + { + "line": 829, + "column": 13, + "meta": {} + }, + { + "line": 830, + "column": 29, + "meta": {} + }, + { + "line": 831, + "column": 13, + "meta": {} + }, + { + "line": 832, + "column": 29, + "meta": {} + }, + { + "line": 835, + "column": 9, + "meta": {} + }, + { + "line": 836, + "column": 9, + "meta": {} + }, + { + "line": 837, + "column": 9, + "meta": {} + }, + { + "line": 838, + "column": 43, + "meta": {} + }, + { + "line": 842, + "column": 11, + "meta": {} + }, + { + "line": 848, + "column": 30, + "meta": {} + }, + { + "line": 929, + "column": 9, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "storage.c", + "locations": [ + { + "line": 238, + "column": 10, + "meta": {} + }, + { + "line": 245, + "column": 21, + "meta": {} + }, + { + "line": 253, + "column": 18, + "meta": {} + }, + { + "line": 408, + "column": 5, + "meta": {} + }, + { + "line": 409, + "column": 5, + "meta": {} + }, + { + "line": 410, + "column": 5, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "stats_prefix.c", + "locations": [ + { + "line": 10, + "column": 29, + "meta": {} + }, + { + "line": 16, + "column": 6, + "meta": {} + }, + { + "line": 18, + "column": 19, + "meta": {} + }, + { + "line": 21, + "column": 6, + "meta": {} + }, + { + "line": 26, + "column": 27, + "meta": {} + }, + { + "line": 31, + "column": 16, + "meta": {} + }, + { + "line": 37, + "column": 15, + "meta": {} + }, + { + "line": 58, + "column": 23, + "meta": {} + }, + { + "line": 65, + "column": 42, + "meta": {} + }, + { + "line": 80, + "column": 24, + "meta": {} + }, + { + "line": 81, + "column": 12, + "meta": {} + }, + { + "line": 89, + "column": 6, + "meta": {} + }, + { + "line": 93, + "column": 11, + "meta": {} + }, + { + "line": 103, + "column": 6, + "meta": {} + }, + { + "line": 107, + "column": 11, + "meta": {} + }, + { + "line": 114, + "column": 6, + "meta": {} + }, + { + "line": 118, + "column": 11, + "meta": {} + }, + { + "line": 125, + "column": 7, + "meta": {} + }, + { + "line": 145, + "column": 32, + "meta": {} + }, + { + "line": 152, + "column": 27, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "testapp.c", + "locations": [ + { + "line": 25, + "column": 11, + "meta": {} + }, + { + "line": 247, + "column": 30, + "meta": {} + }, + { + "line": 250, + "column": 5, + "meta": {} + }, + { + "line": 251, + "column": 12, + "meta": {} + }, + { + "line": 253, + "column": 12, + "meta": {} + }, + { + "line": 256, + "column": 12, + "meta": {} + }, + { + "line": 259, + "column": 12, + "meta": {} + }, + { + "line": 261, + "column": 12, + "meta": {} + }, + { + "line": 263, + "column": 12, + "meta": {} + }, + { + "line": 265, + "column": 12, + "meta": {} + }, + { + "line": 270, + "column": 30, + "meta": {} + }, + { + "line": 272, + "column": 5, + "meta": {} + }, + { + "line": 274, + "column": 5, + "meta": {} + }, + { + "line": 275, + "column": 11, + "meta": {} + }, + { + "line": 278, + "column": 5, + "meta": {} + }, + { + "line": 281, + "column": 5, + "meta": {} + }, + { + "line": 284, + "column": 5, + "meta": {} + }, + { + "line": 290, + "column": 30, + "meta": {} + }, + { + "line": 292, + "column": 5, + "meta": {} + }, + { + "line": 294, + "column": 5, + "meta": {} + }, + { + "line": 295, + "column": 11, + "meta": {} + }, + { + "line": 300, + "column": 5, + "meta": {} + }, + { + "line": 305, + "column": 30, + "meta": {} + }, + { + "line": 307, + "column": 5, + "meta": {} + }, + { + "line": 309, + "column": 5, + "meta": {} + }, + { + "line": 310, + "column": 11, + "meta": {} + }, + { + "line": 315, + "column": 5, + "meta": {} + }, + { + "line": 320, + "column": 30, + "meta": {} + }, + { + "line": 328, + "column": 5, + "meta": {} + }, + { + "line": 330, + "column": 37, + "meta": {} + }, + { + "line": 332, + "column": 5, + "meta": {} + }, + { + "line": 335, + "column": 36, + "meta": {} + }, + { + "line": 337, + "column": 5, + "meta": {} + }, + { + "line": 340, + "column": 36, + "meta": {} + }, + { + "line": 342, + "column": 5, + "meta": {} + }, + { + "line": 345, + "column": 36, + "meta": {} + }, + { + "line": 347, + "column": 5, + "meta": {} + }, + { + "line": 350, + "column": 36, + "meta": {} + }, + { + "line": 353, + "column": 5, + "meta": {} + }, + { + "line": 357, + "column": 11, + "meta": {} + }, + { + "line": 374, + "column": 5, + "meta": {} + }, + { + "line": 375, + "column": 11, + "meta": {} + }, + { + "line": 384, + "column": 5, + "meta": {} + }, + { + "line": 840, + "column": 25, + "meta": {} + }, + { + "line": 845, + "column": 25, + "meta": {} + }, + { + "line": 2154, + "column": 28, + "meta": {} + }, + { + "line": 2240, + "column": 8, + "meta": {} + }, + { + "line": 2241, + "column": 8, + "meta": {} + }, + { + "line": 2242, + "column": 8, + "meta": {} + }, + { + "line": 2243, + "column": 8, + "meta": {} + }, + { + "line": 2244, + "column": 8, + "meta": {} + }, + { + "line": 2317, + "column": 5, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "slab_automove_extstore.c", + "locations": [ + { + "line": 43, + "column": 10, + "meta": {} + }, + { + "line": 44, + "column": 10, + "meta": {} + }, + { + "line": 45, + "column": 10, + "meta": {} + }, + { + "line": 46, + "column": 10, + "meta": {} + }, + { + "line": 74, + "column": 15, + "meta": {} + }, + { + "line": 75, + "column": 15, + "meta": {} + }, + { + "line": 142, + "column": 14, + "meta": {} + }, + { + "line": 180, + "column": 15, + "meta": {} + }, + { + "line": 181, + "column": 15, + "meta": {} + }, + { + "line": 264, + "column": 25, + "meta": {} + }, + { + "line": 266, + "column": 25, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "slabs.c", + "locations": [ + { + "line": 524, + "column": 36, + "meta": {} + }, + { + "line": 527, + "column": 16, + "meta": {} + }, + { + "line": 532, + "column": 14, + "meta": {} + }, + { + "line": 555, + "column": 22, + "meta": {} + }, + { + "line": 557, + "column": 27, + "meta": {} + }, + { + "line": 558, + "column": 19, + "meta": {} + }, + { + "line": 559, + "column": 17, + "meta": {} + }, + { + "line": 583, + "column": 48, + "meta": {} + }, + { + "line": 585, + "column": 48, + "meta": {} + }, + { + "line": 587, + "column": 48, + "meta": {} + }, + { + "line": 589, + "column": 48, + "meta": {} + }, + { + "line": 591, + "column": 48, + "meta": {} + }, + { + "line": 593, + "column": 48, + "meta": {} + }, + { + "line": 595, + "column": 48, + "meta": {} + }, + { + "line": 597, + "column": 48, + "meta": {} + }, + { + "line": 602, + "column": 25, + "meta": {} + }, + { + "line": 606, + "column": 9, + "meta": {} + }, + { + "line": 671, + "column": 12, + "meta": {} + }, + { + "line": 673, + "column": 14, + "meta": {} + }, + { + "line": 781, + "column": 5, + "meta": {} + }, + { + "line": 1096, + "column": 13, + "meta": {} + }, + { + "line": 1184, + "column": 5, + "meta": {} + }, + { + "line": 1185, + "column": 5, + "meta": {} + }, + { + "line": 1186, + "column": 5, + "meta": {} + }, + { + "line": 1187, + "column": 5, + "meta": {} + }, + { + "line": 1188, + "column": 5, + "meta": {} + }, + { + "line": 1189, + "column": 5, + "meta": {} + }, + { + "line": 1190, + "column": 5, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "crawler.c", + "locations": [ + { + "line": 149, + "column": 23, + "meta": {} + }, + { + "line": 151, + "column": 19, + "meta": {} + }, + { + "line": 152, + "column": 19, + "meta": {} + }, + { + "line": 161, + "column": 15, + "meta": {} + }, + { + "line": 162, + "column": 15, + "meta": {} + }, + { + "line": 184, + "column": 12, + "meta": {} + }, + { + "line": 346, + "column": 13, + "meta": {} + }, + { + "line": 457, + "column": 5, + "meta": {} + }, + { + "line": 559, + "column": 9, + "meta": {} + }, + { + "line": 560, + "column": 9, + "meta": {} + }, + { + "line": 589, + "column": 18, + "meta": {} + }, + { + "line": 641, + "column": 31, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "sizes.c", + "locations": [ + { + "line": 11, + "column": 46, + "meta": {} + }, + { + "line": 12, + "column": 21, + "meta": {} + }, + { + "line": 13, + "column": 34, + "meta": {} + }, + { + "line": 14, + "column": 41, + "meta": {} + }, + { + "line": 15, + "column": 21, + "meta": {} + }, + { + "line": 23, + "column": 60, + "meta": {} + }, + { + "line": 32, + "column": 21, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "assoc.c", + "locations": [ + { + "line": 68, + "column": 5, + "meta": {} + }, + { + "line": 69, + "column": 5, + "meta": {} + }, + { + "line": 132, + "column": 9, + "meta": {} + }, + { + "line": 133, + "column": 9, + "meta": {} + }, + { + "line": 134, + "column": 9, + "meta": {} + }, + { + "line": 227, + "column": 25, + "meta": {} + }, + { + "line": 228, + "column": 25, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "proto_bin.c", + "locations": [ + { + "line": 338, + "column": 44, + "meta": {} + }, + { + "line": 340, + "column": 28, + "meta": {} + }, + { + "line": 342, + "column": 28, + "meta": {} + }, + { + "line": 344, + "column": 46, + "meta": {} + }, + { + "line": 361, + "column": 36, + "meta": {} + }, + { + "line": 362, + "column": 16, + "meta": {} + }, + { + "line": 363, + "column": 38, + "meta": {} + }, + { + "line": 485, + "column": 40, + "meta": {} + }, + { + "line": 487, + "column": 24, + "meta": {} + }, + { + "line": 488, + "column": 24, + "meta": {} + }, + { + "line": 490, + "column": 24, + "meta": {} + }, + { + "line": 491, + "column": 24, + "meta": {} + }, + { + "line": 493, + "column": 42, + "meta": {} + }, + { + "line": 527, + "column": 52, + "meta": {} + }, + { + "line": 528, + "column": 32, + "meta": {} + }, + { + "line": 529, + "column": 54, + "meta": {} + }, + { + "line": 569, + "column": 40, + "meta": {} + }, + { + "line": 571, + "column": 24, + "meta": {} + }, + { + "line": 572, + "column": 24, + "meta": {} + }, + { + "line": 574, + "column": 24, + "meta": {} + }, + { + "line": 575, + "column": 24, + "meta": {} + }, + { + "line": 577, + "column": 42, + "meta": {} + }, + { + "line": 597, + "column": 9, + "meta": {} + }, + { + "line": 616, + "column": 16, + "meta": {} + }, + { + "line": 617, + "column": 19, + "meta": {} + }, + { + "line": 619, + "column": 9, + "meta": {} + }, + { + "line": 621, + "column": 39, + "meta": {} + }, + { + "line": 626, + "column": 30, + "meta": {} + }, + { + "line": 628, + "column": 73, + "meta": {} + }, + { + "line": 633, + "column": 24, + "meta": {} + }, + { + "line": 645, + "column": 17, + "meta": {} + }, + { + "line": 646, + "column": 20, + "meta": {} + }, + { + "line": 647, + "column": 73, + "meta": {} + }, + { + "line": 649, + "column": 38, + "meta": {} + }, + { + "line": 650, + "column": 20, + "meta": {} + }, + { + "line": 660, + "column": 12, + "meta": {} + }, + { + "line": 661, + "column": 12, + "meta": {} + }, + { + "line": 662, + "column": 72, + "meta": {} + }, + { + "line": 664, + "column": 30, + "meta": {} + }, + { + "line": 665, + "column": 12, + "meta": {} + }, + { + "line": 835, + "column": 40, + "meta": {} + }, + { + "line": 836, + "column": 20, + "meta": {} + }, + { + "line": 837, + "column": 42, + "meta": {} + }, + { + "line": 851, + "column": 40, + "meta": {} + }, + { + "line": 852, + "column": 20, + "meta": {} + }, + { + "line": 853, + "column": 20, + "meta": {} + }, + { + "line": 854, + "column": 42, + "meta": {} + }, + { + "line": 1109, + "column": 9, + "meta": {} + }, + { + "line": 1199, + "column": 9, + "meta": {} + }, + { + "line": 1251, + "column": 52, + "meta": {} + }, + { + "line": 1273, + "column": 36, + "meta": {} + }, + { + "line": 1274, + "column": 16, + "meta": {} + }, + { + "line": 1275, + "column": 38, + "meta": {} + }, + { + "line": 1299, + "column": 9, + "meta": {} + }, + { + "line": 1307, + "column": 44, + "meta": {} + }, + { + "line": 1308, + "column": 24, + "meta": {} + }, + { + "line": 1309, + "column": 46, + "meta": {} + }, + { + "line": 1319, + "column": 40, + "meta": {} + }, + { + "line": 1320, + "column": 20, + "meta": {} + }, + { + "line": 1321, + "column": 42, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "logger.c", + "locations": [ + { + "line": 251, + "column": 89, + "meta": {} + }, + { + "line": 289, + "column": 66, + "meta": {} + }, + { + "line": 352, + "column": 56, + "meta": {} + }, + { + "line": 374, + "column": 22, + "meta": {} + }, + { + "line": 504, + "column": 31, + "meta": {} + }, + { + "line": 506, + "column": 5, + "meta": {} + }, + { + "line": 507, + "column": 5, + "meta": {} + }, + { + "line": 508, + "column": 5, + "meta": {} + }, + { + "line": 509, + "column": 5, + "meta": {} + }, + { + "line": 525, + "column": 23, + "meta": {} + }, + { + "line": 526, + "column": 45, + "meta": {} + }, + { + "line": 553, + "column": 27, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "globals.c", + "locations": [ + { + "line": 22, + "column": 8, + "meta": {} + }, + { + "line": 23, + "column": 8, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "memcached.c", + "locations": [ + { + "line": 91, + "column": 4, + "meta": {} + }, + { + "line": 92, + "column": 13, + "meta": {} + }, + { + "line": 111, + "column": 8, + "meta": {} + }, + { + "line": 112, + "column": 8, + "meta": {} + }, + { + "line": 202, + "column": 13, + "meta": {} + }, + { + "line": 203, + "column": 13, + "meta": {} + }, + { + "line": 204, + "column": 13, + "meta": {} + }, + { + "line": 205, + "column": 5, + "meta": {} + }, + { + "line": 212, + "column": 5, + "meta": {} + }, + { + "line": 215, + "column": 6, + "meta": {} + }, + { + "line": 217, + "column": 13, + "meta": {} + }, + { + "line": 218, + "column": 5, + "meta": {} + }, + { + "line": 220, + "column": 17, + "meta": {} + }, + { + "line": 221, + "column": 10, + "meta": {} + }, + { + "line": 417, + "column": 24, + "meta": {} + }, + { + "line": 514, + "column": 40, + "meta": {} + }, + { + "line": 515, + "column": 20, + "meta": {} + }, + { + "line": 516, + "column": 42, + "meta": {} + }, + { + "line": 563, + "column": 13, + "meta": {} + }, + { + "line": 584, + "column": 13, + "meta": {} + }, + { + "line": 591, + "column": 9, + "meta": {} + }, + { + "line": 717, + "column": 5, + "meta": {} + }, + { + "line": 718, + "column": 5, + "meta": {} + }, + { + "line": 738, + "column": 40, + "meta": {} + }, + { + "line": 739, + "column": 20, + "meta": {} + }, + { + "line": 740, + "column": 42, + "meta": {} + }, + { + "line": 747, + "column": 40, + "meta": {} + }, + { + "line": 748, + "column": 20, + "meta": {} + }, + { + "line": 750, + "column": 24, + "meta": {} + }, + { + "line": 751, + "column": 42, + "meta": {} + }, + { + "line": 772, + "column": 48, + "meta": {} + }, + { + "line": 773, + "column": 28, + "meta": {} + }, + { + "line": 774, + "column": 50, + "meta": {} + }, + { + "line": 908, + "column": 5, + "meta": {} + }, + { + "line": 1048, + "column": 24, + "meta": {} + }, + { + "line": 1096, + "column": 24, + "meta": {} + }, + { + "line": 1119, + "column": 20, + "meta": {} + }, + { + "line": 1123, + "column": 21, + "meta": {} + }, + { + "line": 1125, + "column": 16, + "meta": {} + }, + { + "line": 1174, + "column": 16, + "meta": {} + }, + { + "line": 1252, + "column": 24, + "meta": {} + }, + { + "line": 1255, + "column": 20, + "meta": {} + }, + { + "line": 1278, + "column": 8, + "meta": {} + }, + { + "line": 1281, + "column": 26, + "meta": {} + }, + { + "line": 1284, + "column": 20, + "meta": {} + }, + { + "line": 1286, + "column": 24, + "meta": {} + }, + { + "line": 1297, + "column": 8, + "meta": {} + }, + { + "line": 1300, + "column": 18, + "meta": {} + }, + { + "line": 1301, + "column": 23, + "meta": {} + }, + { + "line": 1302, + "column": 35, + "meta": {} + }, + { + "line": 1306, + "column": 12, + "meta": {} + }, + { + "line": 1308, + "column": 24, + "meta": {} + }, + { + "line": 1314, + "column": 32, + "meta": {} + }, + { + "line": 1317, + "column": 21, + "meta": {} + }, + { + "line": 1318, + "column": 32, + "meta": {} + }, + { + "line": 1320, + "column": 16, + "meta": {} + }, + { + "line": 1321, + "column": 16, + "meta": {} + }, + { + "line": 1324, + "column": 13, + "meta": {} + }, + { + "line": 1333, + "column": 13, + "meta": {} + }, + { + "line": 1346, + "column": 19, + "meta": {} + }, + { + "line": 1349, + "column": 20, + "meta": {} + }, + { + "line": 1352, + "column": 19, + "meta": {} + }, + { + "line": 1355, + "column": 22, + "meta": {} + }, + { + "line": 1358, + "column": 15, + "meta": {} + }, + { + "line": 1532, + "column": 41, + "meta": {} + }, + { + "line": 1533, + "column": 52, + "meta": {} + }, + { + "line": 1534, + "column": 32, + "meta": {} + }, + { + "line": 1535, + "column": 54, + "meta": {} + }, + { + "line": 1548, + "column": 52, + "meta": {} + }, + { + "line": 1549, + "column": 32, + "meta": {} + }, + { + "line": 1550, + "column": 54, + "meta": {} + }, + { + "line": 1554, + "column": 52, + "meta": {} + }, + { + "line": 1555, + "column": 32, + "meta": {} + }, + { + "line": 1556, + "column": 54, + "meta": {} + }, + { + "line": 1629, + "column": 48, + "meta": {} + }, + { + "line": 1630, + "column": 28, + "meta": {} + }, + { + "line": 1631, + "column": 50, + "meta": {} + }, + { + "line": 1655, + "column": 65, + "meta": {} + }, + { + "line": 1663, + "column": 62, + "meta": {} + }, + { + "line": 1667, + "column": 49, + "meta": {} + }, + { + "line": 1674, + "column": 16, + "meta": {} + }, + { + "line": 1682, + "column": 9, + "meta": {} + }, + { + "line": 1685, + "column": 27, + "meta": {} + }, + { + "line": 1686, + "column": 13, + "meta": {} + }, + { + "line": 1690, + "column": 19, + "meta": {} + }, + { + "line": 1691, + "column": 17, + "meta": {} + }, + { + "line": 1692, + "column": 17, + "meta": {} + }, + { + "line": 1693, + "column": 10, + "meta": {} + }, + { + "line": 1695, + "column": 21, + "meta": {} + }, + { + "line": 1712, + "column": 36, + "meta": {} + }, + { + "line": 1715, + "column": 38, + "meta": {} + }, + { + "line": 1721, + "column": 65, + "meta": {} + }, + { + "line": 1722, + "column": 66, + "meta": {} + }, + { + "line": 1724, + "column": 73, + "meta": {} + }, + { + "line": 1726, + "column": 48, + "meta": {} + }, + { + "line": 1727, + "column": 72, + "meta": {} + }, + { + "line": 1728, + "column": 74, + "meta": {} + }, + { + "line": 1729, + "column": 74, + "meta": {} + }, + { + "line": 1730, + "column": 70, + "meta": {} + }, + { + "line": 1731, + "column": 70, + "meta": {} + }, + { + "line": 1732, + "column": 75, + "meta": {} + }, + { + "line": 1733, + "column": 68, + "meta": {} + }, + { + "line": 1734, + "column": 39, + "meta": {} + }, + { + "line": 1735, + "column": 63, + "meta": {} + }, + { + "line": 1736, + "column": 61, + "meta": {} + }, + { + "line": 1737, + "column": 65, + "meta": {} + }, + { + "line": 1738, + "column": 65, + "meta": {} + }, + { + "line": 1739, + "column": 64, + "meta": {} + }, + { + "line": 1740, + "column": 62, + "meta": {} + }, + { + "line": 1741, + "column": 66, + "meta": {} + }, + { + "line": 1742, + "column": 67, + "meta": {} + }, + { + "line": 1743, + "column": 67, + "meta": {} + }, + { + "line": 1746, + "column": 72, + "meta": {} + }, + { + "line": 1747, + "column": 80, + "meta": {} + }, + { + "line": 1748, + "column": 76, + "meta": {} + }, + { + "line": 1749, + "column": 81, + "meta": {} + }, + { + "line": 1750, + "column": 78, + "meta": {} + }, + { + "line": 1751, + "column": 80, + "meta": {} + }, + { + "line": 1754, + "column": 69, + "meta": {} + }, + { + "line": 1755, + "column": 65, + "meta": {} + }, + { + "line": 1756, + "column": 67, + "meta": {} + }, + { + "line": 1757, + "column": 63, + "meta": {} + }, + { + "line": 1758, + "column": 67, + "meta": {} + }, + { + "line": 1759, + "column": 63, + "meta": {} + }, + { + "line": 1760, + "column": 66, + "meta": {} + }, + { + "line": 1761, + "column": 62, + "meta": {} + }, + { + "line": 1762, + "column": 64, + "meta": {} + }, + { + "line": 1763, + "column": 64, + "meta": {} + }, + { + "line": 1764, + "column": 68, + "meta": {} + }, + { + "line": 1765, + "column": 65, + "meta": {} + }, + { + "line": 1766, + "column": 67, + "meta": {} + }, + { + "line": 1768, + "column": 70, + "meta": {} + }, + { + "line": 1770, + "column": 66, + "meta": {} + }, + { + "line": 1771, + "column": 69, + "meta": {} + }, + { + "line": 1773, + "column": 42, + "meta": {} + }, + { + "line": 1774, + "column": 68, + "meta": {} + }, + { + "line": 1775, + "column": 55, + "meta": {} + }, + { + "line": 1777, + "column": 67, + "meta": {} + }, + { + "line": 1778, + "column": 43, + "meta": {} + }, + { + "line": 1779, + "column": 59, + "meta": {} + }, + { + "line": 1780, + "column": 44, + "meta": {} + }, + { + "line": 1782, + "column": 54, + "meta": {} + }, + { + "line": 1783, + "column": 60, + "meta": {} + }, + { + "line": 1784, + "column": 62, + "meta": {} + }, + { + "line": 1785, + "column": 61, + "meta": {} + }, + { + "line": 1786, + "column": 57, + "meta": {} + }, + { + "line": 1787, + "column": 59, + "meta": {} + }, + { + "line": 1788, + "column": 52, + "meta": {} + }, + { + "line": 1789, + "column": 44, + "meta": {} + }, + { + "line": 1792, + "column": 50, + "meta": {} + }, + { + "line": 1793, + "column": 49, + "meta": {} + }, + { + "line": 1796, + "column": 75, + "meta": {} + }, + { + "line": 1799, + "column": 37, + "meta": {} + }, + { + "line": 1800, + "column": 67, + "meta": {} + }, + { + "line": 1801, + "column": 67, + "meta": {} + }, + { + "line": 1802, + "column": 68, + "meta": {} + }, + { + "line": 1803, + "column": 65, + "meta": {} + }, + { + "line": 1808, + "column": 74, + "meta": {} + }, + { + "line": 1809, + "column": 77, + "meta": {} + }, + { + "line": 1810, + "column": 77, + "meta": {} + }, + { + "line": 1812, + "column": 22, + "meta": {} + }, + { + "line": 1834, + "column": 73, + "meta": {} + }, + { + "line": 1836, + "column": 73, + "meta": {} + }, + { + "line": 1842, + "column": 41, + "meta": {} + }, + { + "line": 1843, + "column": 16, + "meta": {} + }, + { + "line": 1896, + "column": 43, + "meta": {} + }, + { + "line": 1931, + "column": 10, + "meta": {} + }, + { + "line": 1934, + "column": 13, + "meta": {} + }, + { + "line": 1938, + "column": 62, + "meta": {} + }, + { + "line": 1939, + "column": 67, + "meta": {} + }, + { + "line": 1940, + "column": 68, + "meta": {} + }, + { + "line": 1943, + "column": 18, + "meta": {} + }, + { + "line": 1945, + "column": 18, + "meta": {} + }, + { + "line": 1947, + "column": 19, + "meta": {} + }, + { + "line": 1949, + "column": 18, + "meta": {} + }, + { + "line": 1951, + "column": 18, + "meta": {} + }, + { + "line": 1953, + "column": 18, + "meta": {} + }, + { + "line": 2073, + "column": 14, + "meta": {} + }, + { + "line": 2082, + "column": 16, + "meta": {} + }, + { + "line": 2111, + "column": 23, + "meta": {} + }, + { + "line": 2116, + "column": 21, + "meta": {} + }, + { + "line": 2118, + "column": 16, + "meta": {} + }, + { + "line": 2121, + "column": 18, + "meta": {} + }, + { + "line": 2415, + "column": 36, + "meta": {} + }, + { + "line": 2416, + "column": 16, + "meta": {} + }, + { + "line": 2417, + "column": 38, + "meta": {} + }, + { + "line": 2484, + "column": 36, + "meta": {} + }, + { + "line": 2486, + "column": 20, + "meta": {} + }, + { + "line": 2488, + "column": 20, + "meta": {} + }, + { + "line": 2490, + "column": 38, + "meta": {} + }, + { + "line": 2503, + "column": 14, + "meta": {} + }, + { + "line": 2505, + "column": 14, + "meta": {} + }, + { + "line": 2598, + "column": 40, + "meta": {} + }, + { + "line": 2599, + "column": 20, + "meta": {} + }, + { + "line": 2600, + "column": 42, + "meta": {} + }, + { + "line": 2656, + "column": 17, + "meta": {} + }, + { + "line": 2673, + "column": 44, + "meta": {} + }, + { + "line": 2674, + "column": 24, + "meta": {} + }, + { + "line": 2675, + "column": 46, + "meta": {} + }, + { + "line": 2739, + "column": 39, + "meta": {} + }, + { + "line": 2740, + "column": 42, + "meta": {} + }, + { + "line": 2741, + "column": 9, + "meta": {} + }, + { + "line": 2742, + "column": 9, + "meta": {} + }, + { + "line": 2746, + "column": 9, + "meta": {} + }, + { + "line": 2747, + "column": 23, + "meta": {} + }, + { + "line": 2748, + "column": 9, + "meta": {} + }, + { + "line": 2908, + "column": 40, + "meta": {} + }, + { + "line": 2909, + "column": 20, + "meta": {} + }, + { + "line": 2910, + "column": 42, + "meta": {} + }, + { + "line": 3044, + "column": 40, + "meta": {} + }, + { + "line": 3045, + "column": 20, + "meta": {} + }, + { + "line": 3046, + "column": 42, + "meta": {} + }, + { + "line": 3132, + "column": 48, + "meta": {} + }, + { + "line": 3133, + "column": 28, + "meta": {} + }, + { + "line": 3134, + "column": 50, + "meta": {} + }, + { + "line": 3224, + "column": 26, + "meta": {} + }, + { + "line": 3226, + "column": 21, + "meta": {} + }, + { + "line": 3272, + "column": 29, + "meta": {} + }, + { + "line": 3356, + "column": 48, + "meta": {} + }, + { + "line": 3357, + "column": 28, + "meta": {} + }, + { + "line": 3358, + "column": 50, + "meta": {} + }, + { + "line": 3409, + "column": 52, + "meta": {} + }, + { + "line": 3410, + "column": 32, + "meta": {} + }, + { + "line": 3411, + "column": 54, + "meta": {} + }, + { + "line": 3484, + "column": 48, + "meta": {} + }, + { + "line": 3485, + "column": 28, + "meta": {} + }, + { + "line": 3486, + "column": 50, + "meta": {} + }, + { + "line": 3784, + "column": 33, + "meta": {} + }, + { + "line": 4026, + "column": 24, + "meta": {} + }, + { + "line": 4104, + "column": 55, + "meta": {} + }, + { + "line": 4105, + "column": 72, + "meta": {} + }, + { + "line": 4107, + "column": 44, + "meta": {} + }, + { + "line": 4124, + "column": 47, + "meta": {} + }, + { + "line": 4173, + "column": 67, + "meta": {} + }, + { + "line": 4554, + "column": 44, + "meta": {} + }, + { + "line": 5513, + "column": 22, + "meta": {} + }, + { + "line": 6125, + "column": 5, + "meta": {} + }, + { + "line": 6348, + "column": 9, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "items.c", + "locations": [ + { + "line": 53, + "column": 7, + "meta": {} + }, + { + "line": 57, + "column": 12, + "meta": {} + }, + { + "line": 60, + "column": 22, + "meta": {} + }, + { + "line": 61, + "column": 17, + "meta": {} + }, + { + "line": 62, + "column": 12, + "meta": {} + }, + { + "line": 69, + "column": 24, + "meta": {} + }, + { + "line": 71, + "column": 11, + "meta": {} + }, + { + "line": 75, + "column": 21, + "meta": {} + }, + { + "line": 81, + "column": 14, + "meta": {} + }, + { + "line": 83, + "column": 9, + "meta": {} + }, + { + "line": 84, + "column": 9, + "meta": {} + }, + { + "line": 85, + "column": 9, + "meta": {} + }, + { + "line": 209, + "column": 13, + "meta": {} + }, + { + "line": 296, + "column": 13, + "meta": {} + }, + { + "line": 381, + "column": 11, + "meta": {} + }, + { + "line": 396, + "column": 5, + "meta": {} + }, + { + "line": 397, + "column": 5, + "meta": {} + }, + { + "line": 398, + "column": 5, + "meta": {} + }, + { + "line": 401, + "column": 10, + "meta": {} + }, + { + "line": 442, + "column": 9, + "meta": {} + }, + { + "line": 491, + "column": 5, + "meta": {} + }, + { + "line": 492, + "column": 5, + "meta": {} + }, + { + "line": 493, + "column": 5, + "meta": {} + }, + { + "line": 501, + "column": 10, + "meta": {} + }, + { + "line": 511, + "column": 9, + "meta": {} + }, + { + "line": 512, + "column": 9, + "meta": {} + }, + { + "line": 514, + "column": 14, + "meta": {} + }, + { + "line": 527, + "column": 9, + "meta": {} + }, + { + "line": 528, + "column": 9, + "meta": {} + }, + { + "line": 530, + "column": 14, + "meta": {} + }, + { + "line": 644, + "column": 36, + "meta": {} + }, + { + "line": 647, + "column": 16, + "meta": {} + }, + { + "line": 650, + "column": 14, + "meta": {} + }, + { + "line": 655, + "column": 32, + "meta": {} + }, + { + "line": 661, + "column": 28, + "meta": {} + }, + { + "line": 671, + "column": 11, + "meta": {} + }, + { + "line": 672, + "column": 9, + "meta": {} + }, + { + "line": 673, + "column": 35, + "meta": {} + }, + { + "line": 681, + "column": 45, + "meta": {} + }, + { + "line": 682, + "column": 45, + "meta": {} + }, + { + "line": 683, + "column": 42, + "meta": {} + }, + { + "line": 684, + "column": 35, + "meta": {} + }, + { + "line": 685, + "column": 37, + "meta": {} + }, + { + "line": 686, + "column": 45, + "meta": {} + }, + { + "line": 687, + "column": 49, + "meta": {} + }, + { + "line": 688, + "column": 45, + "meta": {} + }, + { + "line": 689, + "column": 41, + "meta": {} + }, + { + "line": 690, + "column": 41, + "meta": {} + }, + { + "line": 691, + "column": 44, + "meta": {} + }, + { + "line": 692, + "column": 43, + "meta": {} + }, + { + "line": 728, + "column": 11, + "meta": {} + }, + { + "line": 729, + "column": 19, + "meta": {} + }, + { + "line": 730, + "column": 17, + "meta": {} + }, + { + "line": 731, + "column": 9, + "meta": {} + }, + { + "line": 734, + "column": 39, + "meta": {} + }, + { + "line": 749, + "column": 35, + "meta": {} + }, + { + "line": 750, + "column": 43, + "meta": {} + }, + { + "line": 751, + "column": 39, + "meta": {} + }, + { + "line": 752, + "column": 39, + "meta": {} + }, + { + "line": 753, + "column": 37, + "meta": {} + }, + { + "line": 754, + "column": 45, + "meta": {} + }, + { + "line": 755, + "column": 45, + "meta": {} + }, + { + "line": 756, + "column": 42, + "meta": {} + }, + { + "line": 757, + "column": 45, + "meta": {} + }, + { + "line": 758, + "column": 49, + "meta": {} + }, + { + "line": 759, + "column": 45, + "meta": {} + }, + { + "line": 760, + "column": 41, + "meta": {} + }, + { + "line": 761, + "column": 41, + "meta": {} + }, + { + "line": 762, + "column": 44, + "meta": {} + }, + { + "line": 763, + "column": 43, + "meta": {} + }, + { + "line": 775, + "column": 43, + "meta": {} + }, + { + "line": 778, + "column": 49, + "meta": {} + }, + { + "line": 781, + "column": 50, + "meta": {} + }, + { + "line": 784, + "column": 50, + "meta": {} + }, + { + "line": 787, + "column": 50, + "meta": {} + }, + { + "line": 858, + "column": 9, + "meta": {} + }, + { + "line": 861, + "column": 11, + "meta": {} + }, + { + "line": 863, + "column": 17, + "meta": {} + }, + { + "line": 864, + "column": 9, + "meta": {} + }, + { + "line": 866, + "column": 19, + "meta": {} + }, + { + "line": 870, + "column": 11, + "meta": {} + }, + { + "line": 871, + "column": 9, + "meta": {} + }, + { + "line": 873, + "column": 5, + "meta": {} + }, + { + "line": 874, + "column": 5, + "meta": {} + }, + { + "line": 875, + "column": 5, + "meta": {} + }, + { + "line": 878, + "column": 11, + "meta": {} + }, + { + "line": 879, + "column": 17, + "meta": {} + }, + { + "line": 883, + "column": 16, + "meta": {} + }, + { + "line": 884, + "column": 14, + "meta": {} + }, + { + "line": 885, + "column": 13, + "meta": {} + }, + { + "line": 894, + "column": 19, + "meta": {} + }, + { + "line": 897, + "column": 11, + "meta": {} + }, + { + "line": 898, + "column": 17, + "meta": {} + }, + { + "line": 899, + "column": 9, + "meta": {} + }, + { + "line": 900, + "column": 14, + "meta": {} + }, + { + "line": 901, + "column": 9, + "meta": {} + }, + { + "line": 904, + "column": 19, + "meta": {} + }, + { + "line": 907, + "column": 11, + "meta": {} + }, + { + "line": 908, + "column": 9, + "meta": {} + }, + { + "line": 913, + "column": 18, + "meta": {} + }, + { + "line": 919, + "column": 11, + "meta": {} + }, + { + "line": 920, + "column": 9, + "meta": {} + }, + { + "line": 925, + "column": 18, + "meta": {} + }, + { + "line": 934, + "column": 11, + "meta": {} + }, + { + "line": 935, + "column": 17, + "meta": {} + }, + { + "line": 937, + "column": 9, + "meta": {} + }, + { + "line": 939, + "column": 25, + "meta": {} + }, + { + "line": 940, + "column": 17, + "meta": {} + }, + { + "line": 943, + "column": 40, + "meta": {} + }, + { + "line": 950, + "column": 9, + "meta": {} + }, + { + "line": 951, + "column": 19, + "meta": {} + }, + { + "line": 1001, + "column": 44, + "meta": {} + }, + { + "line": 1002, + "column": 24, + "meta": {} + }, + { + "line": 1003, + "column": 46, + "meta": {} + }, + { + "line": 1013, + "column": 44, + "meta": {} + }, + { + "line": 1014, + "column": 24, + "meta": {} + }, + { + "line": 1015, + "column": 46, + "meta": {} + }, + { + "line": 1121, + "column": 17, + "meta": {} + }, + { + "line": 1126, + "column": 21, + "meta": {} + }, + { + "line": 1139, + "column": 17, + "meta": {} + }, + { + "line": 1141, + "column": 21, + "meta": {} + }, + { + "line": 1169, + "column": 29, + "meta": {} + }, + { + "line": 1176, + "column": 29, + "meta": {} + }, + { + "line": 1183, + "column": 25, + "meta": {} + }, + { + "line": 1201, + "column": 25, + "meta": {} + }, + { + "line": 1202, + "column": 25, + "meta": {} + }, + { + "line": 1204, + "column": 29, + "meta": {} + }, + { + "line": 1206, + "column": 29, + "meta": {} + }, + { + "line": 1209, + "column": 29, + "meta": {} + }, + { + "line": 1224, + "column": 25, + "meta": {} + }, + { + "line": 1462, + "column": 16, + "meta": {} + }, + { + "line": 1606, + "column": 9, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "extstore.c", + "locations": [ + { + "line": 31, + "column": 42, + "meta": {} + }, + { + "line": 32, + "column": 45, + "meta": {} + }, + { + "line": 34, + "column": 28, + "meta": {} + }, + { + "line": 35, + "column": 8, + "meta": {} + }, + { + "line": 36, + "column": 30, + "meta": {} + }, + { + "line": 40, + "column": 28, + "meta": {} + }, + { + "line": 41, + "column": 8, + "meta": {} + }, + { + "line": 42, + "column": 30, + "meta": {} + }, + { + "line": 110, + "column": 21, + "meta": {} + }, + { + "line": 111, + "column": 21, + "meta": {} + }, + { + "line": 157, + "column": 11, + "meta": {} + }, + { + "line": 158, + "column": 19, + "meta": {} + }, + { + "line": 161, + "column": 20, + "meta": {} + }, + { + "line": 181, + "column": 56, + "meta": {} + }, + { + "line": 184, + "column": 30, + "meta": {} + }, + { + "line": 328, + "column": 25, + "meta": {} + }, + { + "line": 329, + "column": 8, + "meta": {} + }, + { + "line": 331, + "column": 8, + "meta": {} + }, + { + "line": 332, + "column": 8, + "meta": {} + }, + { + "line": 351, + "column": 28, + "meta": {} + }, + { + "line": 579, + "column": 8, + "meta": {} + }, + { + "line": 580, + "column": 8, + "meta": {} + }, + { + "line": 581, + "column": 8, + "meta": {} + }, + { + "line": 582, + "column": 8, + "meta": {} + }, + { + "line": 649, + "column": 12, + "meta": {} + }, + { + "line": 650, + "column": 12, + "meta": {} + }, + { + "line": 768, + "column": 28, + "meta": {} + }, + { + "line": 769, + "column": 28, + "meta": {} + }, + { + "line": 832, + "column": 8, + "meta": {} + }, + { + "line": 833, + "column": 8, + "meta": {} + }, + { + "line": 834, + "column": 8, + "meta": {} + }, + { + "line": 949, + "column": 20, + "meta": {} + }, + { + "line": 950, + "column": 20, + "meta": {} + }, + { + "line": 951, + "column": 20, + "meta": {} + }, + { + "line": 961, + "column": 16, + "meta": {} + }, + { + "line": 963, + "column": 19, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "slab_automove.c", + "locations": [ + { + "line": 28, + "column": 10, + "meta": {} + }, + { + "line": 29, + "column": 10, + "meta": {} + }, + { + "line": 30, + "column": 10, + "meta": {} + }, + { + "line": 31, + "column": 10, + "meta": {} + }, + { + "line": 49, + "column": 15, + "meta": {} + }, + { + "line": 50, + "column": 15, + "meta": {} + }, + { + "line": 87, + "column": 15, + "meta": {} + }, + { + "line": 88, + "column": 15, + "meta": {} + }, + { + "line": 155, + "column": 25, + "meta": {} + }, + { + "line": 157, + "column": 25, + "meta": {} + } + ] + }, + { + "term": "cmd", + "file": "proto_text.c", + "locations": [ + { + "line": 34, + "column": 36, + "meta": {} + }, + { + "line": 35, + "column": 16, + "meta": {} + }, + { + "line": 36, + "column": 38, + "meta": {} + }, + { + "line": 347, + "column": 40, + "meta": {} + }, + { + "line": 348, + "column": 20, + "meta": {} + }, + { + "line": 349, + "column": 42, + "meta": {} + }, + { + "line": 352, + "column": 40, + "meta": {} + }, + { + "line": 353, + "column": 20, + "meta": {} + }, + { + "line": 354, + "column": 20, + "meta": {} + }, + { + "line": 355, + "column": 42, + "meta": {} + }, + { + "line": 497, + "column": 17, + "meta": {} + }, + { + "line": 524, + "column": 58, + "meta": {} + }, + { + "line": 525, + "column": 38, + "meta": {} + }, + { + "line": 526, + "column": 60, + "meta": {} + }, + { + "line": 555, + "column": 48, + "meta": {} + }, + { + "line": 557, + "column": 32, + "meta": {} + }, + { + "line": 558, + "column": 32, + "meta": {} + }, + { + "line": 560, + "column": 32, + "meta": {} + }, + { + "line": 561, + "column": 32, + "meta": {} + }, + { + "line": 563, + "column": 50, + "meta": {} + }, + { + "line": 573, + "column": 48, + "meta": {} + }, + { + "line": 575, + "column": 32, + "meta": {} + }, + { + "line": 576, + "column": 32, + "meta": {} + }, + { + "line": 578, + "column": 32, + "meta": {} + }, + { + "line": 579, + "column": 32, + "meta": {} + }, + { + "line": 582, + "column": 50, + "meta": {} + }, + { + "line": 638, + "column": 28, + "meta": {} + }, + { + "line": 651, + "column": 15, + "meta": {} + }, + { + "line": 652, + "column": 27, + "meta": {} + }, + { + "line": 655, + "column": 44, + "meta": {} + }, + { + "line": 669, + "column": 16, + "meta": {} + }, + { + "line": 670, + "column": 19, + "meta": {} + }, + { + "line": 672, + "column": 9, + "meta": {} + }, + { + "line": 678, + "column": 21, + "meta": {} + }, + { + "line": 680, + "column": 21, + "meta": {} + }, + { + "line": 684, + "column": 39, + "meta": {} + }, + { + "line": 690, + "column": 41, + "meta": {} + }, + { + "line": 714, + "column": 17, + "meta": {} + }, + { + "line": 717, + "column": 26, + "meta": {} + }, + { + "line": 722, + "column": 17, + "meta": {} + }, + { + "line": 723, + "column": 20, + "meta": {} + }, + { + "line": 724, + "column": 70, + "meta": {} + }, + { + "line": 726, + "column": 38, + "meta": {} + }, + { + "line": 727, + "column": 20, + "meta": {} + }, + { + "line": 736, + "column": 12, + "meta": {} + }, + { + "line": 738, + "column": 12, + "meta": {} + }, + { + "line": 739, + "column": 62, + "meta": {} + }, + { + "line": 741, + "column": 30, + "meta": {} + }, + { + "line": 742, + "column": 12, + "meta": {} + }, + { + "line": 790, + "column": 36, + "meta": {} + }, + { + "line": 791, + "column": 16, + "meta": {} + }, + { + "line": 792, + "column": 38, + "meta": {} + }, + { + "line": 1169, + "column": 52, + "meta": {} + }, + { + "line": 1170, + "column": 32, + "meta": {} + }, + { + "line": 1171, + "column": 54, + "meta": {} + }, + { + "line": 1224, + "column": 40, + "meta": {} + }, + { + "line": 1226, + "column": 24, + "meta": {} + }, + { + "line": 1227, + "column": 24, + "meta": {} + }, + { + "line": 1229, + "column": 24, + "meta": {} + }, + { + "line": 1230, + "column": 24, + "meta": {} + }, + { + "line": 1232, + "column": 42, + "meta": {} + }, + { + "line": 1236, + "column": 40, + "meta": {} + }, + { + "line": 1238, + "column": 24, + "meta": {} + }, + { + "line": 1239, + "column": 24, + "meta": {} + }, + { + "line": 1241, + "column": 24, + "meta": {} + }, + { + "line": 1242, + "column": 24, + "meta": {} + }, + { + "line": 1245, + "column": 42, + "meta": {} + }, + { + "line": 1496, + "column": 44, + "meta": {} + }, + { + "line": 1497, + "column": 24, + "meta": {} + }, + { + "line": 1498, + "column": 46, + "meta": {} + }, + { + "line": 1522, + "column": 44, + "meta": {} + }, + { + "line": 1523, + "column": 24, + "meta": {} + }, + { + "line": 1524, + "column": 46, + "meta": {} + }, + { + "line": 1534, + "column": 40, + "meta": {} + }, + { + "line": 1535, + "column": 20, + "meta": {} + }, + { + "line": 1536, + "column": 42, + "meta": {} + }, + { + "line": 1662, + "column": 44, + "meta": {} + }, + { + "line": 1664, + "column": 28, + "meta": {} + }, + { + "line": 1666, + "column": 28, + "meta": {} + }, + { + "line": 1668, + "column": 46, + "meta": {} + }, + { + "line": 1831, + "column": 9, + "meta": {} + }, + { + "line": 1908, + "column": 40, + "meta": {} + }, + { + "line": 1909, + "column": 20, + "meta": {} + }, + { + "line": 1910, + "column": 20, + "meta": {} + }, + { + "line": 1911, + "column": 42, + "meta": {} + }, + { + "line": 1916, + "column": 40, + "meta": {} + }, + { + "line": 1917, + "column": 20, + "meta": {} + }, + { + "line": 1918, + "column": 20, + "meta": {} + }, + { + "line": 1919, + "column": 42, + "meta": {} + }, + { + "line": 1959, + "column": 40, + "meta": {} + }, + { + "line": 1961, + "column": 24, + "meta": {} + }, + { + "line": 1963, + "column": 24, + "meta": {} + }, + { + "line": 1965, + "column": 42, + "meta": {} + }, + { + "line": 2005, + "column": 9, + "meta": {} + }, + { + "line": 2012, + "column": 40, + "meta": {} + }, + { + "line": 2013, + "column": 20, + "meta": {} + }, + { + "line": 2014, + "column": 42, + "meta": {} + }, + { + "line": 2021, + "column": 40, + "meta": {} + }, + { + "line": 2022, + "column": 20, + "meta": {} + }, + { + "line": 2023, + "column": 42, + "meta": {} + }, + { + "line": 2302, + "column": 36, + "meta": {} + }, + { + "line": 2303, + "column": 16, + "meta": {} + }, + { + "line": 2304, + "column": 38, + "meta": {} + }, + { + "line": 2307, + "column": 54, + "meta": {} + }, + { + "line": 2617, + "column": 57, + "meta": {} + } + ] + } +] + diff --git a/targets/locations_redis_cluster_manager.json b/targets/locations_redis_cluster_manager.json new file mode 100644 index 0000000000..6b3d7da24b --- /dev/null +++ b/targets/locations_redis_cluster_manager.json @@ -0,0 +1,637 @@ +[ + { + "term": "clustermanager", + "file": "src/redis-cli.c", + "locations": [ +{"line": 94,"column": 5,"meta": {}}, +{"line": 97,"column": 9,"meta": {}}, +{"line": 98,"column": 5,"meta": {}}, +{"line": 100,"column": 9,"meta": {}}, +{"line": 101,"column": 5,"meta": {}}, +{"line": 103,"column": 9,"meta": {}}, +{"line": 104,"column": 5,"meta": {}}, +{"line": 106,"column": 9,"meta": {}}, +{"line": 107,"column": 5,"meta": {}}, +{"line": 171,"column": 16,"meta": {}}, +{"line": 187,"column": 3,"meta": {}}, +{"line": 245,"column": 5,"meta": {}}, +{"line": 2159,"column": 15,"meta": {}}, +{"line": 2165,"column": 12,"meta": {}}, +{"line": 2166,"column": 7,"meta": {}}, +{"line": 2168,"column": 16,"meta": {}}, +{"line": 2192,"column": 3,"meta": {}}, +{"line": 2195,"column": 16,"meta": {}}, +{"line": 2196,"column": 5,"meta": {}}, +{"line": 2197,"column": 5,"meta": {}}, +{"line": 2200,"column": 3,"meta": {}}, +{"line": 2203,"column": 16,"meta": {}}, +{"line": 2204,"column": 5,"meta": {}}, +{"line": 2206,"column": 3,"meta": {}}, +{"line": 2210,"column": 16,"meta": {}}, +{"line": 2215,"column": 3,"meta": {}}, +{"line": 2217,"column": 17,"meta": {}}, +{"line": 2226,"column": 17,"meta": {}}, +{"line": 2235,"column": 13,"meta": {}}, +{"line": 2236,"column": 15,"meta": {}}, +{"line": 2237,"column": 5,"meta": {}}, +{"line": 2241,"column": 8,"meta": {}}, +{"line": 2242,"column": 8,"meta": {}}, +{"line": 2243,"column": 8,"meta": {}}, +{"line": 2244,"column": 13,"meta": {}}, +{"line": 2245,"column": 12,"meta": {}}, +{"line": 2246,"column": 13,"meta": {}}, +{"line": 2248,"column": 12,"meta": {}}, +{"line": 2250,"column": 12,"meta": {}}, +{"line": 2251,"column": 12,"meta": {}}, +{"line": 2252,"column": 12,"meta": {}}, +{"line": 2253,"column": 19,"meta": {}}, +{"line": 2254,"column": 13,"meta": {}}, +{"line": 2256,"column": 12,"meta": {}}, +{"line": 2257,"column": 13,"meta": {}}, +{"line": 2258,"column": 13,"meta": {}}, +{"line": 2259,"column": 12,"meta": {}}, +{"line": 2260,"column": 13,"meta": {}}, +{"line": 2261,"column": 12,"meta": {}}, +{"line": 2262,"column": 13,"meta": {}}, +{"line": 2263,"column": 12,"meta": {}}, +{"line": 2264,"column": 14,"meta": {}}, +{"line": 2265,"column": 13,"meta": {}}, +{"line": 2266,"column": 13,"meta": {}}, +{"line": 2268,"column": 13,"meta": {}}, +{"line": 2269,"column": 13,"meta": {}}, +{"line": 2270,"column": 42,"meta": {}}, +{"line": 2271,"column": 13,"meta": {}}, +{"line": 2272,"column": 40,"meta": {}}, +{"line": 2276,"column": 12,"meta": {}}, +{"line": 2277,"column": 12,"meta": {}}, +{"line": 2278,"column": 12,"meta": {}}, +{"line": 2279,"column": 12,"meta": {}}, +{"line": 2280,"column": 12,"meta": {}}, +{"line": 2281,"column": 12,"meta": {}}, +{"line": 2282,"column": 12,"meta": {}}, +{"line": 2283,"column": 12,"meta": {}}, +{"line": 2284,"column": 12,"meta": {}}, +{"line": 2285,"column": 12,"meta": {}}, +{"line": 2286,"column": 12,"meta": {}}, +{"line": 2287,"column": 12,"meta": {}}, +{"line": 2288,"column": 12,"meta": {}}, +{"line": 2290,"column": 16,"meta": {}}, +{"line": 2292,"column": 5,"meta": {}}, +{"line": 2296,"column": 3,"meta": {}}, +{"line": 2298,"column": 1,"meta": {}}, +{"line": 2299,"column": 16,"meta": {}}, +{"line": 2301,"column": 15,"meta": {}}, +{"line": 2303,"column": 14,"meta": {}}, +{"line": 2304,"column": 13,"meta": {}}, +{"line": 2306,"column": 17,"meta": {}}, +{"line": 2309,"column": 19,"meta": {}}, +{"line": 2312,"column": 18,"meta": {}}, +{"line": 2314,"column": 18,"meta": {}}, +{"line": 2315,"column": 14,"meta": {}}, +{"line": 2317,"column": 21,"meta": {}}, +{"line": 2319,"column": 16,"meta": {}}, +{"line": 2321,"column": 16,"meta": {}}, +{"line": 2323,"column": 14,"meta": {}}, +{"line": 2326,"column": 20,"meta": {}}, +{"line": 2329,"column": 5,"meta": {}}, +{"line": 2337,"column": 8,"meta": {}}, +{"line": 2338,"column": 36,"meta": {}}, +{"line": 2339,"column": 36,"meta": {}}, +{"line": 2340,"column": 5,"meta": {}}, +{"line": 2344,"column": 9,"meta": {}}, +{"line": 2413,"column": 36,"meta": {}}, +{"line": 2420,"column": 13,"meta": {}}, +{"line": 2452,"column": 13,"meta": {}}, +{"line": 2467,"column": 9,"meta": {}}, +{"line": 2468,"column": 21,"meta": {}}, +{"line": 2471,"column": 8,"meta": {}}, +{"line": 2472,"column": 5,"meta": {}}, +{"line": 2492,"column": 5,"meta": {}}, +{"line": 2496,"column": 12,"meta": {}}, +{"line": 2510,"column": 12,"meta": {}}, +{"line": 2527,"column": 12,"meta": {}}, +{"line": 2529,"column": 19,"meta": {}}, +{"line": 2535,"column": 12,"meta": {}}, +{"line": 2536,"column": 42,"meta": {}}, +{"line": 2539,"column": 19,"meta": {}}, +{"line": 2549,"column": 23,"meta": {}}, +{"line": 2564,"column": 12,"meta": {}}, +{"line": 2596,"column": 18,"meta": {}}, +{"line": 2603,"column": 13,"meta": {}}, +{"line": 2604,"column": 46,"meta": {}}, +{"line": 2617,"column": 8,"meta": {}}, +{"line": 2619,"column": 5,"meta": {}}, +{"line": 2627,"column": 9,"meta": {}}, +{"line": 2637,"column": 9,"meta": {}}, +{"line": 2641,"column": 8,"meta": {}}, +{"line": 2644,"column": 5,"meta": {}}, +{"line": 2652,"column": 9,"meta": {}}, +{"line": 2663,"column": 13,"meta": {}}, +{"line": 2669,"column": 20,"meta": {}}, +{"line": 2686,"column": 12,"meta": {}}, +{"line": 2687,"column": 24,"meta": {}}, +{"line": 2696,"column": 12,"meta": {}}, +{"line": 2697,"column": 24,"meta": {}}, +{"line": 2707,"column": 10,"meta": {}}, +{"line": 2740,"column": 40,"meta": {}}, +{"line": 2747,"column": 12,"meta": {}}, +{"line": 2748,"column": 19,"meta": {}}, +{"line": 2752,"column": 5,"meta": {}}, +{"line": 2754,"column": 48,"meta": {}}, +{"line": 2761,"column": 9,"meta": {}}, +{"line": 2762,"column": 37,"meta": {}}, +{"line": 2765,"column": 13,"meta": {}}, +{"line": 2798,"column": 17,"meta": {}}, +{"line": 2814,"column": 13,"meta": {}}, +{"line": 2817,"column": 5,"meta": {}}, +{"line": 2818,"column": 17,"meta": {}}, +{"line": 2821,"column": 5,"meta": {}}, +{"line": 2832,"column": 17,"meta": {}}, +{"line": 2841,"column": 9,"meta": {}}, +{"line": 2843,"column": 9,"meta": {}}, +{"line": 2850,"column": 13,"meta": {}}, +{"line": 2864,"column": 25,"meta": {}}, +{"line": 2877,"column": 13,"meta": {}}, +{"line": 2887,"column": 5,"meta": {}}, +{"line": 2893,"column": 12,"meta": {}}, +{"line": 2911,"column": 12,"meta": {}}, +{"line": 2940,"column": 12,"meta": {}}, +{"line": 2949,"column": 17,"meta": {}}, +{"line": 2950,"column": 17,"meta": {}}, +{"line": 3025,"column": 21,"meta": {}}, +{"line": 3047,"column": 12,"meta": {}}, +{"line": 3059,"column": 17,"meta": {}}, +{"line": 3060,"column": 21,"meta": {}}, +{"line": 3078,"column": 13,"meta": {}}, +{"line": 3083,"column": 9,"meta": {}}, +{"line": 3084,"column": 20,"meta": {}}, +{"line": 3090,"column": 13,"meta": {}}, +{"line": 3097,"column": 9,"meta": {}}, +{"line": 3109,"column": 17,"meta": {}}, +{"line": 3134,"column": 5,"meta": {}}, +{"line": 3140,"column": 12,"meta": {}}, +{"line": 3173,"column": 15,"meta": {}}, +{"line": 3188,"column": 8,"meta": {}}, +{"line": 3192,"column": 5,"meta": {}}, +{"line": 3194,"column": 9,"meta": {}}, +{"line": 3210,"column": 25,"meta": {}}, +{"line": 3219,"column": 21,"meta": {}}, +{"line": 3234,"column": 12,"meta": {}}, +{"line": 3235,"column": 34,"meta": {}}, +{"line": 3257,"column": 12,"meta": {}}, +{"line": 3260,"column": 19,"meta": {}}, +{"line": 3265,"column": 12,"meta": {}}, +{"line": 3271,"column": 19,"meta": {}}, +{"line": 3276,"column": 9,"meta": {}}, +{"line": 3277,"column": 13,"meta": {}}, +{"line": 3294,"column": 12,"meta": {}}, +{"line": 3297,"column": 19,"meta": {}}, +{"line": 3302,"column": 19,"meta": {}}, +{"line": 3308,"column": 19,"meta": {}}, +{"line": 3314,"column": 12,"meta": {}}, +{"line": 3316,"column": 19,"meta": {}}, +{"line": 3321,"column": 21,"meta": {}}, +{"line": 3324,"column": 12,"meta": {}}, +{"line": 3325,"column": 5,"meta": {}}, +{"line": 3333,"column": 12,"meta": {}}, +{"line": 3337,"column": 19,"meta": {}}, +{"line": 3340,"column": 5,"meta": {}}, +{"line": 3342,"column": 5,"meta": {}}, +{"line": 3343,"column": 19,"meta": {}}, +{"line": 3344,"column": 5,"meta": {}}, +{"line": 3345,"column": 15,"meta": {}}, +{"line": 3354,"column": 12,"meta": {}}, +{"line": 3355,"column": 43,"meta": {}}, +{"line": 3416,"column": 20,"meta": {}}, +{"line": 3417,"column": 53,"meta": {}}, +{"line": 3499,"column": 12,"meta": {}}, +{"line": 3500,"column": 44,"meta": {}}, +{"line": 3535,"column": 25,"meta": {}}, +{"line": 3546,"column": 17,"meta": {}}, +{"line": 3547,"column": 21,"meta": {}}, +{"line": 3562,"column": 21,"meta": {}}, +{"line": 3565,"column": 21,"meta": {}}, +{"line": 3577,"column": 21,"meta": {}}, +{"line": 3579,"column": 25,"meta": {}}, +{"line": 3582,"column": 35,"meta": {}}, +{"line": 3585,"column": 29,"meta": {}}, +{"line": 3591,"column": 29,"meta": {}}, +{"line": 3605,"column": 33,"meta": {}}, +{"line": 3607,"column": 29,"meta": {}}, +{"line": 3618,"column": 21,"meta": {}}, +{"line": 3621,"column": 33,"meta": {}}, +{"line": 3665,"column": 12,"meta": {}}, +{"line": 3666,"column": 35,"meta": {}}, +{"line": 3681,"column": 19,"meta": {}}, +{"line": 3684,"column": 19,"meta": {}}, +{"line": 3688,"column": 15,"meta": {}}, +{"line": 3698,"column": 13,"meta": {}}, +{"line": 3728,"column": 12,"meta": {}}, +{"line": 3749,"column": 21,"meta": {}}, +{"line": 3759,"column": 13,"meta": {}}, +{"line": 3764,"column": 12,"meta": {}}, +{"line": 3769,"column": 28,"meta": {}}, +{"line": 3773,"column": 17,"meta": {}}, +{"line": 3784,"column": 25,"meta": {}}, +{"line": 3788,"column": 25,"meta": {}}, +{"line": 3796,"column": 25,"meta": {}}, +{"line": 3799,"column": 21,"meta": {}}, +{"line": 3819,"column": 12,"meta": {}}, +{"line": 3825,"column": 10,"meta": {}}, +{"line": 3861,"column": 9,"meta": {}}, +{"line": 3865,"column": 13,"meta": {}}, +{"line": 3945,"column": 27,"meta": {}}, +{"line": 3999,"column": 12,"meta": {}}, +{"line": 4000,"column": 35,"meta": {}}, +{"line": 4006,"column": 10,"meta": {}}, +{"line": 4007,"column": 9,"meta": {}}, +{"line": 4013,"column": 10,"meta": {}}, +{"line": 4026,"column": 37,"meta": {}}, +{"line": 4034,"column": 13,"meta": {}}, +{"line": 4036,"column": 38,"meta": {}}, +{"line": 4039,"column": 17,"meta": {}}, +{"line": 4048,"column": 17,"meta": {}}, +{"line": 4065,"column": 9,"meta": {}}, +{"line": 4067,"column": 13,"meta": {}}, +{"line": 4069,"column": 17,"meta": {}}, +{"line": 4079,"column": 5,"meta": {}}, +{"line": 4085,"column": 5,"meta": {}}, +{"line": 4086,"column": 5,"meta": {}}, +{"line": 4087,"column": 5,"meta": {}}, +{"line": 4091,"column": 5,"meta": {}}, +{"line": 4092,"column": 5,"meta": {}}, +{"line": 4093,"column": 5,"meta": {}}, +{"line": 4097,"column": 12,"meta": {}}, +{"line": 4149,"column": 49,"meta": {}}, +{"line": 4173,"column": 19,"meta": {}}, +{"line": 4190,"column": 12,"meta": {}}, +{"line": 4200,"column": 9,"meta": {}}, +{"line": 4201,"column": 19,"meta": {}}, +{"line": 4217,"column": 14,"meta": {}}, +{"line": 4220,"column": 10,"meta": {}}, +{"line": 4248,"column": 13,"meta": {}}, +{"line": 4264,"column": 14,"meta": {}}, +{"line": 4266,"column": 32,"meta": {}}, +{"line": 4271,"column": 9,"meta": {}}, +{"line": 4272,"column": 23,"meta": {}}, +{"line": 4278,"column": 17,"meta": {}}, +{"line": 4300,"column": 13,"meta": {}}, +{"line": 4304,"column": 5,"meta": {}}, +{"line": 4310,"column": 12,"meta": {}}, +{"line": 4317,"column": 9,"meta": {}}, +{"line": 4328,"column": 13,"meta": {}}, +{"line": 4329,"column": 5,"meta": {}}, +{"line": 4338,"column": 21,"meta": {}}, +{"line": 4345,"column": 8,"meta": {}}, +{"line": 4349,"column": 5,"meta": {}}, +{"line": 4356,"column": 9,"meta": {}}, +{"line": 4361,"column": 23,"meta": {}}, +{"line": 4384,"column": 8,"meta": {}}, +{"line": 4385,"column": 5,"meta": {}}, +{"line": 4391,"column": 9,"meta": {}}, +{"line": 4403,"column": 8,"meta": {}}, +{"line": 4410,"column": 9,"meta": {}}, +{"line": 4419,"column": 9,"meta": {}}, +{"line": 4429,"column": 12,"meta": {}}, +{"line": 4434,"column": 9,"meta": {}}, +{"line": 4440,"column": 5,"meta": {}}, +{"line": 4451,"column": 17,"meta": {}}, +{"line": 4456,"column": 22,"meta": {}}, +{"line": 4472,"column": 21,"meta": {}}, +{"line": 4483,"column": 42,"meta": {}}, +{"line": 4503,"column": 9,"meta": {}}, +{"line": 4512,"column": 17,"meta": {}}, +{"line": 4513,"column": 17,"meta": {}}, +{"line": 4515,"column": 22,"meta": {}}, +{"line": 4530,"column": 9,"meta": {}}, +{"line": 4539,"column": 45,"meta": {}}, +{"line": 4544,"column": 17,"meta": {}}, +{"line": 4545,"column": 17,"meta": {}}, +{"line": 4547,"column": 22,"meta": {}}, +{"line": 4562,"column": 9,"meta": {}}, +{"line": 4570,"column": 45,"meta": {}}, +{"line": 4574,"column": 17,"meta": {}}, +{"line": 4575,"column": 21,"meta": {}}, +{"line": 4580,"column": 17,"meta": {}}, +{"line": 4583,"column": 22,"meta": {}}, +{"line": 4594,"column": 21,"meta": {}}, +{"line": 4597,"column": 26,"meta": {}}, +{"line": 4604,"column": 26,"meta": {}}, +{"line": 4609,"column": 26,"meta": {}}, +{"line": 4613,"column": 26,"meta": {}}, +{"line": 4631,"column": 12,"meta": {}}, +{"line": 4636,"column": 9,"meta": {}}, +{"line": 4640,"column": 5,"meta": {}}, +{"line": 4652,"column": 5,"meta": {}}, +{"line": 4659,"column": 9,"meta": {}}, +{"line": 4666,"column": 23,"meta": {}}, +{"line": 4668,"column": 17,"meta": {}}, +{"line": 4687,"column": 9,"meta": {}}, +{"line": 4723,"column": 23,"meta": {}}, +{"line": 4725,"column": 17,"meta": {}}, +{"line": 4745,"column": 9,"meta": {}}, +{"line": 4747,"column": 17,"meta": {}}, +{"line": 4751,"column": 13,"meta": {}}, +{"line": 4758,"column": 9,"meta": {}}, +{"line": 4760,"column": 19,"meta": {}}, +{"line": 4762,"column": 19,"meta": {}}, +{"line": 4770,"column": 19,"meta": {}}, +{"line": 4774,"column": 9,"meta": {}}, +{"line": 4775,"column": 9,"meta": {}}, +{"line": 4792,"column": 13,"meta": {}}, +{"line": 4794,"column": 23,"meta": {}}, +{"line": 4798,"column": 23,"meta": {}}, +{"line": 4800,"column": 23,"meta": {}}, +{"line": 4803,"column": 13,"meta": {}}, +{"line": 4806,"column": 13,"meta": {}}, +{"line": 4814,"column": 9,"meta": {}}, +{"line": 4815,"column": 9,"meta": {}}, +{"line": 4816,"column": 9,"meta": {}}, +{"line": 4820,"column": 19,"meta": {}}, +{"line": 4828,"column": 9,"meta": {}}, +{"line": 4833,"column": 13,"meta": {}}, +{"line": 4835,"column": 23,"meta": {}}, +{"line": 4837,"column": 13,"meta": {}}, +{"line": 4839,"column": 23,"meta": {}}, +{"line": 4846,"column": 13,"meta": {}}, +{"line": 4849,"column": 23,"meta": {}}, +{"line": 4865,"column": 9,"meta": {}}, +{"line": 4866,"column": 9,"meta": {}}, +{"line": 4880,"column": 13,"meta": {}}, +{"line": 4881,"column": 25,"meta": {}}, +{"line": 4890,"column": 13,"meta": {}}, +{"line": 4896,"column": 23,"meta": {}}, +{"line": 4901,"column": 17,"meta": {}}, +{"line": 4903,"column": 27,"meta": {}}, +{"line": 4907,"column": 13,"meta": {}}, +{"line": 4911,"column": 23,"meta": {}}, +{"line": 4915,"column": 17,"meta": {}}, +{"line": 4916,"column": 27,"meta": {}}, +{"line": 4924,"column": 13,"meta": {}}, +{"line": 4928,"column": 27,"meta": {}}, +{"line": 4941,"column": 13,"meta": {}}, +{"line": 4942,"column": 13,"meta": {}}, +{"line": 4946,"column": 23,"meta": {}}, +{"line": 4952,"column": 13,"meta": {}}, +{"line": 4968,"column": 12,"meta": {}}, +{"line": 4969,"column": 5,"meta": {}}, +{"line": 4972,"column": 5,"meta": {}}, +{"line": 4976,"column": 5,"meta": {}}, +{"line": 4979,"column": 10,"meta": {}}, +{"line": 4987,"column": 9,"meta": {}}, +{"line": 4990,"column": 21,"meta": {}}, +{"line": 4993,"column": 9,"meta": {}}, +{"line": 4994,"column": 14,"meta": {}}, +{"line": 4998,"column": 23,"meta": {}}, +{"line": 5005,"column": 12,"meta": {}}, +{"line": 5008,"column": 5,"meta": {}}, +{"line": 5009,"column": 5,"meta": {}}, +{"line": 5014,"column": 17,"meta": {}}, +{"line": 5015,"column": 18,"meta": {}}, +{"line": 5018,"column": 9,"meta": {}}, +{"line": 5021,"column": 9,"meta": {}}, +{"line": 5025,"column": 5,"meta": {}}, +{"line": 5031,"column": 9,"meta": {}}, +{"line": 5034,"column": 42,"meta": {}}, +{"line": 5048,"column": 13,"meta": {}}, +{"line": 5052,"column": 42,"meta": {}}, +{"line": 5066,"column": 13,"meta": {}}, +{"line": 5080,"column": 9,"meta": {}}, +{"line": 5088,"column": 26,"meta": {}}, +{"line": 5095,"column": 5,"meta": {}}, +{"line": 5098,"column": 20,"meta": {}}, +{"line": 5100,"column": 9,"meta": {}}, +{"line": 5107,"column": 9,"meta": {}}, +{"line": 5110,"column": 30,"meta": {}}, +{"line": 5113,"column": 13,"meta": {}}, +{"line": 5114,"column": 25,"meta": {}}, +{"line": 5123,"column": 9,"meta": {}}, +{"line": 5131,"column": 17,"meta": {}}, +{"line": 5137,"column": 33,"meta": {}}, +{"line": 5143,"column": 17,"meta": {}}, +{"line": 5147,"column": 21,"meta": {}}, +{"line": 5148,"column": 21,"meta": {}}, +{"line": 5152,"column": 30,"meta": {}}, +{"line": 5154,"column": 25,"meta": {}}, +{"line": 5164,"column": 13,"meta": {}}, +{"line": 5169,"column": 8,"meta": {}}, +{"line": 5170,"column": 53,"meta": {}}, +{"line": 5173,"column": 5,"meta": {}}, +{"line": 5176,"column": 12,"meta": {}}, +{"line": 5179,"column": 9,"meta": {}}, +{"line": 5184,"column": 13,"meta": {}}, +{"line": 5193,"column": 14,"meta": {}}, +{"line": 5196,"column": 5,"meta": {}}, +{"line": 5201,"column": 9,"meta": {}}, +{"line": 5205,"column": 37,"meta": {}}, +{"line": 5206,"column": 11,"meta": {}}, +{"line": 5208,"column": 9,"meta": {}}, +{"line": 5217,"column": 13,"meta": {}}, +{"line": 5228,"column": 13,"meta": {}}, +{"line": 5233,"column": 9,"meta": {}}, +{"line": 5234,"column": 9,"meta": {}}, +{"line": 5239,"column": 13,"meta": {}}, +{"line": 5245,"column": 13,"meta": {}}, +{"line": 5252,"column": 13,"meta": {}}, +{"line": 5272,"column": 13,"meta": {}}, +{"line": 5275,"column": 47,"meta": {}}, +{"line": 5283,"column": 13,"meta": {}}, +{"line": 5296,"column": 13,"meta": {}}, +{"line": 5297,"column": 42,"meta": {}}, +{"line": 5309,"column": 13,"meta": {}}, +{"line": 5310,"column": 40,"meta": {}}, +{"line": 5318,"column": 13,"meta": {}}, +{"line": 5328,"column": 5,"meta": {}}, +{"line": 5331,"column": 13,"meta": {}}, +{"line": 5335,"column": 5,"meta": {}}, +{"line": 5339,"column": 13,"meta": {}}, +{"line": 5355,"column": 12,"meta": {}}, +{"line": 5370,"column": 9,"meta": {}}, +{"line": 5371,"column": 14,"meta": {}}, +{"line": 5376,"column": 14,"meta": {}}, +{"line": 5377,"column": 13,"meta": {}}, +{"line": 5383,"column": 14,"meta": {}}, +{"line": 5392,"column": 14,"meta": {}}, +{"line": 5393,"column": 13,"meta": {}}, +{"line": 5404,"column": 9,"meta": {}}, +{"line": 5409,"column": 9,"meta": {}}, +{"line": 5413,"column": 5,"meta": {}}, +{"line": 5416,"column": 5,"meta": {}}, +{"line": 5418,"column": 5,"meta": {}}, +{"line": 5423,"column": 9,"meta": {}}, +{"line": 5435,"column": 9,"meta": {}}, +{"line": 5437,"column": 13,"meta": {}}, +{"line": 5438,"column": 9,"meta": {}}, +{"line": 5442,"column": 13,"meta": {}}, +{"line": 5444,"column": 17,"meta": {}}, +{"line": 5445,"column": 17,"meta": {}}, +{"line": 5450,"column": 5,"meta": {}}, +{"line": 5457,"column": 9,"meta": {}}, +{"line": 5475,"column": 5,"meta": {}}, +{"line": 5482,"column": 9,"meta": {}}, +{"line": 5486,"column": 13,"meta": {}}, +{"line": 5489,"column": 17,"meta": {}}, +{"line": 5522,"column": 9,"meta": {}}, +{"line": 5523,"column": 9,"meta": {}}, +{"line": 5525,"column": 5,"meta": {}}, +{"line": 5526,"column": 5,"meta": {}}, +{"line": 5531,"column": 13,"meta": {}}, +{"line": 5533,"column": 27,"meta": {}}, +{"line": 5543,"column": 9,"meta": {}}, +{"line": 5544,"column": 9,"meta": {}}, +{"line": 5549,"column": 13,"meta": {}}, +{"line": 5556,"column": 9,"meta": {}}, +{"line": 5558,"column": 9,"meta": {}}, +{"line": 5561,"column": 13,"meta": {}}, +{"line": 5587,"column": 9,"meta": {}}, +{"line": 5591,"column": 13,"meta": {}}, +{"line": 5594,"column": 27,"meta": {}}, +{"line": 5606,"column": 9,"meta": {}}, +{"line": 5608,"column": 13,"meta": {}}, +{"line": 5613,"column": 14,"meta": {}}, +{"line": 5617,"column": 9,"meta": {}}, +{"line": 5624,"column": 9,"meta": {}}, +{"line": 5631,"column": 12,"meta": {}}, +{"line": 5640,"column": 5,"meta": {}}, +{"line": 5643,"column": 5,"meta": {}}, +{"line": 5644,"column": 10,"meta": {}}, +{"line": 5645,"column": 10,"meta": {}}, +{"line": 5649,"column": 5,"meta": {}}, +{"line": 5653,"column": 27,"meta": {}}, +{"line": 5655,"column": 17,"meta": {}}, +{"line": 5659,"column": 27,"meta": {}}, +{"line": 5667,"column": 5,"meta": {}}, +{"line": 5669,"column": 10,"meta": {}}, +{"line": 5670,"column": 9,"meta": {}}, +{"line": 5676,"column": 21,"meta": {}}, +{"line": 5677,"column": 9,"meta": {}}, +{"line": 5681,"column": 10,"meta": {}}, +{"line": 5689,"column": 21,"meta": {}}, +{"line": 5690,"column": 9,"meta": {}}, +{"line": 5694,"column": 5,"meta": {}}, +{"line": 5699,"column": 5,"meta": {}}, +{"line": 5703,"column": 21,"meta": {}}, +{"line": 5709,"column": 9,"meta": {}}, +{"line": 5710,"column": 9,"meta": {}}, +{"line": 5715,"column": 25,"meta": {}}, +{"line": 5718,"column": 5,"meta": {}}, +{"line": 5728,"column": 12,"meta": {}}, +{"line": 5735,"column": 5,"meta": {}}, +{"line": 5737,"column": 5,"meta": {}}, +{"line": 5738,"column": 5,"meta": {}}, +{"line": 5741,"column": 10,"meta": {}}, +{"line": 5744,"column": 12,"meta": {}}, +{"line": 5746,"column": 9,"meta": {}}, +{"line": 5750,"column": 9,"meta": {}}, +{"line": 5756,"column": 5,"meta": {}}, +{"line": 5762,"column": 9,"meta": {}}, +{"line": 5766,"column": 13,"meta": {}}, +{"line": 5768,"column": 13,"meta": {}}, +{"line": 5772,"column": 23,"meta": {}}, +{"line": 5778,"column": 19,"meta": {}}, +{"line": 5784,"column": 5,"meta": {}}, +{"line": 5787,"column": 15,"meta": {}}, +{"line": 5795,"column": 12,"meta": {}}, +{"line": 5799,"column": 5,"meta": {}}, +{"line": 5800,"column": 10,"meta": {}}, +{"line": 5801,"column": 5,"meta": {}}, +{"line": 5808,"column": 12,"meta": {}}, +{"line": 5812,"column": 5,"meta": {}}, +{"line": 5813,"column": 10,"meta": {}}, +{"line": 5814,"column": 5,"meta": {}}, +{"line": 5815,"column": 12,"meta": {}}, +{"line": 5821,"column": 12,"meta": {}}, +{"line": 5823,"column": 12,"meta": {}}, +{"line": 5826,"column": 12,"meta": {}}, +{"line": 5830,"column": 5,"meta": {}}, +{"line": 5831,"column": 10,"meta": {}}, +{"line": 5832,"column": 5,"meta": {}}, +{"line": 5874,"column": 5,"meta": {}}, +{"line": 5900,"column": 17,"meta": {}}, +{"line": 5917,"column": 17,"meta": {}}, +{"line": 5931,"column": 17,"meta": {}}, +{"line": 5947,"column": 13,"meta": {}}, +{"line": 5963,"column": 9,"meta": {}}, +{"line": 5964,"column": 20,"meta": {}}, +{"line": 5969,"column": 16,"meta": {}}, +{"line": 5972,"column": 13,"meta": {}}, +{"line": 5974,"column": 5,"meta": {}}, +{"line": 5992,"column": 9,"meta": {}}, +{"line": 5994,"column": 18,"meta": {}}, +{"line": 5998,"column": 19,"meta": {}}, +{"line": 6006,"column": 5,"meta": {}}, +{"line": 6013,"column": 12,"meta": {}}, +{"line": 6016,"column": 5,"meta": {}}, +{"line": 6019,"column": 5,"meta": {}}, +{"line": 6020,"column": 10,"meta": {}}, +{"line": 6032,"column": 13,"meta": {}}, +{"line": 6034,"column": 17,"meta": {}}, +{"line": 6051,"column": 9,"meta": {}}, +{"line": 6062,"column": 53,"meta": {}}, +{"line": 6065,"column": 5,"meta": {}}, +{"line": 6067,"column": 9,"meta": {}}, +{"line": 6080,"column": 9,"meta": {}}, +{"line": 6101,"column": 9,"meta": {}}, +{"line": 6112,"column": 13,"meta": {}}, +{"line": 6120,"column": 49,"meta": {}}, +{"line": 6121,"column": 11,"meta": {}}, +{"line": 6122,"column": 5,"meta": {}}, +{"line": 6127,"column": 13,"meta": {}}, +{"line": 6141,"column": 9,"meta": {}}, +{"line": 6142,"column": 9,"meta": {}}, +{"line": 6155,"column": 21,"meta": {}}, +{"line": 6159,"column": 17,"meta": {}}, +{"line": 6171,"column": 21,"meta": {}}, +{"line": 6172,"column": 30,"meta": {}}, +{"line": 6184,"column": 13,"meta": {}}, +{"line": 6202,"column": 12,"meta": {}}, +{"line": 6214,"column": 5,"meta": {}}, +{"line": 6215,"column": 10,"meta": {}}, +{"line": 6218,"column": 5,"meta": {}}, +{"line": 6224,"column": 9,"meta": {}}, +{"line": 6231,"column": 18,"meta": {}}, +{"line": 6236,"column": 14,"meta": {}}, +{"line": 6239,"column": 9,"meta": {}}, +{"line": 6247,"column": 9,"meta": {}}, +{"line": 6252,"column": 5,"meta": {}}, +{"line": 6260,"column": 12,"meta": {}}, +{"line": 6280,"column": 5,"meta": {}}, +{"line": 6283,"column": 5,"meta": {}}, +{"line": 6284,"column": 10,"meta": {}}, +{"line": 6285,"column": 10,"meta": {}}, +{"line": 6303,"column": 9,"meta": {}}, +{"line": 6316,"column": 5,"meta": {}}, +{"line": 6319,"column": 5,"meta": {}}, +{"line": 6326,"column": 13,"meta": {}}, +{"line": 6367,"column": 29,"meta": {}}, +{"line": 6368,"column": 13,"meta": {}}, +{"line": 6376,"column": 21,"meta": {}}, +{"line": 6384,"column": 13,"meta": {}}, +{"line": 6389,"column": 9,"meta": {}}, +{"line": 6399,"column": 12,"meta": {}}, +{"line": 6403,"column": 5,"meta": {}}, +{"line": 6404,"column": 10,"meta": {}}, +{"line": 6408,"column": 5,"meta": {}}, +{"line": 6418,"column": 9,"meta": {}}, +{"line": 6419,"column": 29,"meta": {}}, +{"line": 6439,"column": 12,"meta": {}}, +{"line": 6444,"column": 5,"meta": {}}, +{"line": 6445,"column": 10,"meta": {}}, +{"line": 6446,"column": 21,"meta": {}}, +{"line": 6459,"column": 9,"meta": {}}, +{"line": 6460,"column": 25,"meta": {}}, +{"line": 6465,"column": 9,"meta": {}}, +{"line": 6476,"column": 5,"meta": {}}, +{"line": 6479,"column": 9,"meta": {}}, +{"line": 6490,"column": 13,"meta": {}}, +{"line": 6494,"column": 9,"meta": {}}, +{"line": 6496,"column": 12,"meta": {}}, +{"line": 6503,"column": 12,"meta": {}}, +{"line": 6506,"column": 33,"meta": {}}, +{"line": 6507,"column": 33,"meta": {}}, +{"line": 6512,"column": 9,"meta": {}}, +{"line": 6937,"column": 20,"meta": {}}, +{"line": 6944,"column": 20,"meta": {}}, +{"line": 8086,"column": 9,"meta": {}}, +{"line": 8092,"column": 9,"meta": {}}]}] + diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index e9d4fa2fec..8e27ba1599 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -1,7 +1,6 @@ #include "slicer.h" #include #include -#define __INTERPROCEDURAL__ struct SliceComparator { template @@ -120,7 +119,8 @@ void copy_files(map> &file_lines) { if (true) { std::ofstream out("out/command.c"); for (const auto &file : file_lines) { - std::ifstream in("out/" + file.first.substr(file.first.find_last_of("/"), string::npos)); + std::ifstream in("out/" + file.first.substr(file.first.find_last_of("/"), + string::npos)); std::string line; bool last_empty = false; while (std::getline(in, line)) { @@ -130,6 +130,7 @@ void copy_files(map> &file_lines) { } last_empty = true; } else { + out << line; last_empty = false; } } @@ -149,26 +150,29 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, llvm::dbgs() << "\n\n\n" << fun_name << "\n\n\n"; bool isUsed = false; for (auto &bb : function) { - if (fun_name == "parse_value") { - llvm::dbgs() << ""; - } for (const auto &i : bb) { - llvm::dbgs() - << "========================================================\n"; + // llvm::dbgs() + // << + // "========================================================\n"; auto res = solver.ifdsResultsAt(&i); - llvm::dbgs() << "INS: " << llvmIRToString(&i) - << " FACTS:" << res.size() << "\n"; - llvm::dbgs() << "SRC: " << psr::getSrcCodeFromIR(&i) << "\n" - << res.size() << "\n"; + // llvm::dbgs() << "INS: " << llvmIRToString(&i) + // << " FACTS:" << res.size() << "\n"; + // llvm::dbgs() << "SRC: " << psr::getSrcCodeFromIR(&i) << + // "\n" + // << res.size() << "\n"; for (auto fact : res) { if (!fact.isZero()) { auto extractedInstruction = fact.getInstruction(); - llvm::dbgs() << "FACT INS: " - << llvmIRToString(fact.getInstruction()) << "\n"; - llvm::dbgs() << "SRC: " << *fact.getLocation() << " " - << psr::getSrcCodeFromIR(extractedInstruction) - << "\n" - << "\n"; + // llvm::dbgs() << "FACT INS: " + // << + // llvmIRToString(fact.getInstruction()) + // << "\n"; + // llvm::dbgs() << "SRC: " << *fact.getLocation() << + // " " + // << + // psr::getSrcCodeFromIR(extractedInstruction) + // << "\n" + // << "\n"; // if (extractedInstruction-> == function && // extractedInstruction == &i || true) { @@ -220,8 +224,8 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, // std::make_tuple(psr::getSrcCodeFromIR(exit), // *createLocation(INT_MAX, INT_MAX), // exit)); - llvm::dbgs() << "GOT NO DEBUG LOG" - << "\n"; + // llvm::dbgs() << "GOT NO DEBUG LOG" + // << "\n"; } } } @@ -234,28 +238,29 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, << "\n"; map> file_lines; for (auto &p : slice_instruction) { - llvm::dbgs()<<"F:\t" << p.first->getName() << "\t" << p.second.size() << "\n"; + llvm::dbgs() << "F:\t" << p.first->getName() << "\t" << p.second.size() + << "\n"; auto file = psr::getFilePathFromIR(p.first); auto first = true; - // file_lines[file] - // file_lines[file] = set (); + + std::set block_lines; for (const auto &s : p.second) { if (first) { auto line = psr::getLineFromIR(p.first); llvm::dbgs() << psr::getSrcCodeFromIR(p.first) << "\t" << line << "\n"; auto end_line = psr::getFunctionHeaderLines(p.first); - for (unsigned int l = line; l <= end_line; ++ l) { + for (unsigned int l = line; l <= end_line; ++l) { file_lines[file].insert(l); - } + } first = false; } - if (auto phi = dyn_cast(s)) { + if (auto *phi = dyn_cast(s)) { llvm::dbgs() << "GOT PHI\t" << *s << "\n"; - } else if (auto debug_call = dyn_cast(s)) { - if (auto debug_info = + } else if (auto *debug_call = dyn_cast(s)) { + if (auto *debug_info = dyn_cast(debug_call->getOperand(1))) { - if (auto localVariable = + if (auto *localVariable = dyn_cast(debug_info->getMetadata())) { file_lines[file].insert(localVariable->getLine()); } @@ -266,37 +271,39 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, llvm::dbgs() << *s << "\t" << src << "\t" << line << "\n"; file_lines[file].insert(line); - if (auto inst = dyn_cast(s)) { - for (unsigned int i =0; i < inst->getNumOperands();++i){ - if (auto global = dyn_cast(inst->getOperand(i))){ - auto g_line = psr::getLineFromIR(global); - auto g_src = psr::getSrcCodeFromIR(global); - file_lines[file].insert(g_line); - } + if (auto *inst = dyn_cast(s)) { + for (unsigned int i = 0; i < inst->getNumOperands(); ++i) { + if (auto *global = dyn_cast(inst->getOperand(i))) { + auto g_line = psr::getLineFromIR(global); + auto g_src = psr::getSrcCodeFromIR(global); + file_lines[file].insert(g_line); + } } if (inst->getDebugLoc()) { - if (auto scope = + if (auto *scope = dyn_cast(inst->getDebugLoc().getScope())) { - auto lines = add_block(file,line); - for (auto line : *lines ){ - file_lines[file].insert(line); - } + block_lines.insert(line); file_lines[file].insert(scope->getLine()); } } - if (auto br = dyn_cast(inst)) { - if (br->isUnconditional() && src.find("}") == src.npos && line != 0) { + if (auto *br = dyn_cast(inst)) { + if (br->isUnconditional() && src.find('}') == src.npos && + line != 0) { file_lines[file].insert(line + 1); } } - if (auto ret = dyn_cast(inst)) { - if (src.find("}") == src.npos&& line != 0) { + if (auto *ret = dyn_cast(inst)) { + if (src.find('}') == src.npos && line != 0) { file_lines[file].insert(line + 1); } } } } } + auto lines = add_block(file, &block_lines); + for (auto line : *lines) { + file_lines[file].insert(line); + } } copy_files(file_lines); } @@ -305,7 +312,7 @@ std::string createSlice(string target, const set &entrypoints, const vector &terms) { ProjectIRDB DB({std::move(target)}, IRDBOptions::WPA); initializeLogger(false); -// initializeLogger(true); + // initializeLogger(true); LLVMTypeHierarchy th(DB); LLVMBasedBackwardsICFG cg(DB, CallGraphAnalysisType::DTA, set(entrypoints), &th); @@ -315,7 +322,7 @@ std::string createSlice(string target, const set &entrypoints, for (auto *module : DB.getAllModules()) { for (auto &function : module->functions()) { for (auto &bb : function) { - auto sub = function.getSubprogram(); + auto sub = function.getSubprogram(); for (const auto &i : bb) { set facts; if (auto *debuglog = i.getDebugLoc().get()) { @@ -338,13 +345,15 @@ std::string createSlice(string target, const set &entrypoints, } } for (const auto &t : terms) { + const size_t last_slash_idx = t.file.find_last_of("\\/"); + std::string term_file_name(t.file); + if (std::string::npos != last_slash_idx) { + term_file_name.erase(0, last_slash_idx + 1); + } for (const auto &l : t.locations) { // check same statement - if ( -// t.file == file -// && - (l.line == line || - l.line == sub->getLine())) { + if (file.endswith(term_file_name) && + (l.line == line || l.line == sub->getLine())) { facts.insert(SlicerFact(&l, &i)); if (const auto *branch = dyn_cast(&i)) { if (branch->isConditional()) { @@ -379,10 +388,10 @@ std::string createSlice(string target, const set &entrypoints, solver.solve(); ofstream out; out.open("out/graph.dot"); - solver.emitESGAsDot(out); + // solver.emitESGAsDot(out); out.close(); out.open("out/results.txt"); - solver.dumpResults(out); + // solver.dumpResults(out); out.close(); cout << "\n"; process_results(DB, solver, cg); @@ -390,7 +399,7 @@ std::string createSlice(string target, const set &entrypoints, } int main(int argc, const char **argv) { - const rlim_t kStackSize = 128 * 1024 * 1024; // min stack size = 128 MB + const rlim_t kStackSize = 512 * 1024 * 1024; // min stack size = 128 MB struct rlimit rl; int result; result = getrlimit(RLIMIT_STACK, &rl); @@ -442,6 +451,28 @@ int main(int argc, const char **argv) { std::chrono::steady_clock::now(); createSlice(target, entrypoints, terms); std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); +// compare_slice( +// "/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/memcached-stats/stats.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/command.c"); + compare_slice("/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/" + "memcached-command/command.c", + "/media/Volume/Arbeit/Arbeit/code/phasar/out/command.c"); +// compare_slice( +// "/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/the_silver_searcher/src/ignore.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/ignore.c"); +// compare_slice( +// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson/parse.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/parson.c"); +// compare_slice( +// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson/serialize.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/parson.c"); +// compare_slice("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/inotify-tools/libinotifytools/src/stats.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/inotifytools.c"); +// compare_slice("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/fping/src/stats.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/fping.c"); +// compare_slice( +// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/redis/src/cluster_manager.c", +// "/media/Volume/Arbeit/Arbeit/code/phasar/out/command.c"); std::cout << "Time difference = " << std::chrono::duration_cast(end - begin) @@ -459,22 +490,6 @@ int main(int argc, const char **argv) { << "Time difference = " << std::chrono::duration_cast(end - begin).count() << "[m]" << std::endl; -// compare_slice( -// "/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/memcached/command.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/command.c"); -// compare_slice( -// "/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/the_silver_searcher/src/ignore.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/ignore.c"); -// compare_slice( -// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson/parse.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/parson.c"); -// compare_slice( -// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson/serialize.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/parson.c"); -// compare_slice("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/inotify-tools/libinotifytools/src/stats.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/inotifytools.c"); -// compare_slice("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/fping/src/stats.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/fping.c"); return 0; } // TODO: @@ -487,59 +502,52 @@ std::set NormalFlowFunction::computeTargets(SlicerFact source) { // check logic for conditions - if (!source.isZero()) { + if (!source.isZero() && source.is_within_limits()) { if (auto branch = dyn_cast(source.getInstruction())) { if (!branch->isUnconditional()) { facts.insert(source); } - } else if (auto call = dyn_cast(source.getInstruction())) { + } else if (auto call = + dyn_cast(source.getInstruction())) { // Don't propagate further - } else { + } else { facts.insert(source); } -// llvm::dbgs() << "===================\n"; -// llvm::dbgs() << "curr: " << *curr << "\n"; -// llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; -// llvm::dbgs() << "src: " << psr::getSrcCodeFromIR(curr) << "\n"; -// llvm::dbgs() << curr->getFunction()->getName() << "\n"; + // llvm::dbgs() << "===================\n"; + // llvm::dbgs() << "curr: " << *curr << "\n"; + // llvm::dbgs() << "Source: " << *source.getInstruction() << + // "\n"; llvm::dbgs() << "src: " << psr::getSrcCodeFromIR(curr) + // << "\n"; llvm::dbgs() << curr->getFunction()->getName() << + // "\n"; auto fun = curr->getFunction()->getName(); -// if (fun == "parse_value") { -// llvm::dbgs() << ""; -// } -// if (auto load = dyn_cast(curr)) { -// llvm::dbgs() << ""; -// } - // if (auto gep = dyn_cast(curr)) { - // llvm::dbgs() << "GEP"; - // } - // if (auto store = dyn_cast(curr)) { - // llvm::dbgs() << "Store"; - // } + for (const auto &user : curr->users()) { - // llvm::dbgs() << "USE" << *user << "\n"; if (user == source.getInstruction()) { - // llvm::dbgs() << "RELEVANT USE" << - // "\n"; - facts.insert(SlicerFact(source.getLocation(), curr)); + facts.insert( + SlicerFact(source.getLocation(), curr, source.getInterDistance())); } } - if (auto load = dyn_cast(curr) ) { +#ifdef OPERAND_PROP + if (auto load = dyn_cast(curr)) { if (auto ins = dyn_cast(source.getInstruction())) { for (unsigned int i = 0; i < load->getNumOperands(); ++i) { for (unsigned int j = 0; j < ins->getNumOperands(); ++j) { if (load->getOperand(i) == ins->getOperand(j)) { - facts.insert(SlicerFact(source.getLocation(),load)); + facts.insert(SlicerFact(source.getLocation(), load, + source.getInterDistance())); } } } } } - if (auto gep = dyn_cast(curr)){ +#endif + if (auto gep = dyn_cast(curr)) { if (auto ins = dyn_cast(source.getInstruction())) { for (unsigned int i = 0; i < gep->getNumOperands(); ++i) { for (unsigned int j = 0; j < ins->getNumOperands(); ++j) { if (gep->getOperand(i) == ins->getOperand(j)) { - facts.insert(SlicerFact(source.getLocation(),gep)); + facts.insert(SlicerFact(source.getLocation(), gep, + source.getInterDistance())); } } } @@ -549,7 +557,8 @@ std::set NormalFlowFunction::computeTargets(SlicerFact source) { for (unsigned int i = 0; i < br->getNumOperands(); ++i) { if (auto *target = dyn_cast(br->getOperand(i))) { if (source.getInstruction() == &target->front()) { - facts.insert(SlicerFact(source.getLocation(), curr)); + facts.insert(SlicerFact(source.getLocation(), curr, + source.getInterDistance())); // This is the phi instruction after the branch if we are the target // we are relevant } @@ -561,18 +570,18 @@ std::set NormalFlowFunction::computeTargets(SlicerFact source) { } std::set CallToRetFlowFunction::computeTargets(SlicerFact source) { set facts; - if (!source.isZero() && source.getInstruction() != callSite) { -// llvm::dbgs() << "===================\n"; -// llvm::dbgs() << "curr: " << *callSite << "\n"; -// llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; -// llvm::dbgs() << callSite->getFunction()->getName() << "\n"; - auto fun = callSite->getFunction()->getName(); -// if (fun == "process_string") { -// llvm::dbgs() << ""; -// } + if (!source.isZero() && source.getInstruction() != callSite && + source.is_within_limits()) { + // llvm::dbgs() << "===================\n"; + // llvm::dbgs() << "curr: " << *callSite << "\n"; + // llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; + // llvm::dbgs() << callSite->getFunction()->getName() << "\n"; + // auto fun = callSite->getFunction()->getName(); + // if (fun == "process_string") { + // llvm::dbgs() << ""; + // } if (auto ins = dyn_cast(source.getInstruction())) { for (unsigned int j = 0; j < ins->getNumOperands(); ++j) { -// auto op2 = ins->getOperand(j); for (unsigned int i = 0; i < callSite->getNumOperands(); ++i) { auto op1 = callSite->getOperand(i); if (auto metadata = dyn_cast(op1)) { @@ -591,8 +600,6 @@ std::set CallToRetFlowFunction::computeTargets(SlicerFact source) { } for (const auto &user : callSite->users()) { if (user == source.getInstruction()) { - // llvm::dbgs() << "RELEVANT USE" << - // "\n"; facts.insert(SlicerFact(source.getLocation(), callSite)); } } @@ -606,34 +613,40 @@ CallFlowFunction::computeTargets(SlicerFact source) { set facts; // facts.insert(source); #ifdef __INTERPROCEDURAL__ - if (!source.isZero()) { -// llvm::dbgs() << "===================\n"; -// llvm::dbgs() << "Curr:" <<*callStmt << "\n"; -// llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; -// llvm::dbgs() << callStmt->getFunction()->getName() << "\n"; - -// if (callStmt->getFunction()->getName() == "inotifytools_get_stat_by_filename") { -// llvm::dbgs() << ""; -// } + if (!source.isZero() && source.is_within_limits()) { + // llvm::dbgs() << "===================\n"; + // llvm::dbgs() << "Curr:" <<*callStmt << "\n"; + // llvm::dbgs() << "Source: " << *source.getInstruction() << "\n"; + // llvm::dbgs() << callStmt->getFunction()->getName() << "\n"; + + // if (callStmt->getFunction()->getName() == + // "inotifytools_get_stat_by_filename") { + // llvm::dbgs() << ""; + // } auto targets = ICF->getStartPointsOf(destMthd); bool isRelevant = false; // source is global or uses the return value +#ifdef OPERAND_PROP if (auto inst = dyn_cast(source.getInstruction())) { - for (unsigned int i = 0; i < inst->getNumOperands();++i) { + for (unsigned int i = 0; i < inst->getNumOperands(); ++i) { auto op = inst->getOperand(i); isRelevant |= isa(op); } - for (const auto& use : callStmt->uses()) { + for (const auto &use : callStmt->uses()) { isRelevant |= (use.getUser() == inst); } } if (isRelevant) { +#endif for (auto target : targets) { - facts.insert(SlicerFact(source.getLocation(), target)); + facts.insert(SlicerFact(source.getLocation(), target, + source.getInterDistance() + 1)); } +#ifdef OPERAND_PROP } +#endif // OPERAND_PROP } -#endif +#endif // INTERPROCEDURAL return facts; } template @@ -648,16 +661,18 @@ RetFlowFunction::computeTargets(SlicerFact source) { set facts; // facts.insert(source); #ifdef __INTERPROCEDURAL__ - // for (unsigned int i = 0; i < callSite->getNumOperands(); ++i) { -// const auto op = callSite->getOperand(i); -// if (source.getInstruction() == op) { -// facts.insert(SlicerFact(source.getLocation(), -// getNthFunctionArgument(calleeMthd, i))); -// } -// } -// if (!source.isZero()) { -// facts.insert(SlicerFact(source.getLocation(), exitStmt)); -// } + for (unsigned int i = 0; i < callSite->getNumOperands(); ++i) { + const auto op = callSite->getOperand(i); + if (source.getInstruction() == op) { + facts.insert(SlicerFact(source.getLocation(), + getNthFunctionArgument(calleeMthd, i), + source.getInterDistance() + 1)); + } + } + if (!source.isZero() && source.is_within_limits()) { + facts.insert(SlicerFact(source.getLocation(), exitStmt, + source.getInterDistance() + 1)); + } #endif return facts; } @@ -693,11 +708,7 @@ void compare_slice(string original, string module) { original_lines.begin(), original_lines.end(), std::inserter(additional, additional.begin())); - cout << "Original Size is:\t" << original_lines.size() << endl; - cout << "Intersection Size is:\t" << intersection.size() << endl; - cout << "Additional Size is:\t" << additional.size() << endl; - cout << "Missing Size is:\t" << missing.size() << endl; - cout << "\n\n\n"; + for (auto m : missing) { cout << m << "\n"; } @@ -705,34 +716,44 @@ void compare_slice(string original, string module) { for (auto a : additional) { cout << a << "\n"; } + cout << "Original Size is:\t" << original_lines.size() << endl; + cout << "Intersection Size is:\t" << intersection.size() << endl; + cout << "Additional Size is:\t" << additional.size() << endl; + cout << "Missing Size is:\t" << missing.size() << endl; + cout << "\n\n\n"; } class RewriteSourceVisitor : public clang::RecursiveASTVisitor { public: - RewriteSourceVisitor(clang::ASTContext &context, unsigned int line, + RewriteSourceVisitor(clang::ASTContext &context, + std::set *target_lines, const shared_ptr> &resultingLines) - : context(context), line(line), resulting_lines(resultingLines), candidate_lines() { - } + : context(context), target_lines(target_lines), + resulting_lines(resultingLines), candidate_lines() {} [[maybe_unused]] virtual bool VisitStmt(clang::Stmt *S) { - auto es = context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); - auto es4 = context.getSourceManager().getExpansionLineNumber(S->getEndLoc());\ - if (es == es4 && es == line) { - for (auto &l : candidate_lines) { - resulting_lines->insert(l); - } - } + auto es = + context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); + auto es4 = + context.getSourceManager().getExpansionLineNumber(S->getEndLoc()); + if (es == es4 && target_lines->find(es) != target_lines->end()) { + for (auto &l : candidate_lines) { + resulting_lines->insert(l); + } + } return true; } - [[maybe_unused]] virtual bool VisitDefaultStmt(clang::DefaultStmt *S){ - auto line = context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); + [[maybe_unused]] virtual bool VisitDefaultStmt(clang::DefaultStmt *S) { + auto line = + context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); candidate_lines.insert(line); return true; } bool VisitCaseStmt(clang::CaseStmt *S) { - auto line = context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); + auto line = + context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); candidate_lines.insert(line); return true; } @@ -744,70 +765,70 @@ class RewriteSourceVisitor private: clang::ASTContext &context; - unsigned int line; + std::set *target_lines; shared_ptr> resulting_lines; std::set candidate_lines; }; - class RewriteSourceConsumer : public clang::ASTConsumer { public: RewriteSourceConsumer( - unsigned int line, + std::set *target_lines, const shared_ptr> &resultingLines) - : line(line), resulting_lines(resultingLines) {} + : target_lines(target_lines), resulting_lines(resultingLines) {} virtual void HandleTranslationUnit(clang::ASTContext &Context) { // Traversing the translation unit decl via a RecursiveASTVisitor // will visit all nodes in the AST. -// llvm::dbgs << Context.getTranslationUnitDecl(); - RewriteSourceVisitor Visitor(Context,line,resulting_lines); + // llvm::dbgs << Context.getTranslationUnitDecl(); + RewriteSourceVisitor Visitor(Context, target_lines, resulting_lines); Visitor.TraverseDecl(Context.getTranslationUnitDecl()); } + private: // A RecursiveASTVisitor implementation. - unsigned int line; + std::set *target_lines; shared_ptr> resulting_lines; }; class RewriteSourceAction // : public clang::ASTFrontendAction { - public: - RewriteSourceAction(unsigned int line, + RewriteSourceAction(std::set *target_lines, const shared_ptr> &resultingLines) - : line(line), resulting_lines(resultingLines) {} + : target_lines(target_lines), resulting_lines(resultingLines) {} std::unique_ptr newASTConsumer() { return std::unique_ptr( - new RewriteSourceConsumer(line,resulting_lines)); + new RewriteSourceConsumer(target_lines, resulting_lines)); } -// virtual std::unique_ptr CreateASTConsumer( -// clang::CompilerInstance &Compiler, llvm::StringRef InFile) { -// return std::unique_ptr( -// new RewriteSourceConsumer(line)); -// } private: - unsigned int line; + std::set *target_lines; shared_ptr> resulting_lines; }; - -shared_ptr> add_block(std::string file,unsigned int line) { - auto num_args = 0; -// auto args = "-- clang /media/Volume/Arbeit/Arbeit/code/phasar/targets/switch_ex.c -o switch_ex"; +shared_ptr> +add_block(std::string file, std::set *target_lines) { string err = "ERROR_MY"; - auto db = - clang::tooling::CompilationDatabase::autoDetectFromDirectory("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson",err); + auto db = clang::tooling::CompilationDatabase::autoDetectFromDirectory( +// "/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson",err +// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/the_silver_searcher",err +// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/inotify-tools",err +// ); +// auto db = clang::tooling::CompilationDatabase::autoDetectFromDirectory( +// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/fping",err +// ); + "/media/Volume/Arbeit/Arbeit/code/slicing-eval/memcached-command", err); +// auto db = clang::tooling::CompilationDatabase::autoDetectFromDirectory( +// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/redis", err); std::vector Sources; Sources.push_back(file); clang::tooling::ClangTool Tool(*db, Sources); auto res = make_shared>(); - Tool.run(clang::tooling::newFrontendActionFactory(new RewriteSourceAction(line,res)).get()); -// llvm::dbgs() << ""; + Tool.run(clang::tooling::newFrontendActionFactory( + new RewriteSourceAction(target_lines, res)) + .get()); return res; } - -// TODO Check for opening brace \ No newline at end of file diff --git a/tools/module-extractor/slicer.h b/tools/module-extractor/slicer.h index 91ee99e21c..0f3a965b70 100644 --- a/tools/module-extractor/slicer.h +++ b/tools/module-extractor/slicer.h @@ -35,7 +35,9 @@ #include #include #include - +#define __INTERPROCEDURAL__ +#define OPERAND_PROP +//#define _DISTANCE_LIMITS_ namespace bofs = boost::filesystem; using namespace llvm; using namespace std; @@ -60,6 +62,10 @@ bool operator<(const Location &l1, const Location &l2) { return l1.line < l2.line || (l1.line == l2.line && l1.column < l2.column); } +bool operator==(const Location &l1, const Location &l2) { + return l1.line == l2.line || l1.column == l2.column; +} + void to_json(json &j, const Location &l) { j = json{{"line", l.line}, {"column", l.column}, {"meta", l.meta}}; } @@ -105,11 +111,19 @@ namespace std { template <> struct hash { size_t operator()(const SlicerFact &x) const; }; -} +} // namespace std class SlicerFact { public: SlicerFact() = default; - SlicerFact(const Location *l, const Value *i) : l(l), i(i) {} + SlicerFact(const Location *l, const Value *i) + : l(l), i(i) {} + SlicerFact(const Location *l, const Value *i, + int8_t inter_distance) + : l(l), i(i) +#ifdef _DISTANCE_LIMITS_ + ,inter_distance(inter_distance) +#endif + {} bool operator<(const SlicerFact &rhs) const { return i < rhs.i; } bool operator==(const SlicerFact &rhs) const { return i == rhs.i && l == rhs.l; @@ -120,11 +134,26 @@ class SlicerFact { [[nodiscard]] bool isZero() const { return i == nullptr; } const llvm::Value *getInstruction() { return i; } const Location *getLocation() { return l; } + int8_t getInterDistance() const; friend size_t std::hash::operator()(const SlicerFact &x) const; + + bool is_within_limits() { +#ifdef _DISTANCE_LIMITS_ + return inter_distance < INTER_LIMIT; +#else + return true; +#endif + } +#ifdef _DISTANCE_LIMITS_ + static constexpr int8_t INTER_LIMIT = 3; +#endif private: const Location *l = nullptr; const Value *i = nullptr; +#ifdef _DISTANCE_LIMITS_ + int8_t inter_distance =0; +#endif }; std::ostream &operator<<(std::ostream &os, const SlicerFact &rhs) { @@ -150,10 +179,16 @@ raw_ostream &operator<<(raw_ostream &os, const SlicerFact &rhs) { } return os; } - +#ifdef _DISTANCE_LIMITS_ +int8_t SlicerFact::getInterDistance() const { return inter_distance; } +#else +int8_t SlicerFact::getInterDistance() const { return 0; } +#endif namespace std { - size_t hash::operator()(const SlicerFact &x) const { return llvm::hash_value(x.i); } +size_t hash::operator()(const SlicerFact &x) const { + return llvm::hash_value(x.i); +} } // namespace std template struct SlicerAnalysisDomain : public AnalysisDomain { using d_t = SlicerFact; @@ -223,9 +258,7 @@ class CallToRetFlowFunction : public FlowFunction { [[maybe_unused]] set callees; }; - void compare_slice(string original, string module); -shared_ptr> add_block(std::string file,unsigned int line); +shared_ptr> add_block(std::string file, std::set *target_lines); #endif // PHASAR_SLICER_H - diff --git a/unittests/Slicer/Parson_test.cpp b/unittests/Slicer/Parson_test.cpp new file mode 100644 index 0000000000..9bf941360c --- /dev/null +++ b/unittests/Slicer/Parson_test.cpp @@ -0,0 +1,9 @@ +#include "gtest/gtest.h" +TEST( parson_parse ){ + +} + +int main(int Argc, char **Argv) { + ::testing::InitGoogleTest(&Argc, Argv); + return RUN_ALL_TESTS(); +} \ No newline at end of file diff --git a/unittests/Slicer/SliceComparator.cpp b/unittests/Slicer/SliceComparator.cpp new file mode 100644 index 0000000000..110c9a141c --- /dev/null +++ b/unittests/Slicer/SliceComparator.cpp @@ -0,0 +1,11 @@ + + + + + + + + +void compareFiles(string original_file,string sliced) { + +} \ No newline at end of file From 1b75afa20a204229a63e46fc947423e84cb71126 Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 27 Aug 2021 03:32:56 +0200 Subject: [PATCH 16/42] Add result comparator --- tools/module-extractor/CMakeLists.txt | 45 ++++- tools/module-extractor/depfinder.cpp | 153 --------------- tools/module-extractor/mytest.cpp | 188 ------------------- tools/module-extractor/result_comparator.cpp | 17 ++ tools/module-extractor/slicer.cpp | 76 +------- tools/module-extractor/slicer.h | 48 ++++- 6 files changed, 111 insertions(+), 416 deletions(-) delete mode 100644 tools/module-extractor/depfinder.cpp delete mode 100644 tools/module-extractor/mytest.cpp create mode 100644 tools/module-extractor/result_comparator.cpp diff --git a/tools/module-extractor/CMakeLists.txt b/tools/module-extractor/CMakeLists.txt index bab710201c..fc9f2fd57c 100644 --- a/tools/module-extractor/CMakeLists.txt +++ b/tools/module-extractor/CMakeLists.txt @@ -1,7 +1,7 @@ # Build a stand-alone executable if (PHASAR_IN_TREE) add_phasar_executable(slicer - tools/phasar/slicer.cpp + tools/module-extractor/slicer.cpp ) else () add_executable(slicer @@ -9,6 +9,17 @@ else () ) endif () +if (PHASAR_IN_TREE) + add_phasar_executable(result_comparator + tools/module-extractor/result_comparator.cpp + ) +else () + add_executable(result_comparator + ../module-extractor/result_comparator.cpp + ) +endif () + + find_package(Boost COMPONENTS log filesystem program_options graph ${BOOST_THREAD} REQUIRED) target_link_libraries(slicer @@ -41,4 +52,36 @@ else () llvm_config(slicer ${LLVM_LINK_COMPONENTS}) endif () +target_link_libraries(result_comparator + LINK_PUBLIC + phasar_config + phasar_controller + phasar_db + phasar_controlflow + phasar_ifdside + phasar_mono + phasar_wpds + phasar_syncpds + ${PHASAR_PLUGINS_LIB} + wali + phasar_passes + phasar_pointer + phasar_typehierarchy + phasar_phasarllvm_utils + phasar_utils + ${Boost_LIBRARIES} + ${CMAKE_DL_LIBS} + ${CMAKE_THREAD_LIBS_INIT} + ${CLANG_LIBRARY} + ) + + +if (USE_LLVM_FAT_LIB) + llvm_config(slicer USE_SHARED ${LLVM_LINK_COMPONENTS}) + llvm_config(result_comparator USE_SHARED ${LLVM_LINK_COMPONENTS}) +else () + llvm_config(slicer ${LLVM_LINK_COMPONENTS}) + llvm_config(result_comparator ${LLVM_LINK_COMPONENTS}) +endif () + set(LLVM_LINK_COMPONENTS) diff --git a/tools/module-extractor/depfinder.cpp b/tools/module-extractor/depfinder.cpp deleted file mode 100644 index 1ed1c1813b..0000000000 --- a/tools/module-extractor/depfinder.cpp +++ /dev/null @@ -1,153 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace bpo = boost::program_options; -namespace bfs = boost::filesystem; -using namespace llvm; -using namespace std; -using namespace psr; - -class ControlDependence { -public: - ControlDependence(llvm::Instruction *control, llvm::Instruction *dependee): control(control),dependee(dependee){}; - llvm::Instruction *getControl() const { - return control; - } - llvm::Instruction *getDependee() const { - return dependee; - } -private: - llvm::Instruction *control; - llvm::Instruction *dependee; -}; - -void writeMapToFile(map,vector>> &dependencies) { - auto ec = error_code(); - llvm::raw_fd_ostream outFile(llvm::StringRef("results.json"), ec); - outFile << "["; - for (auto p = dependencies.begin();;){ - outFile << "{\n \"name\": \"" << p->first->getName().data() << "\",\n" - << "\"cds\": [\n"; - for (auto cd= p->second.first.begin();;){ - outFile << "{ \"control\":\"" - << *((*cd)->getControl()) - << "\",\"dependee\" : \"" - << *((*cd)->getDependee()) - << "\"}"; - cd++; - if (cd == p->second.first.end()){ - break; - } else { - outFile << ",\n"; - } - } - outFile << "],\n\"dds\" : [\n"; - for (auto use = p->second.second.begin();;){ - outFile << "{ \"def\":\""; - (*use)->get()->print(outFile); - outFile << "\", \"use\":\"" ; - (*use)->getUser()->print(outFile); - outFile<<"\"}"; - use++; - if (use == p->second.second.end()){ - break; - } else { - outFile << ",\n"; - } - } - outFile << "]}"; - p++; - if (p == dependencies.end()){ - break; - } else { - outFile << ","; - } - } - outFile << "]\n"; -} - -map*,vector*>> calculateDF(llvm::PostDominatorTree &PDT) { - map*,vector*>> df; - map*>> tieredPDT; - llvm::DomTreeNodeBase* root = PDT.getRootNode(); - llvm::SmallVector*,5> WL; - WL.push_back(root); - while (!WL.empty()) { - const DomTreeNodeBase *N = WL.pop_back_val(); - tieredPDT[N->getLevel()].push_back(N); - for (auto c : N->getChildren()){ - WL.push_back(c); - } - } - for (size_t i = tieredPDT.size()-1; i > 0; i--){ - for (auto node: tieredPDT[i]){ - for(auto s: successors(node->getBlock())){ - auto y = PDT.getNode(s); - if (y->getIDom() != node){ - df[node].push_back(y); - } - } - for (auto c : node->getChildren()){ - for (auto y : df[c]){ - if (y->getIDom() != c) { - df[node].push_back(y); - } - } - } - } - } - return df; -} - -int main(int argc, const char **argv) { - initializeLogger(true); - ProjectIRDB DB({argv[1]}, IRDBOptions::WPA); - auto result = map,vector>>(); - auto f = DB.getFunction("main"); - if (f){ - auto cds = vector(); - auto dds = vector(); - llvm::PostDominatorTree PDT; - PDT.recalculate(*f); - auto df = calculateDF(PDT); - for (auto &bb : *f) { - auto node = PDT.getNode(&bb); - auto sv = llvm::SmallVector(); - for (auto cd: df[node]) { - auto control = bb.getTerminator(); - for (auto &i : *(cd->getBlock())){ - cds.push_back(new ControlDependence(control,&i)); - } - } - auto idom = node->getIDom(); - for (auto &i : bb) { - if (i.hasNUsesOrMore(1)) { - for (auto &u: i.uses()){ - dds.push_back(&u); - } - } - } - } - result[f] = make_pair(cds,dds); - } else { - llvm::dbgs() << "Did not find Function"; - } - writeMapToFile(result); - return 0; -} - diff --git a/tools/module-extractor/mytest.cpp b/tools/module-extractor/mytest.cpp deleted file mode 100644 index 77f81bedc2..0000000000 --- a/tools/module-extractor/mytest.cpp +++ /dev/null @@ -1,188 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -namespace bpo = boost::program_options; -namespace bfs = boost::filesystem; -using namespace llvm; -using namespace std; -using namespace psr; - -class ControlDependence { -public: - ControlDependence(llvm::Instruction *control, llvm::Instruction *dependee): control(control),dependee(dependee){}; - llvm::Instruction *getControl() const { - return control; - } - llvm::Instruction *getDependee() const { - return dependee; - } -private: - llvm::Instruction *control; - llvm::Instruction *dependee; -}; -// We want to produce a json file: -//[Function] -// Function { -// name: -// cd: [ -// {control: Instruction -// dependee: Instruction} -// ] -// Instruction Representation? -// -// dd: [ -// {def: Instruction -// use: Instruction -// } -// ] -// -// } - -void writeMapToFile(map,vector>> &dependencies) { - auto ec = error_code(); - llvm::raw_fd_ostream outFile(llvm::StringRef("results.json"), ec); - outFile << "["; - for (auto p = dependencies.begin();;){ - outFile << "{\n \"name\": :\"" << p->first->getName().data() << "\",\n" - << "\"cds\": [\n"; - for (auto cd= p->second.first.begin();;){ - outFile << "{ \"control\":\"" - << *((*cd)->getControl()) - << "\",\"dependee\" : \"" - << *((*cd)->getDependee()) - << "\"}"; - cd++; - if (cd == p->second.first.end()){ - break; - } else { - outFile << ",\n"; - } - } - outFile << "],\n\"dds\" : [\n"; - for (auto use = p->second.second.begin();;){ - outFile << "{ \"def\":\""; - (*use)->get()->print(outFile); - outFile << "\", \"use:\"" ; - (*use)->getUser()->print(outFile); - outFile<<"}"; - use++; - if (use == p->second.second.end()){ - break; - } else { - outFile << ",\n"; - } - } - outFile << "]}"; - p++; - if (p == dependencies.end()){ - break; - } else { - outFile << ","; - } - } - outFile << "]\n"; -} - -map*,vector*>> calculateDF(llvm::PostDominatorTree &PDT) { - map*,vector*>> df; - map*>> tieredPDT; - llvm::DomTreeNodeBase* root = PDT.getRootNode(); - llvm::SmallVector*,5> WL; - WL.push_back(root); - - while (!WL.empty()) { - const DomTreeNodeBase *N = WL.pop_back_val(); - tieredPDT[N->getLevel()].push_back(N); - for (auto c : N->getChildren()){ - WL.push_back(c); - } - } - for (size_t i = tieredPDT.size()-1; i > 0; i--){ - for (auto node: tieredPDT[i]){ - for(auto s: successors(node->getBlock())){ - auto y = PDT.getNode(s); - if (y->getIDom() != node){ - df[node].push_back(y); - } - } - for (auto c : node->getChildren()){ - for (auto y : df[c]){ - if (y->getIDom() != c) { - df[node].push_back(y); - } - } - } - } - } - return df; -} - -int main(int argc, const char **argv) { - initializeLogger(true); - ProjectIRDB DB({argv[1]}, IRDBOptions::WPA); - auto result = map,vector>>(); - auto f = DB.getFunction("main"); - if (f){ - auto cds = vector(); - auto dds = vector(); - llvm::PostDominatorTree PDT; - PDT.recalculate(*f); - auto df = calculateDF(PDT); - PDT.print(llvm::dbgs()); - // f->print(llvm::dbgs()); - for (auto &bb : *f) { - llvm::dbgs() << "====================================================\n"; - auto node = PDT.getNode(&bb); - auto sv = llvm::SmallVector(); - llvm::dbgs() << node << "\n"; - llvm::dbgs() << bb << "\n"; - for (auto cd: df[node]) { - dbgs() <<"CD: " << cd << "\n"; - auto control = bb.getTerminator(); - for (auto &i : *(cd->getBlock())){ - cds.push_back(new ControlDependence(control,&i)); - } - } - for (auto &c : node->getChildren()) { - llvm::dbgs() << "\t" <getIDom(); - llvm::dbgs() <<"IDOM: "<< idom << "\n"; - // llvm::dbgs() << PDT.getNode(&bb) << "\n"; - for (auto &i : bb) { - if (i.hasNUsesOrMore(1)) { - for (auto &u: i.uses()){ - dds.push_back(&u); - } - } - } - llvm::dbgs() << "====================================================\n"; - } - result[f] = make_pair(cds,dds); - } else { - llvm::dbgs() << "Did not find Function"; - } - writeMapToFile(result); - return 0; -} - diff --git a/tools/module-extractor/result_comparator.cpp b/tools/module-extractor/result_comparator.cpp new file mode 100644 index 0000000000..96aa616775 --- /dev/null +++ b/tools/module-extractor/result_comparator.cpp @@ -0,0 +1,17 @@ +#include + +#include "slicer.h" + +int main(int argc, const char **argv) { + if (argc != 3) { + std::cout << "Usage:" << std::endl; + std::cout << "result_comparator path_to_ground_truth path_to_extracted_version" + << std::endl; + return -1; + } else { + string original = argv[1]; + string module = argv[2]; + compare_slice(original, module); + return 0; + } +} \ No newline at end of file diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index 8e27ba1599..aa99f4d2d2 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -387,10 +387,10 @@ std::string createSlice(string target, const set &entrypoints, IFDSSolver solver(slicer); solver.solve(); ofstream out; - out.open("out/graph.dot"); +// out.open("out/graph.dot"); // solver.emitESGAsDot(out); out.close(); - out.open("out/results.txt"); +// out.open("out/results.txt"); // solver.dumpResults(out); out.close(); cout << "\n"; @@ -451,28 +451,6 @@ int main(int argc, const char **argv) { std::chrono::steady_clock::now(); createSlice(target, entrypoints, terms); std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); -// compare_slice( -// "/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/memcached-stats/stats.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/command.c"); - compare_slice("/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/" - "memcached-command/command.c", - "/media/Volume/Arbeit/Arbeit/code/phasar/out/command.c"); -// compare_slice( -// "/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/the_silver_searcher/src/ignore.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/ignore.c"); -// compare_slice( -// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson/parse.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/parson.c"); -// compare_slice( -// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson/serialize.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/parson.c"); -// compare_slice("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/inotify-tools/libinotifytools/src/stats.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/inotifytools.c"); -// compare_slice("/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/fping/src/stats.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/fping.c"); -// compare_slice( -// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/redis/src/cluster_manager.c", -// "/media/Volume/Arbeit/Arbeit/code/phasar/out/command.c"); std::cout << "Time difference = " << std::chrono::duration_cast(end - begin) @@ -492,10 +470,7 @@ int main(int argc, const char **argv) { << "[m]" << std::endl; return 0; } -// TODO: -// Recursive Control dependency backward - branch conditions -// branch conditions forward -> include block -// Coll Declarations + std::set NormalFlowFunction::computeTargets(SlicerFact source) { set facts; @@ -677,51 +652,6 @@ RetFlowFunction::computeTargets(SlicerFact source) { return facts; } -void compare_slice(string original, string module) { - set original_lines; - set module_lines; - vector intersection; - vector missing; - vector additional; - { - std::ifstream in(original); - std::string line; - int line_nr = 1; - while (std::getline(in, line)) { - original_lines.insert(line); - } - } - { - std::ifstream in(module); - std::string line; - while (std::getline(in, line)) { - module_lines.insert(line); - } - } - set_intersection(original_lines.begin(), original_lines.end(), - module_lines.begin(), module_lines.end(), - std::inserter(intersection, intersection.begin())); - set_difference(original_lines.begin(), original_lines.end(), - module_lines.begin(), module_lines.end(), - std::inserter(missing, missing.begin())); - set_difference(module_lines.begin(), module_lines.end(), - original_lines.begin(), original_lines.end(), - - std::inserter(additional, additional.begin())); - - for (auto m : missing) { - cout << m << "\n"; - } - cout << "====================================\n"; - for (auto a : additional) { - cout << a << "\n"; - } - cout << "Original Size is:\t" << original_lines.size() << endl; - cout << "Intersection Size is:\t" << intersection.size() << endl; - cout << "Additional Size is:\t" << additional.size() << endl; - cout << "Missing Size is:\t" << missing.size() << endl; - cout << "\n\n\n"; -} class RewriteSourceVisitor : public clang::RecursiveASTVisitor { public: diff --git a/tools/module-extractor/slicer.h b/tools/module-extractor/slicer.h index 0f3a965b70..8fcc92fe6d 100644 --- a/tools/module-extractor/slicer.h +++ b/tools/module-extractor/slicer.h @@ -258,7 +258,53 @@ class CallToRetFlowFunction : public FlowFunction { [[maybe_unused]] set callees; }; -void compare_slice(string original, string module); +void compare_slice(string original, string module) + { + set original_lines; + set module_lines; + vector intersection; + vector missing; + vector additional; + { + std::ifstream in(original); + std::string line; + int line_nr = 1; + while (std::getline(in, line)) { + original_lines.insert(line); + } + } + { + std::ifstream in(module); + std::string line; + while (std::getline(in, line)) { + module_lines.insert(line); + } + } + set_intersection(original_lines.begin(), original_lines.end(), + module_lines.begin(), module_lines.end(), + std::inserter(intersection, intersection.begin())); + set_difference(original_lines.begin(), original_lines.end(), + module_lines.begin(), module_lines.end(), + std::inserter(missing, missing.begin())); + set_difference(module_lines.begin(), module_lines.end(), + original_lines.begin(), original_lines.end(), + + std::inserter(additional, additional.begin())); + + for (auto m : missing) { + cout << m << "\n"; + } + cout << "====================================\n"; + for (auto a : additional) { + cout << a << "\n"; + } + cout << "Original Size is:\t" << original_lines.size() << endl; + cout << "Intersection Size is:\t" << intersection.size() << endl; + cout << "Additional Size is:\t" << additional.size() << endl; + cout << "Missing Size is:\t" << missing.size() << endl; + cout << "\n\n\n"; + +} shared_ptr> add_block(std::string file, std::set *target_lines); #endif // PHASAR_SLICER_H From ac2db1ca4ab3437b3442057563dc5c995eef398c Mon Sep 17 00:00:00 2001 From: Patrick Date: Fri, 27 Aug 2021 04:01:35 +0200 Subject: [PATCH 17/42] Add outpath for modules --- tools/module-extractor/slicer.cpp | 54 ++++++++----------------------- 1 file changed, 14 insertions(+), 40 deletions(-) diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index aa99f4d2d2..6c5c64df01 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -99,7 +99,7 @@ class IFDSSlicer : public IFDSTabulationProblem> { const std::set &entrypoints; }; -void copy_files(map> &file_lines) { +void copy_files(map> &file_lines, string outPath) { for (const auto &file : file_lines) { std::ifstream in(file.first); std::ofstream out( @@ -117,7 +117,7 @@ void copy_files(map> &file_lines) { out.close(); } if (true) { - std::ofstream out("out/command.c"); + std::ofstream out("out/" + outPath + ".c"); for (const auto &file : file_lines) { std::ifstream in("out/" + file.first.substr(file.first.find_last_of("/"), string::npos)); @@ -130,7 +130,7 @@ void copy_files(map> &file_lines) { } last_empty = true; } else { - out << line; + out << line << endl; last_empty = false; } } @@ -141,7 +141,7 @@ void copy_files(map> &file_lines) { template void process_results(ProjectIRDB &DB, IFDSSolver &solver, - LLVMBasedBackwardsICFG &cg) { + LLVMBasedBackwardsICFG &cg, string outPath) { map> slice_instruction; llvm::dbgs() << "SOLVING DONE\n"; for (auto *const module : DB.getAllModules()) { @@ -305,11 +305,11 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, file_lines[file].insert(line); } } - copy_files(file_lines); + copy_files(file_lines, outPath); } std::string createSlice(string target, const set &entrypoints, - const vector &terms) { + const vector &terms,string outPath) { ProjectIRDB DB({std::move(target)}, IRDBOptions::WPA); initializeLogger(false); // initializeLogger(true); @@ -394,7 +394,7 @@ std::string createSlice(string target, const set &entrypoints, // solver.dumpResults(out); out.close(); cout << "\n"; - process_results(DB, solver, cg); + process_results(DB, solver, cg, outPath); return ""; } @@ -412,44 +412,26 @@ int main(int argc, const char **argv) { } } } - if (argc < 3) { + if (argc < 5) { cout << "Please provide the correct params" << endl; // TODO USAGE return -1; } - std::cout << "Current path is " << bofs::current_path() << '\n'; +// std::cout << "Current path is " << bofs::current_path() << '\n'; const auto target = argv[1]; - // const auto target = "./targets/w_defects.ll"; - // const auto target = "./targets/main_linked.ll"; - // const auto target = "./targets/ex.ll"; - // const auto target = - // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/memcached/memcached.ll"; - // const auto target = "./targets/toSlice.ll"; - // const auto target = "./targets/min_ex_ssa.ll"; - // const auto target = "./targets/parson_linked.ll"; - // const auto target = - // "/media/Volume/Arbeit/Arbeit/code/slicing-eval/git/git-linked.ll"; - // const auto entryfunction = "main"; - // const auto entryfunction = "parse_command"; - // initializeLogger(true); - // std::ifstream in("targets/locations_json.json"); - // std::ifstream in("targets/locations_memcached_command.json"); - // std::ifstream in("targets/locations_memcached_single.json"); - // std::ifstream in("targets/toSlice.json"); - // std::ifstream in("targets/min_ex.json"); - // std::ifstream in("targets/parson_serialize.json"); std::ifstream in(argv[2]); json j; in >> j; auto terms = j.get>(); + string outPath = argv[3]; set entrypoints; - for (int i = 3; i < argc; ++i) { + for (int i = 4; i < argc; ++i) { entrypoints.insert(argv[i]); cout << argv[i] << endl; } std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); - createSlice(target, entrypoints, terms); + createSlice(target, entrypoints, terms,outPath); std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); std::cout << "Time difference = " << std::chrono::duration_cast(end - @@ -468,6 +450,7 @@ int main(int argc, const char **argv) { << "Time difference = " << std::chrono::duration_cast(end - begin).count() << "[m]" << std::endl; + std::cout << "Extracted code is in out/" + outPath + ".c" << std::endl; return 0; } @@ -743,16 +726,7 @@ shared_ptr> add_block(std::string file, std::set *target_lines) { string err = "ERROR_MY"; auto db = clang::tooling::CompilationDatabase::autoDetectFromDirectory( -// "/home/torun/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/parson",err -// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/the_silver_searcher",err -// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/inotify-tools",err -// ); -// auto db = clang::tooling::CompilationDatabase::autoDetectFromDirectory( -// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/smaller/fping",err -// ); - "/media/Volume/Arbeit/Arbeit/code/slicing-eval/memcached-command", err); -// auto db = clang::tooling::CompilationDatabase::autoDetectFromDirectory( -// "/media/Volume/Arbeit/Arbeit/code/slicing-eval/redis", err); + boost::filesystem::path(file).parent_path().string(), err); std::vector Sources; Sources.push_back(file); clang::tooling::ClangTool Tool(*db, Sources); From 4f79c9c0f70066e3cfc0f8ff151909df9cfe221c Mon Sep 17 00:00:00 2001 From: jr Date: Fri, 29 Oct 2021 15:58:10 +0200 Subject: [PATCH 18/42] Update build for Ubuntu 21.10 --- external/WALi-OpenNWA | 2 +- unittests/Slicer/Parson_test.cpp | 4 ++-- utils/install-llvm.sh | 6 +++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/external/WALi-OpenNWA b/external/WALi-OpenNWA index 80c6288404..2bb4aca02c 160000 --- a/external/WALi-OpenNWA +++ b/external/WALi-OpenNWA @@ -1 +1 @@ -Subproject commit 80c628840444b8ce2dccc155d18d32439791c49a +Subproject commit 2bb4aca02c5a5d444fd038e8aa3eecd7d1ccbb99 diff --git a/unittests/Slicer/Parson_test.cpp b/unittests/Slicer/Parson_test.cpp index 9bf941360c..3996a190d7 100644 --- a/unittests/Slicer/Parson_test.cpp +++ b/unittests/Slicer/Parson_test.cpp @@ -1,9 +1,9 @@ #include "gtest/gtest.h" -TEST( parson_parse ){ +TEST( parson_parse, parson_parse_001 ){ } int main(int Argc, char **Argv) { ::testing::InitGoogleTest(&Argc, Argv); return RUN_ALL_TESTS(); -} \ No newline at end of file +} diff --git a/utils/install-llvm.sh b/utils/install-llvm.sh index 9d6af1d60f..088d9a5f41 100755 --- a/utils/install-llvm.sh +++ b/utils/install-llvm.sh @@ -46,9 +46,13 @@ fi echo "Building LLVM..." cd ${build_dir}/llvm-project/ git checkout ${llvm_release} +# https://github.com/llvm/llvm-project/commit/68d5235cb58f988c71b403334cd9482d663841ab Fixes build for new linux kernels +git cherry-pick -n 68d5235cb58f988c71b403334cd9482d663841ab +# https://reviews.llvm.org/D89450 Fixes build with gcc 11 +git cherry-pick -n b498303066a63a203d24f739b2d2e0e56dca70d1 mkdir -p build cd build -cmake -G "Ninja" -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra;libcxx;libcxxabi;libunwind;lld;compiler-rt;debuginfo-tests' -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_CXX1Y=ON -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DBUILD_SHARED_LIBS=ON -DLLVM_BUILD_EXAMPLES=Off -DLLVM_INCLUDE_EXAMPLES=Off -DLLVM_BUILD_TESTS=Off -DLLVM_INCLUDE_TESTS=Off -DPYTHON_EXECUTABLE=`which python3` ../llvm +cmake -G "Ninja" -DLLVM_ENABLE_PROJECTS='clang;clang-tools-extra;libcxx;libcxxabi;libunwind;lld;compiler-rt;debuginfo-tests' -DCMAKE_BUILD_TYPE=Release -DLLVM_PARALLEL_LINK_JOBS=1 -DLLVM_ENABLE_CXX1Y=ON -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DBUILD_SHARED_LIBS=ON -DLLVM_BUILD_EXAMPLES=Off -DLLVM_INCLUDE_EXAMPLES=Off -DLLVM_BUILD_TESTS=Off -DLLVM_INCLUDE_TESTS=Off -DPYTHON_EXECUTABLE=`which python3` ../llvm cmake --build . -j${num_cores} echo "Installing LLVM to ${dest_dir}" From d6dda79999fb8725e9e9569760013468d49b77af Mon Sep 17 00:00:00 2001 From: jr Date: Fri, 29 Oct 2021 17:05:23 +0200 Subject: [PATCH 19/42] Update llvm to llvm-10.0.1 --- bootstrap.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bootstrap.sh b/bootstrap.sh index 55cdf468d6..cd7975c33e 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -6,7 +6,7 @@ readonly PHASAR_INSTALL_DIR="/usr/local/phasar" readonly LLVM_INSTALL_DIR="/usr/local/llvm-10" NUM_THREADS=$(nproc) -LLVM_RELEASE=llvmorg-10.0.0 +LLVM_RELEASE=llvmorg-10.0.1 DO_UNIT_TEST=false From 6f844462eca8a0548f2aa29953325b990de0eb06 Mon Sep 17 00:00:00 2001 From: jr Date: Thu, 4 Nov 2021 09:35:57 +0100 Subject: [PATCH 20/42] add tests --- .gitignore | 6 +++++- targets/mini/Makefile | 26 ++++++++++++++++++++++++++ targets/mini/mini.c | 13 +++++++++++++ targets/mini/mini.json | 13 +++++++++++++ targets/mini/test | Bin 0 -> 16488 bytes targets/parson | 1 + 6 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 targets/mini/Makefile create mode 100644 targets/mini/mini.c create mode 100644 targets/mini/mini.json create mode 100755 targets/mini/test create mode 160000 targets/parson diff --git a/.gitignore b/.gitignore index 0212c64a9c..2d05a2e2e6 100644 --- a/.gitignore +++ b/.gitignore @@ -129,6 +129,7 @@ CMakeCache.txt !cmake/*.cmake *.pc Makefile +!targets/*/Makefile !test/*/Makefile # Unit test output @@ -143,4 +144,7 @@ unittests/Utils/PAMMTest cmake-build*/* -out \ No newline at end of file +out +targets/parson/test +targets/parson/testcpp +targets/mini/test diff --git a/targets/mini/Makefile b/targets/mini/Makefile new file mode 100644 index 0000000000..10a110a5ef --- /dev/null +++ b/targets/mini/Makefile @@ -0,0 +1,26 @@ +CC = clang +CFLAGS = -O0 -g -Wall -Wextra -std=c99 -pedantic-errors -isystem /usr/local/llvm-10/lib/clang/10.0.1/include/ + +all: test + +.PHONY: test +test: mini.c + $(CC) $(CFLAGS) -o $@ mini.c + +clean: + rm -f mini *.o *.ll + + +BITCODE_C = /usr/local/llvm-10/bin/clang -emit-llvm -S -g -DHAVE_CONFIG_H +llvm_link = /usr/local/llvm-10/bin/llvm-link + + +BITCODES=mini.ll + +%.ll: %.c + $(BITCODE_C) $(DEFAULT_INCLUDES) $< -o $@ + +bitcode: $(BITCODES) + $(llvm_link) $(BITCODES) -o mini_linked.ll -S + sed 's/\ optnone\>//g' mini_linked.ll > mini_opt.ll + opt -mem2reg -S -o opt.ll mini_opt.ll diff --git a/targets/mini/mini.c b/targets/mini/mini.c new file mode 100644 index 0000000000..23365068cd --- /dev/null +++ b/targets/mini/mini.c @@ -0,0 +1,13 @@ +#include + + + +int calc(int p) { + p++; + return p; +} + +int main(void) { + calc(3); + return 0; +} diff --git a/targets/mini/mini.json b/targets/mini/mini.json new file mode 100644 index 0000000000..24cbc9a89b --- /dev/null +++ b/targets/mini/mini.json @@ -0,0 +1,13 @@ +[ + { + "term": "calc", + "file": "mini.c", + "locations": [ + { + "line": 5, + "column": 5, + "meta": {} + } + ] + } +] \ No newline at end of file diff --git a/targets/mini/test b/targets/mini/test new file mode 100755 index 0000000000000000000000000000000000000000..97a403ef801a6f80a07304b002e100ed26b941d1 GIT binary patch literal 16488 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 literal 0 HcmV?d00001 diff --git a/targets/parson b/targets/parson new file mode 160000 index 0000000000..41038d18c9 --- /dev/null +++ b/targets/parson @@ -0,0 +1 @@ +Subproject commit 41038d18c98959831ab07a0839e02b2bfbc3b467 From cb7cb6a779e8dd76f5da2975bab6801d536aa50f Mon Sep 17 00:00:00 2001 From: jr Date: Fri, 5 Nov 2021 10:48:14 +0100 Subject: [PATCH 21/42] Extract clang parts to separate file --- tools/module-extractor/CMakeLists.txt | 5 +- tools/module-extractor/back_mapper.cpp | 166 +++++++++++++++++++++++++ tools/module-extractor/back_mapper.h | 11 ++ tools/module-extractor/slicer.cpp | 128 +++---------------- tools/module-extractor/slicer.h | 7 +- 5 files changed, 198 insertions(+), 119 deletions(-) create mode 100644 tools/module-extractor/back_mapper.cpp create mode 100644 tools/module-extractor/back_mapper.h diff --git a/tools/module-extractor/CMakeLists.txt b/tools/module-extractor/CMakeLists.txt index fc9f2fd57c..584f64a467 100644 --- a/tools/module-extractor/CMakeLists.txt +++ b/tools/module-extractor/CMakeLists.txt @@ -2,11 +2,14 @@ if (PHASAR_IN_TREE) add_phasar_executable(slicer tools/module-extractor/slicer.cpp + tools/module-extractor/back_mapper.cpp + tools/module-extractor/back_mapper.h ) else () add_executable(slicer ../module-extractor/slicer.cpp - ) + ../module-extractor/back_mapper.cpp + ../module-extractor/back_mapper.h) endif () if (PHASAR_IN_TREE) diff --git a/tools/module-extractor/back_mapper.cpp b/tools/module-extractor/back_mapper.cpp new file mode 100644 index 0000000000..2d3b29e666 --- /dev/null +++ b/tools/module-extractor/back_mapper.cpp @@ -0,0 +1,166 @@ +#include "back_mapper.h" + +#include +#include +#include +#include +#include +#include +#include + +/** + * Notes JR: + * General Idea: Walk over the AST and store the source locations of interesting + * constructs Hereby some special handling is needed, for example for compound + * statements Another problem is that the clang AST is not consistent in the + * handling of semicolons At the same time, extract the debug lines (and maybe + * later columns for finer slicing) from the the LLVM IR Merge the extracted + * source locations, e.g. nodes that are completely embedded in others Match the + * source locations from the IR with the ones from the AST -> Extract if match. + * For extracting we can use precise column + line information from the AST. + * + * Questions: + * What needs special handling? Semicolons, Compound Statements, what else? + * Data structure for storing and merging the source code ranges? (Overlapping + * intervals problem) + */ + +namespace { +class RewriteSourceVisitor + : public clang::RecursiveASTVisitor { +public: + RewriteSourceVisitor( + clang::ASTContext &context, std::set *target_lines, + const std::shared_ptr> &resultingLines) + : context(context), target_lines(target_lines), + resulting_lines(resultingLines), candidate_lines(), + sm(context.getSourceManager()) {} + + [[maybe_unused]] bool VisitStmt(clang::Stmt *S) { + auto es = + context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); + auto es4 = + context.getSourceManager().getExpansionLineNumber(S->getEndLoc()); + if (es == es4 && target_lines->find(es) != target_lines->end()) { + for (auto &l : candidate_lines) { + resulting_lines->insert(l); + } + } + return true; + } + + [[maybe_unused]] bool VisitFunctionDecl(clang::FunctionDecl *D) { + if (context.getSourceManager().isInMainFile(D->getLocation())) { + // D->dumpColor(); + } + return true; + } + + [[maybe_unused]] bool VisitCompoundStmt(clang::CompoundStmt *C) { + if (context.getSourceManager().isInMainFile(C->getBeginLoc())) { + C->dumpColor(); + C->getLBracLoc().dump(context.getSourceManager()); + C->getRBracLoc().dump(context.getSourceManager()); + } + + return true; + } + + [[maybe_unused]] bool VisitReturnStmt(clang::ReturnStmt *R) { + if (sm.isInMainFile(R->getBeginLoc())) { + R->getBeginLoc().dump(sm); + R->getEndLoc().dump(sm); + clang::Lexer::getLocForEndOfToken(R->getEndLoc(), 0, sm, + context.getLangOpts()) + .dump(sm); + } + return true; + } + + [[maybe_unused]] bool VisitDefaultStmt(clang::DefaultStmt *S) { + auto line = + context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); + candidate_lines.insert(line); + return true; + } + + [[maybe_unused]] bool VisitCaseStmt(clang::CaseStmt *S) { + auto line = + context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); + candidate_lines.insert(line); + return true; + } + + [[maybe_unused]] bool VisitBreakStmt(clang::BreakStmt *S) { + candidate_lines.clear(); + return true; + } + +private: + clang::ASTContext &context; + std::set *target_lines; + std::shared_ptr> resulting_lines; + std::set candidate_lines; + clang::SourceManager &sm; +}; + +class RewriteSourceConsumer : public clang::ASTConsumer { +public: + RewriteSourceConsumer( + std::set *target_lines, + const std::shared_ptr> &resultingLines) + : target_lines(target_lines), resulting_lines(resultingLines) {} + virtual void HandleTranslationUnit(clang::ASTContext &Context) { + // Traversing the translation unit decl via a RecursiveASTVisitor + // will visit all nodes in the AST. + // llvm::dbgs << Context.getTranslationUnitDecl(); + RewriteSourceVisitor Visitor(Context, target_lines, resulting_lines); + Visitor.TraverseDecl(Context.getTranslationUnitDecl()); + } + +private: + // A RecursiveASTVisitor implementation. + + std::set *target_lines; + std::shared_ptr> resulting_lines; +}; +class RewriteSourceAction +// : public clang::ASTFrontendAction +{ + +public: + RewriteSourceAction( + std::set *target_lines, + const std::shared_ptr> &resultingLines) + : target_lines(target_lines), resulting_lines(resultingLines) {} + + std::unique_ptr newASTConsumer() { + return std::unique_ptr( + new RewriteSourceConsumer(target_lines, resulting_lines)); + } + +private: + std::set *target_lines; + std::shared_ptr> resulting_lines; +}; + +} // namespace + +std::shared_ptr> +add_block(std::string file, std::set *target_lines) { + std::string err; + auto db = clang::tooling::CompilationDatabase::autoDetectFromDirectory( + boost::filesystem::path(file).parent_path().string(), err); + if (!db) { + llvm::errs() << err; + } + + std::vector Sources; + Sources.push_back(file); + clang::tooling::ClangTool Tool(*db, Sources); + auto res = std::make_shared>(); + Tool.run(clang::tooling::newFrontendActionFactory( + new RewriteSourceAction(target_lines, res)) + .get()); + return res; +} diff --git a/tools/module-extractor/back_mapper.h b/tools/module-extractor/back_mapper.h new file mode 100644 index 0000000000..76402bb601 --- /dev/null +++ b/tools/module-extractor/back_mapper.h @@ -0,0 +1,11 @@ +#ifndef PHASAR_BACK_MAPPER_H +#define PHASAR_BACK_MAPPER_H + +#include +#include +#include + +std::shared_ptr> +add_block(std::string file, std::set *target_lines); + +#endif // PHASAR_BACK_MAPPER_H diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index 6c5c64df01..326ae06d72 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -1,7 +1,10 @@ #include "slicer.h" +#include "back_mapper.h" + #include #include + struct SliceComparator { template bool operator()(const tuple &l, @@ -147,7 +150,7 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, for (auto *const module : DB.getAllModules()) { for (auto &function : module->functions()) { auto fun_name = function.getName(); - llvm::dbgs() << "\n\n\n" << fun_name << "\n\n\n"; + // llvm::dbgs() << "\n\n\n" << fun_name << "\n\n\n"; bool isUsed = false; for (auto &bb : function) { for (const auto &i : bb) { @@ -231,11 +234,11 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, } } } - cout << "\n"; - llvm::dbgs() << "\n" - << "\n" - << "\n" - << "\n"; + // cout << "\n"; + // llvm::dbgs() << "\n" + // << "\n" + // << "\n" + // << "\n"; map> file_lines; for (auto &p : slice_instruction) { llvm::dbgs() << "F:\t" << p.first->getName() << "\t" << p.second.size() @@ -247,6 +250,7 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, for (const auto &s : p.second) { if (first) { auto line = psr::getLineFromIR(p.first); + // llvm::dbgs() << "TEst jr\n"; llvm::dbgs() << psr::getSrcCodeFromIR(p.first) << "\t" << line << "\n"; auto end_line = psr::getFunctionHeaderLines(p.first); for (unsigned int l = line; l <= end_line; ++l) { @@ -269,7 +273,7 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, auto line = psr::getLineFromIR(s); auto src = psr::getSrcCodeFromIR(s); - llvm::dbgs() << *s << "\t" << src << "\t" << line << "\n"; + // llvm::dbgs() << *s << "\t" << src << "\t" << line << "\n"; file_lines[file].insert(line); if (auto *inst = dyn_cast(s)) { for (unsigned int i = 0; i < inst->getNumOperands(); ++i) { @@ -386,13 +390,13 @@ std::string createSlice(string target, const set &entrypoints, entrypoints); IFDSSolver solver(slicer); solver.solve(); - ofstream out; -// out.open("out/graph.dot"); + // ofstream out; + // out.open("out/graph.dot"); // solver.emitESGAsDot(out); - out.close(); -// out.open("out/results.txt"); + // out.close(); + // out.open("out/results.txt"); // solver.dumpResults(out); - out.close(); + // out.close(); cout << "\n"; process_results(DB, solver, cg, outPath); return ""; @@ -635,104 +639,4 @@ RetFlowFunction::computeTargets(SlicerFact source) { return facts; } -class RewriteSourceVisitor - : public clang::RecursiveASTVisitor { -public: - RewriteSourceVisitor(clang::ASTContext &context, - std::set *target_lines, - const shared_ptr> &resultingLines) - : context(context), target_lines(target_lines), - resulting_lines(resultingLines), candidate_lines() {} - - [[maybe_unused]] virtual bool VisitStmt(clang::Stmt *S) { - auto es = - context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); - auto es4 = - context.getSourceManager().getExpansionLineNumber(S->getEndLoc()); - if (es == es4 && target_lines->find(es) != target_lines->end()) { - for (auto &l : candidate_lines) { - resulting_lines->insert(l); - } - } - return true; - } - - [[maybe_unused]] virtual bool VisitDefaultStmt(clang::DefaultStmt *S) { - auto line = - context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); - candidate_lines.insert(line); - return true; - } - - bool VisitCaseStmt(clang::CaseStmt *S) { - auto line = - context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); - candidate_lines.insert(line); - return true; - } - - virtual bool VisitBreakStmt(clang::BreakStmt *S) { - candidate_lines.clear(); - return true; - } - -private: - clang::ASTContext &context; - std::set *target_lines; - shared_ptr> resulting_lines; - std::set candidate_lines; -}; - -class RewriteSourceConsumer : public clang::ASTConsumer { -public: - RewriteSourceConsumer( - std::set *target_lines, - const shared_ptr> &resultingLines) - : target_lines(target_lines), resulting_lines(resultingLines) {} - virtual void HandleTranslationUnit(clang::ASTContext &Context) { - // Traversing the translation unit decl via a RecursiveASTVisitor - // will visit all nodes in the AST. - // llvm::dbgs << Context.getTranslationUnitDecl(); - RewriteSourceVisitor Visitor(Context, target_lines, resulting_lines); - Visitor.TraverseDecl(Context.getTranslationUnitDecl()); - } - -private: - // A RecursiveASTVisitor implementation. - - std::set *target_lines; - shared_ptr> resulting_lines; -}; -class RewriteSourceAction -// : public clang::ASTFrontendAction -{ - -public: - RewriteSourceAction(std::set *target_lines, - const shared_ptr> &resultingLines) - : target_lines(target_lines), resulting_lines(resultingLines) {} - - std::unique_ptr newASTConsumer() { - return std::unique_ptr( - new RewriteSourceConsumer(target_lines, resulting_lines)); - } - -private: - std::set *target_lines; - shared_ptr> resulting_lines; -}; -shared_ptr> -add_block(std::string file, std::set *target_lines) { - string err = "ERROR_MY"; - auto db = clang::tooling::CompilationDatabase::autoDetectFromDirectory( - boost::filesystem::path(file).parent_path().string(), err); - std::vector Sources; - Sources.push_back(file); - clang::tooling::ClangTool Tool(*db, Sources); - auto res = make_shared>(); - Tool.run(clang::tooling::newFrontendActionFactory( - new RewriteSourceAction(target_lines, res)) - .get()); - return res; -} diff --git a/tools/module-extractor/slicer.h b/tools/module-extractor/slicer.h index 8fcc92fe6d..1add9c7b2e 100644 --- a/tools/module-extractor/slicer.h +++ b/tools/module-extractor/slicer.h @@ -4,10 +4,7 @@ #include #include -#include -#include -#include -#include + #include #include @@ -305,6 +302,4 @@ void compare_slice(string original, string module) cout << "\n\n\n"; } - -shared_ptr> add_block(std::string file, std::set *target_lines); #endif // PHASAR_SLICER_H From d3dac853f650c9d89d64d5f98ef5c5bcb9ed5111 Mon Sep 17 00:00:00 2001 From: jr Date: Tue, 16 Nov 2021 10:10:22 +0100 Subject: [PATCH 22/42] Add printer based slicing --- CMakeLists.txt | 4 +- targets/mini/mini.c | 11 +- targets/mini/test | Bin 16488 -> 16488 bytes tools/module-extractor/CMakeLists.txt | 19 +- .../module-extractor/SelectiveDeclPrinter.cpp | 1842 +++++++++++ tools/module-extractor/SelectiveDeclPrinter.h | 24 + .../module-extractor/SelectiveStmtPrinter.cpp | 2814 +++++++++++++++++ tools/module-extractor/SelectiveStmtPrinter.h | 20 + tools/module-extractor/back_mapper.cpp | 211 +- tools/module-extractor/back_mapper.h | 9 +- tools/module-extractor/printer.cpp | 30 + tools/module-extractor/printer.h | 65 + tools/module-extractor/slicer.cpp | 46 +- tools/module-extractor/source_utils.h | 86 + 14 files changed, 5074 insertions(+), 107 deletions(-) create mode 100644 tools/module-extractor/SelectiveDeclPrinter.cpp create mode 100644 tools/module-extractor/SelectiveDeclPrinter.h create mode 100644 tools/module-extractor/SelectiveStmtPrinter.cpp create mode 100644 tools/module-extractor/SelectiveStmtPrinter.h create mode 100644 tools/module-extractor/printer.cpp create mode 100644 tools/module-extractor/printer.h create mode 100644 tools/module-extractor/source_utils.h diff --git a/CMakeLists.txt b/CMakeLists.txt index dbcb9f2d33..e9589b7e28 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,6 +14,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS YES) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_VERBOSE_MAKEFILE ON CACHE BOOL "ON") set_property(GLOBAL PROPERTY TARGET_MESSAGES OFF) @@ -179,7 +180,8 @@ if(PHASAR_IN_TREE OR NEED_LIBCLANG_COMPONENT_LIBS) clangASTMatchers clangLex clangBasic - LLVMFrontendOpenMP) + LLVMFrontendOpenMP + ) endif() if (NOT PHASAR_IN_TREE) # Only search for clang if we build out of tree diff --git a/targets/mini/mini.c b/targets/mini/mini.c index 23365068cd..f8b35d58d5 100644 --- a/targets/mini/mini.c +++ b/targets/mini/mini.c @@ -1,10 +1,13 @@ -#include -int calc(int p) { - p++; - return p; + +int calc(int pp) // { +{ + pp++; + return (pp + 1) /**/; + + } int main(void) { diff --git a/targets/mini/test b/targets/mini/test index 97a403ef801a6f80a07304b002e100ed26b941d1..7a360945786b86e3124a7ed0811e04c989045d3e 100755 GIT binary patch delta 134 zcmaFS!1$tpaf7lTZ}S1h*u(ttEes&A*+9^TpHBkBbmS9gV{+zY3*OwN5HG+eG5M8& z5hL$pS;GuQpUG{8M#AE(tX!q6+!I;(*=$&uZCDxD7EeB5xN35tk@V&XMjT9x5}Rk5 etmk43nA~V2JUPZ*h4ZQ*$Y2JBMPQLR_GbX;tRnXS delta 131 zcmaFS!1$tpaf7lTZ|vbTJ%0HX1`wFA*+9^TpHCFTcH|RiV{+zY3)tMH5HG+eI{B4> z5hK@RS;GuQ&&h3uMgn52EL^3mToYND*=$%D*iKJAZMbUkMkcw<6O1^R7)3YFG+EEZ c=sUU5NO*FLy$a_gLy)Nq3=6>`bL`Im0F#FzrT_o{ diff --git a/tools/module-extractor/CMakeLists.txt b/tools/module-extractor/CMakeLists.txt index 584f64a467..acb6d21078 100644 --- a/tools/module-extractor/CMakeLists.txt +++ b/tools/module-extractor/CMakeLists.txt @@ -4,12 +4,28 @@ if (PHASAR_IN_TREE) tools/module-extractor/slicer.cpp tools/module-extractor/back_mapper.cpp tools/module-extractor/back_mapper.h + tools/module-extractor/printer.cpp + tools/module-extractor/printer.h + tools/module-extractor/source_utils.h + tools/module-extractor/SelectiveDeclPrinter.cpp + tools/module-extractor/SelectiveDeclPrinter.h + tools/module-extractor/SelectiveStmtPrinter.cpp + tools/module-extractor/SelectiveStmtPrinter.h ) else () add_executable(slicer ../module-extractor/slicer.cpp ../module-extractor/back_mapper.cpp - ../module-extractor/back_mapper.h) + ../module-extractor/back_mapper.h + # ../module-extractor/StmtPrinter.cpp + ../module-extractor/source_utils.h + ../module-extractor/printer.cpp + ../module-extractor/printer.h + ../module-extractor/SelectiveDeclPrinter.cpp + ../module-extractor/SelectiveDeclPrinter.h + ../module-extractor/SelectiveStmtPrinter.cpp + ../module-extractor/SelectiveStmtPrinter.h + ) endif () if (PHASAR_IN_TREE) @@ -46,6 +62,7 @@ target_link_libraries(slicer ${CMAKE_DL_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${CLANG_LIBRARY} + LLVMFrontendOpenMP ) diff --git a/tools/module-extractor/SelectiveDeclPrinter.cpp b/tools/module-extractor/SelectiveDeclPrinter.cpp new file mode 100644 index 0000000000..e123548a4a --- /dev/null +++ b/tools/module-extractor/SelectiveDeclPrinter.cpp @@ -0,0 +1,1842 @@ +//===--- DeclPrinter.cpp - Printing implementation for Decl ASTs ----------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file implements the Decl::print method, which pretty prints the +// AST back out to C/Objective-C/C++/Objective-C++ code. +// +//===----------------------------------------------------------------------===// + +/** + * This file is ripped from llvm 10.0.1 and modified for selective printing + */ + +#include "SelectiveDeclPrinter.h" +#include "SelectiveStmtPrinter.h" +#include "source_utils.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +using namespace clang; + +namespace { +class DeclPrinterFiltering : public DeclVisitor { + const std::set &lines; + raw_ostream &Out; + PrintingPolicy Policy; + const ASTContext &Context; + unsigned Indentation; + bool PrintInstantiation; + +public: +#define PTR(CLASS) typename std::add_pointer::type +#define DISPATCH(NAME, CLASS) \ + return static_cast(this)->Visit##NAME( \ + static_cast(D)) + + void Visit(PTR(Decl) D) { + if (!utils::shouldBeSliced(D, Context.getSourceManager(), lines)) { + return; + } + switch (D->getKind()) { +#define DECL(DERIVED, BASE) \ + case Decl::DERIVED: \ + DISPATCH(DERIVED##Decl, DERIVED##Decl); +#define ABSTRACT_DECL(DECL) +#include "clang/AST/DeclNodes.inc" + } + llvm_unreachable("Decl that isn't part of DeclNodes.inc!"); + } + + /* //Patched to support filtering + public: + #define PTR(CLASS) typename std::add_pointer::type + #define DISPATCH(NAME, CLASS) \ + return + static_cast(this)->Visit##NAME(static_cast(D)) + + void Visit(PTR(Decl) D) { + //D->dump(); + const auto& sm = Context.getSourceManager(); + const auto begin = utils::getLocationAsWritten(D->getBeginLoc(), sm); + if(!utils::isInTargetFile(begin, sm)) { + return; + } + D->dump(); + const auto end = utils::getLocationAsWritten(D->getEndLoc(), sm); + if(!utils::isAnyInRangeInWhitelist( + utils::getLineFromSourceLocation(begin), + utils::getLineFromSourceLocation(end), + lines)) { + return; + } + switch (D->getKind()) { + #define DECL(DERIVED, BASE) \ + case Decl::DERIVED: DISPATCH(DERIVED##Decl, DERIVED##Decl); + #define ABSTRACT_DECL(DECL) + #include "clang/AST/DeclNodes.inc" + } + llvm_unreachable("Decl that isn't part of DeclNodes.inc!"); + } + #undef PTR + #undef DISPATCH*/ + +private: + raw_ostream &Indent() { return Indent(Indentation); } + raw_ostream &Indent(unsigned Indentation); + void ProcessDeclGroup(SmallVectorImpl &Decls); + + void Print(AccessSpecifier AS); + void PrintConstructorInitializers(CXXConstructorDecl *CDecl, + std::string &Proto); + + /// Print an Objective-C method type in parentheses. + /// + /// \param Quals The Objective-C declaration qualifiers. + /// \param T The type to print. + void PrintObjCMethodType(ASTContext &Ctx, Decl::ObjCDeclQualifier Quals, + QualType T); + + void PrintObjCTypeParams(ObjCTypeParamList *Params); + +public: + DeclPrinterFiltering(const std::set &lines, raw_ostream &Out, + const PrintingPolicy &Policy, const ASTContext &Context, + unsigned Indentation = 0, + bool PrintInstantiation = false) + : lines(lines), Out(Out), Policy(Policy), Context(Context), + Indentation(Indentation), PrintInstantiation(PrintInstantiation) {} + + void VisitDeclContext(DeclContext *DC, bool Indent = true); + + void VisitTranslationUnitDecl(TranslationUnitDecl *D); + void VisitTypedefDecl(TypedefDecl *D); + void VisitTypeAliasDecl(TypeAliasDecl *D); + void VisitEnumDecl(EnumDecl *D); + void VisitRecordDecl(RecordDecl *D); + void VisitEnumConstantDecl(EnumConstantDecl *D); + void VisitEmptyDecl(EmptyDecl *D); + void VisitFunctionDecl(FunctionDecl *D); + void VisitFriendDecl(FriendDecl *D); + void VisitFieldDecl(FieldDecl *D); + void VisitVarDecl(VarDecl *D); + void VisitLabelDecl(LabelDecl *D); + void VisitParmVarDecl(ParmVarDecl *D); + void VisitFileScopeAsmDecl(FileScopeAsmDecl *D); + void VisitImportDecl(ImportDecl *D); + void VisitStaticAssertDecl(StaticAssertDecl *D); + void VisitNamespaceDecl(NamespaceDecl *D); + void VisitUsingDirectiveDecl(UsingDirectiveDecl *D); + void VisitNamespaceAliasDecl(NamespaceAliasDecl *D); + void VisitCXXRecordDecl(CXXRecordDecl *D); + void VisitLinkageSpecDecl(LinkageSpecDecl *D); + void VisitTemplateDecl(const TemplateDecl *D); + void VisitFunctionTemplateDecl(FunctionTemplateDecl *D); + void VisitClassTemplateDecl(ClassTemplateDecl *D); + void VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D); + void VisitClassTemplatePartialSpecializationDecl( + ClassTemplatePartialSpecializationDecl *D); + void VisitObjCMethodDecl(ObjCMethodDecl *D); + void VisitObjCImplementationDecl(ObjCImplementationDecl *D); + void VisitObjCInterfaceDecl(ObjCInterfaceDecl *D); + void VisitObjCProtocolDecl(ObjCProtocolDecl *D); + void VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D); + void VisitObjCCategoryDecl(ObjCCategoryDecl *D); + void VisitObjCCompatibleAliasDecl(ObjCCompatibleAliasDecl *D); + void VisitObjCPropertyDecl(ObjCPropertyDecl *D); + void VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D); + void VisitUnresolvedUsingTypenameDecl(UnresolvedUsingTypenameDecl *D); + void VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D); + void VisitUsingDecl(UsingDecl *D); + void VisitUsingShadowDecl(UsingShadowDecl *D); + void VisitOMPThreadPrivateDecl(OMPThreadPrivateDecl *D); + void VisitOMPAllocateDecl(OMPAllocateDecl *D); + void VisitOMPRequiresDecl(OMPRequiresDecl *D); + void VisitOMPDeclareReductionDecl(OMPDeclareReductionDecl *D); + void VisitOMPDeclareMapperDecl(OMPDeclareMapperDecl *D); + void VisitOMPCapturedExprDecl(OMPCapturedExprDecl *D); + + void printTemplateParameters(const TemplateParameterList *Params, + bool OmitTemplateKW = false); + void printTemplateArguments(llvm::ArrayRef Args); + void printTemplateArguments(llvm::ArrayRef Args); + void prettyPrintAttributes(Decl *D); + void prettyPrintPragmas(Decl *D); + void printDeclType(QualType T, StringRef DeclName, bool Pack = false); +}; +} // namespace + +namespace selective_printer { +void print(const Decl *decl, const std::set &lines, + raw_ostream &Out, const PrintingPolicy &Policy, unsigned Indentation, + bool PrintInstantiation) { + DeclPrinterFiltering Printer(lines, Out, Policy, decl->getASTContext(), + Indentation, PrintInstantiation); + Printer.Visit(const_cast(decl)); +} + +void print(const Decl *decl, const std::set &lines, + raw_ostream &Out, unsigned Indentation, bool PrintInstantiation) { + print(decl, lines, Out, decl->getASTContext().getPrintingPolicy(), + Indentation, PrintInstantiation); +} + +void printGroup(Decl **Begin, unsigned NumDecls, + const std::set &lines, raw_ostream &Out, + const PrintingPolicy &Policy, unsigned Indentation) { + if (NumDecls == 1) { + print(*Begin, lines, Out, Policy, Indentation); + return; + } + + Decl **End = Begin + NumDecls; + TagDecl *TD = dyn_cast(*Begin); + if (TD) + ++Begin; + + PrintingPolicy SubPolicy(Policy); + + bool isFirst = true; + for (; Begin != End; ++Begin) { + if (isFirst) { + if (TD) + SubPolicy.IncludeTagDefinition = true; + SubPolicy.SuppressSpecifiers = false; + isFirst = false; + } else { + if (!isFirst) + Out << ", "; + SubPolicy.IncludeTagDefinition = false; + SubPolicy.SuppressSpecifiers = true; + } + print(*Begin, lines, Out, SubPolicy, Indentation); + } +} +} // namespace selective_printer + +// TODO JR +// void TemplateParameterList::print(raw_ostream &Out, const ASTContext +// &Context, +// bool OmitTemplateKW) const { +// print(Out, Context, Context.getPrintingPolicy(), OmitTemplateKW); +//} +// +// void TemplateParameterList::print(raw_ostream &Out, const ASTContext +// &Context, +// const PrintingPolicy &Policy, +// bool OmitTemplateKW) const { +// DeclPrinterFiltering Printer(Out, Policy, Context); +// Printer.printTemplateParameters(this, OmitTemplateKW); +//} + +// Renamed to prevent ODR violation +static QualType GetBaseTypeCopy(QualType T) { + // FIXME: This should be on the Type class! + QualType BaseType = T; + while (!BaseType->isSpecifierType()) { + if (const PointerType *PTy = BaseType->getAs()) + BaseType = PTy->getPointeeType(); + else if (const BlockPointerType *BPy = BaseType->getAs()) + BaseType = BPy->getPointeeType(); + else if (const ArrayType *ATy = dyn_cast(BaseType)) + BaseType = ATy->getElementType(); + else if (const FunctionType *FTy = BaseType->getAs()) + BaseType = FTy->getReturnType(); + else if (const VectorType *VTy = BaseType->getAs()) + BaseType = VTy->getElementType(); + else if (const ReferenceType *RTy = BaseType->getAs()) + BaseType = RTy->getPointeeType(); + else if (const AutoType *ATy = BaseType->getAs()) + BaseType = ATy->getDeducedType(); + else if (const ParenType *PTy = BaseType->getAs()) + BaseType = PTy->desugar(); + else + // This must be a syntax error. + break; + } + return BaseType; +} + +// Renamed to prevent ODR violation +static QualType getDeclTypeCopy(Decl *D) { + if (TypedefNameDecl *TDD = dyn_cast(D)) + return TDD->getUnderlyingType(); + if (ValueDecl *VD = dyn_cast(D)) + return VD->getType(); + return QualType(); +} + +// TODO Jr +// LLVM_DUMP_METHOD void DeclContext::dumpDeclContext() const { +// // Get the translation unit +// const DeclContext *DC = this; +// while (!DC->isTranslationUnit()) +// DC = DC->getParent(); +// +// ASTContext &Ctx = cast(DC)->getASTContext(); +// DeclPrinterFiltering Printer(llvm::errs(), Ctx.getPrintingPolicy(), Ctx, 0); +// Printer.VisitDeclContext(const_cast(this), /*Indent=*/false); +//} + +raw_ostream &DeclPrinterFiltering::Indent(unsigned Indentation) { + for (unsigned i = 0; i != Indentation; ++i) + Out << " "; + return Out; +} + +void DeclPrinterFiltering::prettyPrintAttributes(Decl *D) { + if (Policy.PolishForDeclaration) + return; + + if (D->hasAttrs()) { + AttrVec &Attrs = D->getAttrs(); + for (auto *A : Attrs) { + if (A->isInherited() || A->isImplicit()) + continue; + switch (A->getKind()) { +#define ATTR(X) +#define PRAGMA_SPELLING_ATTR(X) case attr::X: +#include + break; + default: + // TODO Jr + A->printPretty(Out, Policy); + break; + } + } + } +} + +void DeclPrinterFiltering::prettyPrintPragmas(Decl *D) { + if (Policy.PolishForDeclaration) + return; + + if (D->hasAttrs()) { + AttrVec &Attrs = D->getAttrs(); + for (auto *A : Attrs) { + switch (A->getKind()) { +#define ATTR(X) +#define PRAGMA_SPELLING_ATTR(X) case attr::X: +#include + // TODO JR + A->printPretty(Out, Policy); + Indent(); + break; + default: + break; + } + } + } +} + +void DeclPrinterFiltering::printDeclType(QualType T, StringRef DeclName, + bool Pack) { + // Normally, a PackExpansionType is written as T[3]... (for instance, as a + // template argument), but if it is the type of a declaration, the ellipsis + // is placed before the name being declared. + if (auto *PET = T->getAs()) { + Pack = true; + T = PET->getPattern(); + } + T.print(Out, Policy, (Pack ? "..." : "") + DeclName, Indentation); +} + +void DeclPrinterFiltering::ProcessDeclGroup(SmallVectorImpl &Decls) { + this->Indent(); + selective_printer::printGroup(Decls.data(), Decls.size(), this->lines, Out, + Policy, Indentation); + Out << ";\n"; + Decls.clear(); +} + +void DeclPrinterFiltering::Print(AccessSpecifier AS) { + switch (AS) { + case AS_none: + llvm_unreachable("No access specifier!"); + case AS_public: + Out << "public"; + break; + case AS_protected: + Out << "protected"; + break; + case AS_private: + Out << "private"; + break; + } +} + +void DeclPrinterFiltering::PrintConstructorInitializers( + CXXConstructorDecl *CDecl, std::string &Proto) { + bool HasInitializerList = false; + for (const auto *BMInitializer : CDecl->inits()) { + if (BMInitializer->isInClassMemberInitializer()) + continue; + + if (!HasInitializerList) { + Proto += " : "; + Out << Proto; + Proto.clear(); + HasInitializerList = true; + } else + Out << ", "; + + if (BMInitializer->isAnyMemberInitializer()) { + FieldDecl *FD = BMInitializer->getAnyMember(); + Out << *FD; + } else { + Out << QualType(BMInitializer->getBaseClass(), 0).getAsString(Policy); + } + + Out << "("; + if (!BMInitializer->getInit()) { + // Nothing to print + } else { + Expr *Init = BMInitializer->getInit(); + if (ExprWithCleanups *Tmp = dyn_cast(Init)) + Init = Tmp->getSubExpr(); + + Init = Init->IgnoreParens(); + + Expr *SimpleInit = nullptr; + Expr **Args = nullptr; + unsigned NumArgs = 0; + if (ParenListExpr *ParenList = dyn_cast(Init)) { + Args = ParenList->getExprs(); + NumArgs = ParenList->getNumExprs(); + } else if (CXXConstructExpr *Construct = + dyn_cast(Init)) { + Args = Construct->getArgs(); + NumArgs = Construct->getNumArgs(); + } else + SimpleInit = Init; + + if (SimpleInit) + selective_printer::printPretty(SimpleInit, lines, Out, nullptr, Policy, + &Context, Indentation); + else { + for (unsigned I = 0; I != NumArgs; ++I) { + assert(Args[I] != nullptr && "Expected non-null Expr"); + if (isa(Args[I])) + break; + + if (I) + Out << ", "; + selective_printer::printPretty(Args[I], lines, Out, nullptr, Policy, + &Context, Indentation); + } + } + } + Out << ")"; + if (BMInitializer->isPackExpansion()) + Out << "..."; + } +} + +//---------------------------------------------------------------------------- +// Common C declarations +//---------------------------------------------------------------------------- + +void DeclPrinterFiltering::VisitDeclContext(DeclContext *DC, bool Indent) { + if (Policy.TerseOutput) + return; + + if (Indent) + Indentation += Policy.Indentation; + + SmallVector Decls; + for (DeclContext::decl_iterator D = DC->decls_begin(), DEnd = DC->decls_end(); + D != DEnd; ++D) { + + // Don't print ObjCIvarDecls, as they are printed when visiting the + // containing ObjCInterfaceDecl. + if (isa(*D)) + continue; + + // Skip over implicit declarations in pretty-printing mode. + if (D->isImplicit()) + continue; + + // Don't print implicit specializations, as they are printed when visiting + // corresponding templates. + if (auto FD = dyn_cast(*D)) + if (FD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation && + !isa(DC)) + continue; + + // The next bits of code handle stuff like "struct {int x;} a,b"; we're + // forced to merge the declarations because there's no other way to + // refer to the struct in question. When that struct is named instead, we + // also need to merge to avoid splitting off a stand-alone struct + // declaration that produces the warning ext_no_declarators in some + // contexts. + // + // This limited merging is safe without a bunch of other checks because it + // only merges declarations directly referring to the tag, not typedefs. + // + // Check whether the current declaration should be grouped with a previous + // non-free-standing tag declaration. + QualType CurDeclType = getDeclTypeCopy(*D); + if (!Decls.empty() && !CurDeclType.isNull()) { + QualType BaseType = GetBaseTypeCopy(CurDeclType); + if (!BaseType.isNull() && isa(BaseType) && + cast(BaseType)->getOwnedTagDecl() == Decls[0]) { + Decls.push_back(*D); + continue; + } + } + + // If we have a merged group waiting to be handled, handle it now. + if (!Decls.empty()) + ProcessDeclGroup(Decls); + + // If the current declaration is not a free standing declaration, save it + // so we can merge it with the subsequent declaration(s) using it. + if (isa(*D) && !cast(*D)->isFreeStanding()) { + Decls.push_back(*D); + continue; + } + + if (isa(*D)) { + Indentation -= Policy.Indentation; + this->Indent(); + Print(D->getAccess()); + Out << ":\n"; + Indentation += Policy.Indentation; + continue; + } + + this->Indent(); + Visit(*D); + + // FIXME: Need to be able to tell the DeclPrinter when + const char *Terminator = nullptr; + if (isa(*D) || isa(*D) || + isa(*D) || isa(*D) || + isa(*D)) + Terminator = nullptr; + else if (isa(*D) && cast(*D)->hasBody()) + Terminator = nullptr; + else if (auto FD = dyn_cast(*D)) { + if (FD->isThisDeclarationADefinition()) + Terminator = nullptr; + else + Terminator = ";"; + } else if (auto TD = dyn_cast(*D)) { + if (TD->getTemplatedDecl()->isThisDeclarationADefinition()) + Terminator = nullptr; + else + Terminator = ";"; + } else if (isa(*D) || isa(*D) || + isa(*D) || isa(*D) || + isa(*D) || isa(*D) || + isa(*D)) + Terminator = nullptr; + else if (isa(*D)) { + DeclContext::decl_iterator Next = D; + ++Next; + if (Next != DEnd) + Terminator = ","; + } else + Terminator = ";"; + + if (Terminator) + Out << Terminator; + if (!Policy.TerseOutput && + ((isa(*D) && + cast(*D)->doesThisDeclarationHaveABody()) || + (isa(*D) && + cast(*D) + ->getTemplatedDecl() + ->doesThisDeclarationHaveABody()))) + ; // StmtPrinter already added '\n' after CompoundStmt. + else + Out << "\n"; + + // Declare target attribute is special one, natural spelling for the pragma + // assumes "ending" construct so print it here. + if (D->hasAttr()) + Out << "#pragma omp end declare target\n"; + } + + if (!Decls.empty()) + ProcessDeclGroup(Decls); + + if (Indent) + Indentation -= Policy.Indentation; +} + +void DeclPrinterFiltering::VisitTranslationUnitDecl(TranslationUnitDecl *D) { + VisitDeclContext(D, false); +} + +void DeclPrinterFiltering::VisitTypedefDecl(TypedefDecl *D) { + if (!Policy.SuppressSpecifiers) { + Out << "typedef "; + + if (D->isModulePrivate()) + Out << "__module_private__ "; + } + QualType Ty = D->getTypeSourceInfo()->getType(); + Ty.print(Out, Policy, D->getName(), Indentation); + prettyPrintAttributes(D); +} + +void DeclPrinterFiltering::VisitTypeAliasDecl(TypeAliasDecl *D) { + Out << "using " << *D; + prettyPrintAttributes(D); + Out << " = " << D->getTypeSourceInfo()->getType().getAsString(Policy); +} + +void DeclPrinterFiltering::VisitEnumDecl(EnumDecl *D) { + if (!Policy.SuppressSpecifiers && D->isModulePrivate()) + Out << "__module_private__ "; + Out << "enum"; + if (D->isScoped()) { + if (D->isScopedUsingClassTag()) + Out << " class"; + else + Out << " struct"; + } + + prettyPrintAttributes(D); + + Out << ' ' << *D; + + if (D->isFixed() && D->getASTContext().getLangOpts().CPlusPlus11) + Out << " : " << D->getIntegerType().stream(Policy); + + if (D->isCompleteDefinition()) { + Out << " {\n"; + VisitDeclContext(D); + Indent() << "}"; + } +} + +void DeclPrinterFiltering::VisitRecordDecl(RecordDecl *D) { + if (!Policy.SuppressSpecifiers && D->isModulePrivate()) + Out << "__module_private__ "; + Out << D->getKindName(); + + prettyPrintAttributes(D); + + if (D->getIdentifier()) + Out << ' ' << *D; + + if (D->isCompleteDefinition()) { + Out << " {\n"; + VisitDeclContext(D); + Indent() << "}"; + } +} + +void DeclPrinterFiltering::VisitEnumConstantDecl(EnumConstantDecl *D) { + Out << *D; + prettyPrintAttributes(D); + if (Expr *Init = D->getInitExpr()) { + Out << " = "; + selective_printer::printPretty(Init, lines, Out, nullptr, Policy, &Context, + Indentation, "\n"); + } +} + +// ODR rename +static void printExplicitSpecifierCopy(const std::set &lines, + const ASTContext *Context, + ExplicitSpecifier ES, + llvm::raw_ostream &Out, + PrintingPolicy &Policy, + unsigned Indentation) { + std::string Proto = "explicit"; + llvm::raw_string_ostream EOut(Proto); + if (ES.getExpr()) { + EOut << "("; + selective_printer::printPretty(ES.getExpr(), lines, EOut, nullptr, Policy, + Context, Indentation); + EOut << ")"; + } + EOut << " "; + EOut.flush(); + Out << EOut.str(); +} + +void DeclPrinterFiltering::VisitFunctionDecl(FunctionDecl *D) { + if (!D->getDescribedFunctionTemplate() && + !D->isFunctionTemplateSpecialization()) + prettyPrintPragmas(D); + + if (D->isFunctionTemplateSpecialization()) + Out << "template<> "; + else if (!D->getDescribedFunctionTemplate()) { + for (unsigned I = 0, NumTemplateParams = D->getNumTemplateParameterLists(); + I < NumTemplateParams; ++I) + printTemplateParameters(D->getTemplateParameterList(I)); + } + + CXXConstructorDecl *CDecl = dyn_cast(D); + CXXConversionDecl *ConversionDecl = dyn_cast(D); + CXXDeductionGuideDecl *GuideDecl = dyn_cast(D); + if (!Policy.SuppressSpecifiers) { + switch (D->getStorageClass()) { + case SC_None: + break; + case SC_Extern: + Out << "extern "; + break; + case SC_Static: + Out << "static "; + break; + case SC_PrivateExtern: + Out << "__private_extern__ "; + break; + case SC_Auto: + case SC_Register: + llvm_unreachable("invalid for functions"); + } + + if (D->isInlineSpecified()) + Out << "inline "; + if (D->isVirtualAsWritten()) + Out << "virtual "; + if (D->isModulePrivate()) + Out << "__module_private__ "; + if (D->isConstexprSpecified() && !D->isExplicitlyDefaulted()) + Out << "constexpr "; + if (D->isConsteval()) + Out << "consteval "; + ExplicitSpecifier ExplicitSpec = ExplicitSpecifier::getFromDecl(D); + if (ExplicitSpec.isSpecified()) + printExplicitSpecifierCopy(lines, &Context, ExplicitSpec, Out, Policy, + Indentation); + } + + PrintingPolicy SubPolicy(Policy); + SubPolicy.SuppressSpecifiers = false; + std::string Proto; + + if (Policy.FullyQualifiedName) { + Proto += D->getQualifiedNameAsString(); + } else { + llvm::raw_string_ostream OS(Proto); + if (!Policy.SuppressScope) { + if (const NestedNameSpecifier *NS = D->getQualifier()) { + // TODO jr + NS->print(OS, Policy); + } + } + D->getNameInfo().printName(OS, Policy); + } + + if (GuideDecl) + Proto = GuideDecl->getDeducedTemplate()->getDeclName().getAsString(); + if (D->isFunctionTemplateSpecialization()) { + llvm::raw_string_ostream POut(Proto); + DeclPrinterFiltering TArgPrinter(this->lines, POut, SubPolicy, Context, + Indentation); + const auto *TArgAsWritten = D->getTemplateSpecializationArgsAsWritten(); + if (TArgAsWritten && !Policy.PrintCanonicalTypes) + TArgPrinter.printTemplateArguments(TArgAsWritten->arguments()); + else if (const TemplateArgumentList *TArgs = + D->getTemplateSpecializationArgs()) + TArgPrinter.printTemplateArguments(TArgs->asArray()); + } + + QualType Ty = D->getType(); + while (const ParenType *PT = dyn_cast(Ty)) { + Proto = '(' + Proto + ')'; + Ty = PT->getInnerType(); + } + + if (const FunctionType *AFT = Ty->getAs()) { + const FunctionProtoType *FT = nullptr; + if (D->hasWrittenPrototype()) + FT = dyn_cast(AFT); + + Proto += "("; + if (FT) { + llvm::raw_string_ostream POut(Proto); + DeclPrinterFiltering ParamPrinter(this->lines, POut, SubPolicy, Context, + Indentation); + for (unsigned i = 0, e = D->getNumParams(); i != e; ++i) { + if (i) + POut << ", "; + ParamPrinter.VisitParmVarDecl(D->getParamDecl(i)); + } + + if (FT->isVariadic()) { + if (D->getNumParams()) + POut << ", "; + POut << "..."; + } + } else if (D->doesThisDeclarationHaveABody() && !D->hasPrototype()) { + for (unsigned i = 0, e = D->getNumParams(); i != e; ++i) { + if (i) + Proto += ", "; + Proto += D->getParamDecl(i)->getNameAsString(); + } + } + + Proto += ")"; + + if (FT) { + if (FT->isConst()) + Proto += " const"; + if (FT->isVolatile()) + Proto += " volatile"; + if (FT->isRestrict()) + Proto += " restrict"; + + switch (FT->getRefQualifier()) { + case RQ_None: + break; + case RQ_LValue: + Proto += " &"; + break; + case RQ_RValue: + Proto += " &&"; + break; + } + } + + if (FT && FT->hasDynamicExceptionSpec()) { + Proto += " throw("; + if (FT->getExceptionSpecType() == EST_MSAny) + Proto += "..."; + else + for (unsigned I = 0, N = FT->getNumExceptions(); I != N; ++I) { + if (I) + Proto += ", "; + + Proto += FT->getExceptionType(I).getAsString(SubPolicy); + } + Proto += ")"; + } else if (FT && isNoexceptExceptionSpec(FT->getExceptionSpecType())) { + Proto += " noexcept"; + if (isComputedNoexcept(FT->getExceptionSpecType())) { + Proto += "("; + llvm::raw_string_ostream EOut(Proto); + selective_printer::printPretty(FT->getNoexceptExpr(), lines, EOut, + nullptr, SubPolicy, &Context, + Indentation); + EOut.flush(); + Proto += EOut.str(); + Proto += ")"; + } + } + + if (CDecl) { + if (!Policy.TerseOutput) + PrintConstructorInitializers(CDecl, Proto); + } else if (!ConversionDecl && !isa(D)) { + if (FT && FT->hasTrailingReturn()) { + if (!GuideDecl) + Out << "auto "; + Out << Proto << " -> "; + Proto.clear(); + } + AFT->getReturnType().print(Out, Policy, Proto); + Proto.clear(); + } + Out << Proto; + + if (Expr *TrailingRequiresClause = D->getTrailingRequiresClause()) { + Out << " requires "; + selective_printer::printPretty(TrailingRequiresClause, lines, Out, + nullptr, SubPolicy, &Context, Indentation); + } + } else { + Ty.print(Out, Policy, Proto); + } + + prettyPrintAttributes(D); + + if (D->isPure()) + Out << " = 0"; + else if (D->isDeletedAsWritten()) + Out << " = delete"; + else if (D->isExplicitlyDefaulted()) + Out << " = default"; + else if (D->doesThisDeclarationHaveABody()) { + if (!Policy.TerseOutput) { + if (!D->hasPrototype() && D->getNumParams()) { + // This is a K&R function definition, so we need to print the + // parameters. + Out << '\n'; + DeclPrinterFiltering ParamPrinter(this->lines, Out, SubPolicy, Context, + Indentation); + Indentation += Policy.Indentation; + for (unsigned i = 0, e = D->getNumParams(); i != e; ++i) { + Indent(); + ParamPrinter.VisitParmVarDecl(D->getParamDecl(i)); + Out << ";\n"; + } + Indentation -= Policy.Indentation; + } else + Out << ' '; + + if (D->getBody()) + selective_printer::printPretty(D->getBody(), lines, Out, nullptr, + SubPolicy, &Context, Indentation); + } else { + if (!Policy.TerseOutput && isa(*D)) + Out << " {}"; + } + } +} + +void DeclPrinterFiltering::VisitFriendDecl(FriendDecl *D) { + if (TypeSourceInfo *TSI = D->getFriendType()) { + unsigned NumTPLists = D->getFriendTypeNumTemplateParameterLists(); + for (unsigned i = 0; i < NumTPLists; ++i) + printTemplateParameters(D->getFriendTypeTemplateParameterList(i)); + Out << "friend "; + Out << " " << TSI->getType().getAsString(Policy); + } else if (FunctionDecl *FD = dyn_cast(D->getFriendDecl())) { + Out << "friend "; + VisitFunctionDecl(FD); + } else if (FunctionTemplateDecl *FTD = + dyn_cast(D->getFriendDecl())) { + Out << "friend "; + VisitFunctionTemplateDecl(FTD); + } else if (ClassTemplateDecl *CTD = + dyn_cast(D->getFriendDecl())) { + Out << "friend "; + VisitRedeclarableTemplateDecl(CTD); + } +} + +void DeclPrinterFiltering::VisitFieldDecl(FieldDecl *D) { + // FIXME: add printing of pragma attributes if required. + if (!Policy.SuppressSpecifiers && D->isMutable()) + Out << "mutable "; + if (!Policy.SuppressSpecifiers && D->isModulePrivate()) + Out << "__module_private__ "; + + Out << D->getASTContext() + .getUnqualifiedObjCPointerType(D->getType()) + .stream(Policy, D->getName(), Indentation); + + if (D->isBitField()) { + Out << " : "; + selective_printer::printPretty(D->getBitWidth(), lines, Out, nullptr, + Policy, &Context, Indentation); + } + + Expr *Init = D->getInClassInitializer(); + if (!Policy.SuppressInitializers && Init) { + if (D->getInClassInitStyle() == ICIS_ListInit) + Out << " "; + else + Out << " = "; + selective_printer::printPretty(Init, lines, Out, nullptr, Policy, &Context, + Indentation); + } + prettyPrintAttributes(D); +} + +void DeclPrinterFiltering::VisitLabelDecl(LabelDecl *D) { Out << *D << ":"; } + +void DeclPrinterFiltering::VisitVarDecl(VarDecl *D) { + prettyPrintPragmas(D); + + QualType T = + D->getTypeSourceInfo() + ? D->getTypeSourceInfo()->getType() + : D->getASTContext().getUnqualifiedObjCPointerType(D->getType()); + + if (!Policy.SuppressSpecifiers) { + StorageClass SC = D->getStorageClass(); + if (SC != SC_None) + Out << VarDecl::getStorageClassSpecifierString(SC) << " "; + + switch (D->getTSCSpec()) { + case TSCS_unspecified: + break; + case TSCS___thread: + Out << "__thread "; + break; + case TSCS__Thread_local: + Out << "_Thread_local "; + break; + case TSCS_thread_local: + Out << "thread_local "; + break; + } + + if (D->isModulePrivate()) + Out << "__module_private__ "; + + if (D->isConstexpr()) { + Out << "constexpr "; + T.removeLocalConst(); + } + } + + printDeclType(T, D->getName()); + Expr *Init = D->getInit(); + if (!Policy.SuppressInitializers && Init) { + bool ImplicitInit = false; + if (CXXConstructExpr *Construct = + dyn_cast(Init->IgnoreImplicit())) { + if (D->getInitStyle() == VarDecl::CallInit && + !Construct->isListInitialization()) { + ImplicitInit = Construct->getNumArgs() == 0 || + Construct->getArg(0)->isDefaultArgument(); + } + } + if (!ImplicitInit) { + if ((D->getInitStyle() == VarDecl::CallInit) && !isa(Init)) + Out << "("; + else if (D->getInitStyle() == VarDecl::CInit) { + Out << " = "; + } + PrintingPolicy SubPolicy(Policy); + SubPolicy.SuppressSpecifiers = false; + SubPolicy.IncludeTagDefinition = false; + selective_printer::printPretty(Init, lines, Out, nullptr, SubPolicy, + &Context, Indentation); + if ((D->getInitStyle() == VarDecl::CallInit) && !isa(Init)) + Out << ")"; + } + } + prettyPrintAttributes(D); +} + +void DeclPrinterFiltering::VisitParmVarDecl(ParmVarDecl *D) { VisitVarDecl(D); } + +void DeclPrinterFiltering::VisitFileScopeAsmDecl(FileScopeAsmDecl *D) { + Out << "__asm ("; + selective_printer::printPretty(D->getAsmString(), lines, Out, nullptr, Policy, + &Context, Indentation); + Out << ")"; +} + +void DeclPrinterFiltering::VisitImportDecl(ImportDecl *D) { + Out << "@import " << D->getImportedModule()->getFullModuleName() << ";\n"; +} + +void DeclPrinterFiltering::VisitStaticAssertDecl(StaticAssertDecl *D) { + Out << "static_assert("; + selective_printer::printPretty(D->getAssertExpr(), lines, Out, nullptr, + Policy, &Context, Indentation); + if (StringLiteral *SL = D->getMessage()) { + Out << ", "; + selective_printer::printPretty(SL, lines, Out, nullptr, Policy, &Context, + Indentation); + } + Out << ")"; +} + +//---------------------------------------------------------------------------- +// C++ declarations +//---------------------------------------------------------------------------- +void DeclPrinterFiltering::VisitNamespaceDecl(NamespaceDecl *D) { + if (D->isInline()) + Out << "inline "; + Out << "namespace " << *D << " {\n"; + VisitDeclContext(D); + Indent() << "}"; +} + +void DeclPrinterFiltering::VisitUsingDirectiveDecl(UsingDirectiveDecl *D) { + Out << "using namespace "; + // TODO jr + if (D->getQualifier()) + D->getQualifier()->print(Out, Policy); + Out << *D->getNominatedNamespaceAsWritten(); +} + +void DeclPrinterFiltering::VisitNamespaceAliasDecl(NamespaceAliasDecl *D) { + Out << "namespace " << *D << " = "; + // TODO jr + if (D->getQualifier()) + D->getQualifier()->print(Out, Policy); + Out << *D->getAliasedNamespace(); +} + +void DeclPrinterFiltering::VisitEmptyDecl(EmptyDecl *D) { + prettyPrintAttributes(D); +} + +void DeclPrinterFiltering::VisitCXXRecordDecl(CXXRecordDecl *D) { + // FIXME: add printing of pragma attributes if required. + if (!Policy.SuppressSpecifiers && D->isModulePrivate()) + Out << "__module_private__ "; + Out << D->getKindName(); + + prettyPrintAttributes(D); + + if (D->getIdentifier()) { + Out << ' ' << *D; + + if (auto S = dyn_cast(D)) { + ArrayRef Args = S->getTemplateArgs().asArray(); + if (!Policy.PrintCanonicalTypes) + if (const auto *TSI = S->getTypeAsWritten()) + if (const auto *TST = + dyn_cast(TSI->getType())) + Args = TST->template_arguments(); + printTemplateArguments(Args); + } + } + + if (D->isCompleteDefinition()) { + // Print the base classes + if (D->getNumBases()) { + Out << " : "; + for (CXXRecordDecl::base_class_iterator Base = D->bases_begin(), + BaseEnd = D->bases_end(); + Base != BaseEnd; ++Base) { + if (Base != D->bases_begin()) + Out << ", "; + + if (Base->isVirtual()) + Out << "virtual "; + + AccessSpecifier AS = Base->getAccessSpecifierAsWritten(); + if (AS != AS_none) { + Print(AS); + Out << " "; + } + Out << Base->getType().getAsString(Policy); + + if (Base->isPackExpansion()) + Out << "..."; + } + } + + // Print the class definition + // FIXME: Doesn't print access specifiers, e.g., "public:" + if (Policy.TerseOutput) { + Out << " {}"; + } else { + Out << " {\n"; + VisitDeclContext(D); + Indent() << "}"; + } + } +} + +void DeclPrinterFiltering::VisitLinkageSpecDecl(LinkageSpecDecl *D) { + const char *l; + if (D->getLanguage() == LinkageSpecDecl::lang_c) + l = "C"; + else { + assert(D->getLanguage() == LinkageSpecDecl::lang_cxx && + "unknown language in linkage specification"); + l = "C++"; + } + + Out << "extern \"" << l << "\" "; + if (D->hasBraces()) { + Out << "{\n"; + VisitDeclContext(D); + Indent() << "}"; + } else + Visit(*D->decls_begin()); +} + +void DeclPrinterFiltering::printTemplateParameters( + const TemplateParameterList *Params, bool OmitTemplateKW) { + assert(Params); + + if (!OmitTemplateKW) + Out << "template "; + Out << '<'; + + bool NeedComma = false; + for (const Decl *Param : *Params) { + if (Param->isImplicit()) + continue; + + if (NeedComma) + Out << ", "; + else + NeedComma = true; + + if (auto TTP = dyn_cast(Param)) { + + // TODO jr + if (const TypeConstraint *TC = TTP->getTypeConstraint()) + TC->print(Out, Policy); + else if (TTP->wasDeclaredWithTypename()) + Out << "typename"; + else + Out << "class"; + + if (TTP->isParameterPack()) + Out << " ..."; + else if (!TTP->getName().empty()) + Out << ' '; + + Out << *TTP; + + if (TTP->hasDefaultArgument()) { + Out << " = "; + Out << TTP->getDefaultArgument().getAsString(Policy); + }; + } else if (auto NTTP = dyn_cast(Param)) { + StringRef Name; + if (IdentifierInfo *II = NTTP->getIdentifier()) + Name = II->getName(); + printDeclType(NTTP->getType(), Name, NTTP->isParameterPack()); + + if (NTTP->hasDefaultArgument()) { + Out << " = "; + selective_printer::printPretty(NTTP->getDefaultArgument(), lines, Out, + nullptr, Policy, &Context, Indentation); + } + } else if (auto TTPD = dyn_cast(Param)) { + VisitTemplateDecl(TTPD); + // FIXME: print the default argument, if present. + } + } + + Out << '>'; + if (!OmitTemplateKW) + Out << ' '; +} + +void DeclPrinterFiltering::printTemplateArguments( + ArrayRef Args) { + // TODO JR + Out << "<"; + for (size_t I = 0, E = Args.size(); I < E; ++I) { + if (I) + Out << ", "; + Args[I].print(Policy, Out); + } + Out << ">"; +} + +void DeclPrinterFiltering::printTemplateArguments( + ArrayRef Args) { + // TODO JR + Out << "<"; + for (size_t I = 0, E = Args.size(); I < E; ++I) { + if (I) + Out << ", "; + Args[I].getArgument().print(Policy, Out); + } + Out << ">"; +} + +void DeclPrinterFiltering::VisitTemplateDecl(const TemplateDecl *D) { + printTemplateParameters(D->getTemplateParameters()); + + if (const TemplateTemplateParmDecl *TTP = + dyn_cast(D)) { + Out << "class "; + if (TTP->isParameterPack()) + Out << "..."; + Out << D->getName(); + } else if (auto *TD = D->getTemplatedDecl()) + Visit(TD); + else if (const auto *Concept = dyn_cast(D)) { + Out << "concept " << Concept->getName() << " = "; + selective_printer::printPretty(Concept->getConstraintExpr(), lines, Out, + nullptr, Policy, &Context, Indentation); + Out << ";"; + } +} + +void DeclPrinterFiltering::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) { + prettyPrintPragmas(D->getTemplatedDecl()); + // Print any leading template parameter lists. + if (const FunctionDecl *FD = D->getTemplatedDecl()) { + for (unsigned I = 0, NumTemplateParams = FD->getNumTemplateParameterLists(); + I < NumTemplateParams; ++I) + printTemplateParameters(FD->getTemplateParameterList(I)); + } + VisitRedeclarableTemplateDecl(D); + // Declare target attribute is special one, natural spelling for the pragma + // assumes "ending" construct so print it here. + if (D->getTemplatedDecl()->hasAttr()) + Out << "#pragma omp end declare target\n"; + + // Never print "instantiations" for deduction guides (they don't really + // have them). + if (PrintInstantiation && + !isa(D->getTemplatedDecl())) { + FunctionDecl *PrevDecl = D->getTemplatedDecl(); + const FunctionDecl *Def; + if (PrevDecl->isDefined(Def) && Def != PrevDecl) + return; + for (auto *I : D->specializations()) + if (I->getTemplateSpecializationKind() == TSK_ImplicitInstantiation) { + if (!PrevDecl->isThisDeclarationADefinition()) + Out << ";\n"; + Indent(); + prettyPrintPragmas(I); + Visit(I); + } + } +} + +void DeclPrinterFiltering::VisitClassTemplateDecl(ClassTemplateDecl *D) { + VisitRedeclarableTemplateDecl(D); + + if (PrintInstantiation) { + for (auto *I : D->specializations()) + if (I->getSpecializationKind() == TSK_ImplicitInstantiation) { + if (D->isThisDeclarationADefinition()) + Out << ";"; + Out << "\n"; + Visit(I); + } + } +} + +void DeclPrinterFiltering::VisitClassTemplateSpecializationDecl( + ClassTemplateSpecializationDecl *D) { + Out << "template<> "; + VisitCXXRecordDecl(D); +} + +void DeclPrinterFiltering::VisitClassTemplatePartialSpecializationDecl( + ClassTemplatePartialSpecializationDecl *D) { + printTemplateParameters(D->getTemplateParameters()); + VisitCXXRecordDecl(D); +} + +//---------------------------------------------------------------------------- +// Objective-C declarations +//---------------------------------------------------------------------------- + +void DeclPrinterFiltering::PrintObjCMethodType(ASTContext &Ctx, + Decl::ObjCDeclQualifier Quals, + QualType T) { + Out << '('; + if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_In) + Out << "in "; + if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_Inout) + Out << "inout "; + if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_Out) + Out << "out "; + if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_Bycopy) + Out << "bycopy "; + if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_Byref) + Out << "byref "; + if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_Oneway) + Out << "oneway "; + if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_CSNullability) { + if (auto nullability = AttributedType::stripOuterNullability(T)) + Out << getNullabilitySpelling(*nullability, true) << ' '; + } + + Out << Ctx.getUnqualifiedObjCPointerType(T).getAsString(Policy); + Out << ')'; +} + +void DeclPrinterFiltering::PrintObjCTypeParams(ObjCTypeParamList *Params) { + Out << "<"; + unsigned First = true; + for (auto *Param : *Params) { + if (First) { + First = false; + } else { + Out << ", "; + } + + switch (Param->getVariance()) { + case ObjCTypeParamVariance::Invariant: + break; + + case ObjCTypeParamVariance::Covariant: + Out << "__covariant "; + break; + + case ObjCTypeParamVariance::Contravariant: + Out << "__contravariant "; + break; + } + + Out << Param->getDeclName().getAsString(); + + if (Param->hasExplicitBound()) { + Out << " : " << Param->getUnderlyingType().getAsString(Policy); + } + } + Out << ">"; +} + +void DeclPrinterFiltering::VisitObjCMethodDecl(ObjCMethodDecl *OMD) { + if (OMD->isInstanceMethod()) + Out << "- "; + else + Out << "+ "; + if (!OMD->getReturnType().isNull()) { + PrintObjCMethodType(OMD->getASTContext(), OMD->getObjCDeclQualifier(), + OMD->getReturnType()); + } + + std::string name = OMD->getSelector().getAsString(); + std::string::size_type pos, lastPos = 0; + for (const auto *PI : OMD->parameters()) { + // FIXME: selector is missing here! + pos = name.find_first_of(':', lastPos); + if (lastPos != 0) + Out << " "; + Out << name.substr(lastPos, pos - lastPos) << ':'; + PrintObjCMethodType(OMD->getASTContext(), PI->getObjCDeclQualifier(), + PI->getType()); + Out << *PI; + lastPos = pos + 1; + } + + if (OMD->param_begin() == OMD->param_end()) + Out << name; + + if (OMD->isVariadic()) + Out << ", ..."; + + prettyPrintAttributes(OMD); + + if (OMD->getBody() && !Policy.TerseOutput) { + Out << ' '; + selective_printer::printPretty(OMD->getBody(), lines, Out, nullptr, Policy, + &Context); + } else if (Policy.PolishForDeclaration) + Out << ';'; +} + +void DeclPrinterFiltering::VisitObjCImplementationDecl( + ObjCImplementationDecl *OID) { + std::string I = OID->getNameAsString(); + ObjCInterfaceDecl *SID = OID->getSuperClass(); + + bool eolnOut = false; + if (SID) + Out << "@implementation " << I << " : " << *SID; + else + Out << "@implementation " << I; + + if (OID->ivar_size() > 0) { + Out << "{\n"; + eolnOut = true; + Indentation += Policy.Indentation; + for (const auto *I : OID->ivars()) { + Indent() << I->getASTContext() + .getUnqualifiedObjCPointerType(I->getType()) + .getAsString(Policy) + << ' ' << *I << ";\n"; + } + Indentation -= Policy.Indentation; + Out << "}\n"; + } else if (SID || (OID->decls_begin() != OID->decls_end())) { + Out << "\n"; + eolnOut = true; + } + VisitDeclContext(OID, false); + if (!eolnOut) + Out << "\n"; + Out << "@end"; +} + +void DeclPrinterFiltering::VisitObjCInterfaceDecl(ObjCInterfaceDecl *OID) { + std::string I = OID->getNameAsString(); + ObjCInterfaceDecl *SID = OID->getSuperClass(); + + if (!OID->isThisDeclarationADefinition()) { + Out << "@class " << I; + + if (auto TypeParams = OID->getTypeParamListAsWritten()) { + PrintObjCTypeParams(TypeParams); + } + + Out << ";"; + return; + } + bool eolnOut = false; + Out << "@interface " << I; + + if (auto TypeParams = OID->getTypeParamListAsWritten()) { + PrintObjCTypeParams(TypeParams); + } + + if (SID) + Out << " : " << QualType(OID->getSuperClassType(), 0).getAsString(Policy); + + // Protocols? + const ObjCList &Protocols = OID->getReferencedProtocols(); + if (!Protocols.empty()) { + for (ObjCList::iterator I = Protocols.begin(), + E = Protocols.end(); + I != E; ++I) + Out << (I == Protocols.begin() ? '<' : ',') << **I; + Out << "> "; + } + + if (OID->ivar_size() > 0) { + Out << "{\n"; + eolnOut = true; + Indentation += Policy.Indentation; + for (const auto *I : OID->ivars()) { + Indent() << I->getASTContext() + .getUnqualifiedObjCPointerType(I->getType()) + .getAsString(Policy) + << ' ' << *I << ";\n"; + } + Indentation -= Policy.Indentation; + Out << "}\n"; + } else if (SID || (OID->decls_begin() != OID->decls_end())) { + Out << "\n"; + eolnOut = true; + } + + VisitDeclContext(OID, false); + if (!eolnOut) + Out << "\n"; + Out << "@end"; + // FIXME: implement the rest... +} + +void DeclPrinterFiltering::VisitObjCProtocolDecl(ObjCProtocolDecl *PID) { + if (!PID->isThisDeclarationADefinition()) { + Out << "@protocol " << *PID << ";\n"; + return; + } + // Protocols? + const ObjCList &Protocols = PID->getReferencedProtocols(); + if (!Protocols.empty()) { + Out << "@protocol " << *PID; + for (ObjCList::iterator I = Protocols.begin(), + E = Protocols.end(); + I != E; ++I) + Out << (I == Protocols.begin() ? '<' : ',') << **I; + Out << ">\n"; + } else + Out << "@protocol " << *PID << '\n'; + VisitDeclContext(PID, false); + Out << "@end"; +} + +void DeclPrinterFiltering::VisitObjCCategoryImplDecl( + ObjCCategoryImplDecl *PID) { + Out << "@implementation " << *PID->getClassInterface() << '(' << *PID + << ")\n"; + + VisitDeclContext(PID, false); + Out << "@end"; + // FIXME: implement the rest... +} + +void DeclPrinterFiltering::VisitObjCCategoryDecl(ObjCCategoryDecl *PID) { + Out << "@interface " << *PID->getClassInterface(); + if (auto TypeParams = PID->getTypeParamList()) { + PrintObjCTypeParams(TypeParams); + } + Out << "(" << *PID << ")\n"; + if (PID->ivar_size() > 0) { + Out << "{\n"; + Indentation += Policy.Indentation; + for (const auto *I : PID->ivars()) + Indent() << I->getASTContext() + .getUnqualifiedObjCPointerType(I->getType()) + .getAsString(Policy) + << ' ' << *I << ";\n"; + Indentation -= Policy.Indentation; + Out << "}\n"; + } + + VisitDeclContext(PID, false); + Out << "@end"; + + // FIXME: implement the rest... +} + +void DeclPrinterFiltering::VisitObjCCompatibleAliasDecl( + ObjCCompatibleAliasDecl *AID) { + Out << "@compatibility_alias " << *AID << ' ' << *AID->getClassInterface() + << ";\n"; +} + +/// PrintObjCPropertyDecl - print a property declaration. +/// +/// Print attributes in the following order: +/// - class +/// - nonatomic | atomic +/// - assign | retain | strong | copy | weak | unsafe_unretained +/// - readwrite | readonly +/// - getter & setter +/// - nullability +void DeclPrinterFiltering::VisitObjCPropertyDecl(ObjCPropertyDecl *PDecl) { + if (PDecl->getPropertyImplementation() == ObjCPropertyDecl::Required) + Out << "@required\n"; + else if (PDecl->getPropertyImplementation() == ObjCPropertyDecl::Optional) + Out << "@optional\n"; + + QualType T = PDecl->getType(); + + Out << "@property"; + if (PDecl->getPropertyAttributes() != ObjCPropertyDecl::OBJC_PR_noattr) { + bool first = true; + Out << "("; + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_class) { + Out << (first ? "" : ", ") << "class"; + first = false; + } + + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_direct) { + Out << (first ? "" : ", ") << "direct"; + first = false; + } + + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_nonatomic) { + Out << (first ? "" : ", ") << "nonatomic"; + first = false; + } + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_atomic) { + Out << (first ? "" : ", ") << "atomic"; + first = false; + } + + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_assign) { + Out << (first ? "" : ", ") << "assign"; + first = false; + } + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_retain) { + Out << (first ? "" : ", ") << "retain"; + first = false; + } + + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_strong) { + Out << (first ? "" : ", ") << "strong"; + first = false; + } + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_copy) { + Out << (first ? "" : ", ") << "copy"; + first = false; + } + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_weak) { + Out << (first ? "" : ", ") << "weak"; + first = false; + } + if (PDecl->getPropertyAttributes() & + ObjCPropertyDecl::OBJC_PR_unsafe_unretained) { + Out << (first ? "" : ", ") << "unsafe_unretained"; + first = false; + } + + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_readwrite) { + Out << (first ? "" : ", ") << "readwrite"; + first = false; + } + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_readonly) { + Out << (first ? "" : ", ") << "readonly"; + first = false; + } + + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_getter) { + Out << (first ? "" : ", ") << "getter = "; + PDecl->getGetterName().print(Out); + first = false; + } + if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_setter) { + Out << (first ? "" : ", ") << "setter = "; + PDecl->getSetterName().print(Out); + first = false; + } + + if (PDecl->getPropertyAttributes() & + ObjCPropertyDecl::OBJC_PR_nullability) { + if (auto nullability = AttributedType::stripOuterNullability(T)) { + if (*nullability == NullabilityKind::Unspecified && + (PDecl->getPropertyAttributes() & + ObjCPropertyDecl::OBJC_PR_null_resettable)) { + Out << (first ? "" : ", ") << "null_resettable"; + } else { + Out << (first ? "" : ", ") + << getNullabilitySpelling(*nullability, true); + } + first = false; + } + } + + (void)first; // Silence dead store warning due to idiomatic code. + Out << ")"; + } + std::string TypeStr = + PDecl->getASTContext().getUnqualifiedObjCPointerType(T).getAsString( + Policy); + Out << ' ' << TypeStr; + if (!StringRef(TypeStr).endswith("*")) + Out << ' '; + Out << *PDecl; + if (Policy.PolishForDeclaration) + Out << ';'; +} + +void DeclPrinterFiltering::VisitObjCPropertyImplDecl( + ObjCPropertyImplDecl *PID) { + if (PID->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize) + Out << "@synthesize "; + else + Out << "@dynamic "; + Out << *PID->getPropertyDecl(); + if (PID->getPropertyIvarDecl()) + Out << '=' << *PID->getPropertyIvarDecl(); +} + +void DeclPrinterFiltering::VisitUsingDecl(UsingDecl *D) { + if (!D->isAccessDeclaration()) + Out << "using "; + if (D->hasTypename()) + Out << "typename "; + // TODO jr + D->getQualifier()->print(Out, Policy); + + // Use the correct record name when the using declaration is used for + // inheriting constructors. + for (const auto *Shadow : D->shadows()) { + if (const auto *ConstructorShadow = + dyn_cast(Shadow)) { + assert(Shadow->getDeclContext() == ConstructorShadow->getDeclContext()); + Out << *ConstructorShadow->getNominatedBaseClass(); + return; + } + } + Out << *D; +} + +void DeclPrinterFiltering::VisitUnresolvedUsingTypenameDecl( + UnresolvedUsingTypenameDecl *D) { + Out << "using typename "; + // TODO jr + D->getQualifier()->print(Out, Policy); + Out << D->getDeclName(); +} + +void DeclPrinterFiltering::VisitUnresolvedUsingValueDecl( + UnresolvedUsingValueDecl *D) { + if (!D->isAccessDeclaration()) + Out << "using "; + // TODO jr + D->getQualifier()->print(Out, Policy); + Out << D->getDeclName(); +} + +void DeclPrinterFiltering::VisitUsingShadowDecl(UsingShadowDecl *D) { + // ignore +} + +void DeclPrinterFiltering::VisitOMPThreadPrivateDecl(OMPThreadPrivateDecl *D) { + Out << "#pragma omp threadprivate"; + if (!D->varlist_empty()) { + for (OMPThreadPrivateDecl::varlist_iterator I = D->varlist_begin(), + E = D->varlist_end(); + I != E; ++I) { + Out << (I == D->varlist_begin() ? '(' : ','); + NamedDecl *ND = cast(*I)->getDecl(); + ND->printQualifiedName(Out); + } + Out << ")"; + } +} + +void DeclPrinterFiltering::VisitOMPAllocateDecl(OMPAllocateDecl *D) { + Out << "#pragma omp allocate"; + if (!D->varlist_empty()) { + for (OMPAllocateDecl::varlist_iterator I = D->varlist_begin(), + E = D->varlist_end(); + I != E; ++I) { + Out << (I == D->varlist_begin() ? '(' : ','); + NamedDecl *ND = cast(*I)->getDecl(); + ND->printQualifiedName(Out); + } + Out << ")"; + } + if (!D->clauselist_empty()) { + Out << " "; + OMPClausePrinter Printer(Out, Policy); + for (OMPClause *C : D->clauselists()) + Printer.Visit(C); + } +} + +void DeclPrinterFiltering::VisitOMPRequiresDecl(OMPRequiresDecl *D) { + Out << "#pragma omp requires "; + if (!D->clauselist_empty()) { + OMPClausePrinter Printer(Out, Policy); + for (auto I = D->clauselist_begin(), E = D->clauselist_end(); I != E; ++I) + Printer.Visit(*I); + } +} + +void DeclPrinterFiltering::VisitOMPDeclareReductionDecl( + OMPDeclareReductionDecl *D) { + if (!D->isInvalidDecl()) { + Out << "#pragma omp declare reduction ("; + if (D->getDeclName().getNameKind() == DeclarationName::CXXOperatorName) { + const char *OpName = + getOperatorSpelling(D->getDeclName().getCXXOverloadedOperator()); + assert(OpName && "not an overloaded operator"); + Out << OpName; + } else { + assert(D->getDeclName().isIdentifier()); + D->printName(Out); + } + Out << " : "; + D->getType().print(Out, Policy); + Out << " : "; + selective_printer::printPretty(D->getCombiner(), lines, Out, nullptr, + Policy, 0); + Out << ")"; + if (auto *Init = D->getInitializer()) { + Out << " initializer("; + switch (D->getInitializerKind()) { + case OMPDeclareReductionDecl::DirectInit: + Out << "omp_priv("; + break; + case OMPDeclareReductionDecl::CopyInit: + Out << "omp_priv = "; + break; + case OMPDeclareReductionDecl::CallInit: + break; + } + selective_printer::printPretty(Init, lines, Out, nullptr, Policy, 0); + if (D->getInitializerKind() == OMPDeclareReductionDecl::DirectInit) + Out << ")"; + Out << ")"; + } + } +} + +void DeclPrinterFiltering::VisitOMPDeclareMapperDecl(OMPDeclareMapperDecl *D) { + if (!D->isInvalidDecl()) { + Out << "#pragma omp declare mapper ("; + D->printName(Out); + Out << " : "; + D->getType().print(Out, Policy); + Out << " "; + Out << D->getVarName(); + Out << ")"; + if (!D->clauselist_empty()) { + OMPClausePrinter Printer(Out, Policy); + for (auto *C : D->clauselists()) { + Out << " "; + Printer.Visit(C); + } + } + } +} + +void DeclPrinterFiltering::VisitOMPCapturedExprDecl(OMPCapturedExprDecl *D) { + selective_printer::printPretty(D->getInit(), lines, Out, nullptr, Policy, + &Context, Indentation); +} diff --git a/tools/module-extractor/SelectiveDeclPrinter.h b/tools/module-extractor/SelectiveDeclPrinter.h new file mode 100644 index 0000000000..f7621eb3b2 --- /dev/null +++ b/tools/module-extractor/SelectiveDeclPrinter.h @@ -0,0 +1,24 @@ +#ifndef PHASAR_SELECTIVEDECLPRINTER_H +#define PHASAR_SELECTIVEDECLPRINTER_H + +#include +#include +#include + +#include + +namespace selective_printer { +void print(const clang::Decl *decl, const std::set &lines, + llvm::raw_ostream &Out, const clang::PrintingPolicy &Policy, + unsigned Indentation = 0, bool PrintInstantiation = false); + +void print(const clang::Decl *decl, const std::set &lines, + llvm::raw_ostream &Out, unsigned Indentation = 0, + bool PrintInstantiation = false); + +void printGroup(clang::Decl **Begin, unsigned NumDecls, + const std::set &lines, llvm::raw_ostream &Out, + const clang::PrintingPolicy &Policy, unsigned Indentation = 0); +} // namespace selective_printer + +#endif // PHASAR_SELECTIVEDECLPRINTER_H diff --git a/tools/module-extractor/SelectiveStmtPrinter.cpp b/tools/module-extractor/SelectiveStmtPrinter.cpp new file mode 100644 index 0000000000..e0bc804fb8 --- /dev/null +++ b/tools/module-extractor/SelectiveStmtPrinter.cpp @@ -0,0 +1,2814 @@ +//===- StmtPrinterFiltering.cpp - Printing implementation for Stmt ASTs +//------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file implements the Stmt::dumpPretty/Stmt::printPretty methods, which +// pretty print the AST back out to C code. +// +//===----------------------------------------------------------------------===// + +/** + * This file is ripped from llvm 10.0.1 and modified for selective printing + */ + +#include "SelectiveStmtPrinter.h" +#include "SelectiveDeclPrinter.h" +#include "source_utils.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +using namespace clang; + +//===----------------------------------------------------------------------===// +// StmtPrinterFiltering Visitor +//===----------------------------------------------------------------------===// + +namespace { + +class StmtPrinterFiltering : public StmtVisitor { + const std::set &lines; + raw_ostream &OS; + unsigned IndentLevel; + PrinterHelper *Helper; + PrintingPolicy Policy; + std::string NL; + const ASTContext *Context; + + // Overwrite to enable filtering +public: +#define PTR(CLASS) typename std::add_pointer::type +#define DISPATCH(NAME, CLASS) \ + return static_cast(this)->Visit##NAME( \ + static_cast(S)) + + void Visit(PTR(Stmt) S) { + if (!utils::shouldBeSliced(S, Context->getSourceManager(), lines)) { + return; + } + + if (Helper && Helper->handledStmt(S, OS)) { + return; + } + // If we have a binary expr, dispatch to the subcode of the binop. A smart + // optimizer (e.g. LLVM) will fold this comparison into the switch stmt + // below. + if (PTR(BinaryOperator) BinOp = dyn_cast(S)) { + switch (BinOp->getOpcode()) { + case BO_PtrMemD: + DISPATCH(BinPtrMemD, BinaryOperator); + case BO_PtrMemI: + DISPATCH(BinPtrMemI, BinaryOperator); + case BO_Mul: + DISPATCH(BinMul, BinaryOperator); + case BO_Div: + DISPATCH(BinDiv, BinaryOperator); + case BO_Rem: + DISPATCH(BinRem, BinaryOperator); + case BO_Add: + DISPATCH(BinAdd, BinaryOperator); + case BO_Sub: + DISPATCH(BinSub, BinaryOperator); + case BO_Shl: + DISPATCH(BinShl, BinaryOperator); + case BO_Shr: + DISPATCH(BinShr, BinaryOperator); + + case BO_LT: + DISPATCH(BinLT, BinaryOperator); + case BO_GT: + DISPATCH(BinGT, BinaryOperator); + case BO_LE: + DISPATCH(BinLE, BinaryOperator); + case BO_GE: + DISPATCH(BinGE, BinaryOperator); + case BO_EQ: + DISPATCH(BinEQ, BinaryOperator); + case BO_NE: + DISPATCH(BinNE, BinaryOperator); + case BO_Cmp: + DISPATCH(BinCmp, BinaryOperator); + + case BO_And: + DISPATCH(BinAnd, BinaryOperator); + case BO_Xor: + DISPATCH(BinXor, BinaryOperator); + case BO_Or: + DISPATCH(BinOr, BinaryOperator); + case BO_LAnd: + DISPATCH(BinLAnd, BinaryOperator); + case BO_LOr: + DISPATCH(BinLOr, BinaryOperator); + case BO_Assign: + DISPATCH(BinAssign, BinaryOperator); + case BO_MulAssign: + DISPATCH(BinMulAssign, CompoundAssignOperator); + case BO_DivAssign: + DISPATCH(BinDivAssign, CompoundAssignOperator); + case BO_RemAssign: + DISPATCH(BinRemAssign, CompoundAssignOperator); + case BO_AddAssign: + DISPATCH(BinAddAssign, CompoundAssignOperator); + case BO_SubAssign: + DISPATCH(BinSubAssign, CompoundAssignOperator); + case BO_ShlAssign: + DISPATCH(BinShlAssign, CompoundAssignOperator); + case BO_ShrAssign: + DISPATCH(BinShrAssign, CompoundAssignOperator); + case BO_AndAssign: + DISPATCH(BinAndAssign, CompoundAssignOperator); + case BO_OrAssign: + DISPATCH(BinOrAssign, CompoundAssignOperator); + case BO_XorAssign: + DISPATCH(BinXorAssign, CompoundAssignOperator); + case BO_Comma: + DISPATCH(BinComma, BinaryOperator); + } + } else if (PTR(UnaryOperator) UnOp = dyn_cast(S)) { + switch (UnOp->getOpcode()) { + case UO_PostInc: + DISPATCH(UnaryPostInc, UnaryOperator); + case UO_PostDec: + DISPATCH(UnaryPostDec, UnaryOperator); + case UO_PreInc: + DISPATCH(UnaryPreInc, UnaryOperator); + case UO_PreDec: + DISPATCH(UnaryPreDec, UnaryOperator); + case UO_AddrOf: + DISPATCH(UnaryAddrOf, UnaryOperator); + case UO_Deref: + DISPATCH(UnaryDeref, UnaryOperator); + case UO_Plus: + DISPATCH(UnaryPlus, UnaryOperator); + case UO_Minus: + DISPATCH(UnaryMinus, UnaryOperator); + case UO_Not: + DISPATCH(UnaryNot, UnaryOperator); + case UO_LNot: + DISPATCH(UnaryLNot, UnaryOperator); + case UO_Real: + DISPATCH(UnaryReal, UnaryOperator); + case UO_Imag: + DISPATCH(UnaryImag, UnaryOperator); + case UO_Extension: + DISPATCH(UnaryExtension, UnaryOperator); + case UO_Coawait: + DISPATCH(UnaryCoawait, UnaryOperator); + } + } + + // Top switch stmt: dispatch to VisitFooStmt for each FooStmt. + switch (S->getStmtClass()) { + default: + llvm_unreachable("Unknown stmt kind!"); +#define ABSTRACT_STMT(STMT) +#define STMT(CLASS, PARENT) \ + case Stmt::CLASS##Class: \ + DISPATCH(CLASS, CLASS); +#include "clang/AST/StmtNodes.inc" + } + } + +public: + StmtPrinterFiltering(const std::set &lines, raw_ostream &os, + PrinterHelper *helper, const PrintingPolicy &Policy, + unsigned Indentation = 0, StringRef NL = "\n", + const ASTContext *Context = nullptr) + : lines(lines), OS(os), IndentLevel(Indentation), Helper(helper), + Policy(Policy), NL(NL), Context(Context) {} + + void PrintStmt(Stmt *S, bool required = false) { + PrintStmt(S, Policy.Indentation, required); + } + + void PrintStmt(Stmt *S, int SubIndent, bool required = false) { + bool used = utils::shouldBeSliced(S, Context->getSourceManager(), lines); + if (!used) { + if (required) { + OS << "{}"; + } + return; + } + IndentLevel += SubIndent; + if (S && isa(S)) { + // If this is an expr used in a stmt context, indent and newline it. + Indent(); + Visit(S); + OS << ";" << NL; + } else if (S) { + Visit(S); + } else { + Indent() << "<<>>" << NL; + } + IndentLevel -= SubIndent; + } + + void PrintInitStmt(Stmt *S, unsigned PrefixWidth) { + // FIXME: Cope better with odd prefix widths. + IndentLevel += (PrefixWidth + 1) / 2; + if (auto *DS = dyn_cast(S)) + PrintRawDeclStmt(DS); + else + PrintExpr(cast(S)); + OS << "; "; + IndentLevel -= (PrefixWidth + 1) / 2; + } + + void PrintControlledStmt(Stmt *S) { + if (auto *CS = dyn_cast(S)) { + OS << " "; + PrintRawCompoundStmt(CS, true); + OS << NL; + } else { + OS << NL; + PrintStmt(S, true); + } + } + + void PrintRawCompoundStmt(CompoundStmt *S, bool required = false); + void PrintRawDecl(Decl *D); + void PrintRawDeclStmt(const DeclStmt *S); + void PrintRawIfStmt(IfStmt *If); + void PrintRawCXXCatchStmt(CXXCatchStmt *Catch); + void PrintCallArgs(CallExpr *E); + void PrintRawSEHExceptHandler(SEHExceptStmt *S); + void PrintRawSEHFinallyStmt(SEHFinallyStmt *S); + void PrintOMPExecutableDirective(OMPExecutableDirective *S, + bool ForceNoStmt = false); + + void PrintExpr(Expr *E) { + if (E) + Visit(E); + else + OS << ""; + } + + raw_ostream &Indent(int Delta = 0) { + for (int i = 0, e = IndentLevel + Delta; i < e; ++i) + OS << " "; + return OS; + } + + // void Visit(Stmt *S) { + // if (Helper && Helper->handledStmt(S, OS)) + // return; + // else + // StmtVisitor::Visit(S); + // } + + void VisitStmt(Stmt *Node) LLVM_ATTRIBUTE_UNUSED { + Indent() << "<>" << NL; + } + + void VisitExpr(Expr *Node) LLVM_ATTRIBUTE_UNUSED { + OS << "<>"; + } + + void VisitCXXNamedCastExpr(CXXNamedCastExpr *Node); + +#define ABSTRACT_STMT(CLASS) +#define STMT(CLASS, PARENT) void Visit##CLASS(CLASS *Node); +#include "clang/AST/StmtNodes.inc" +}; + +} // namespace + +//===----------------------------------------------------------------------===// +// Stmt printing methods. +//===----------------------------------------------------------------------===// + +/// PrintRawCompoundStmt - Print a compound stmt without indenting the {, and +/// with no newline after the }. +void StmtPrinterFiltering::PrintRawCompoundStmt(CompoundStmt *Node, + bool required) { + if (required && + !utils::shouldBeSliced(Node, Context->getSourceManager(), lines)) { + OS << "{}"; + return; + } + OS << "{" << NL; + for (auto *I : Node->body()) + PrintStmt(I); + + Indent() << "}"; +} + +void StmtPrinterFiltering::PrintRawDecl(Decl *D) { + selective_printer::print(D, lines, OS, Policy, IndentLevel); +} + +void StmtPrinterFiltering::PrintRawDeclStmt(const DeclStmt *S) { + SmallVector Decls(S->decls()); + selective_printer::printGroup(Decls.data(), Decls.size(), lines, OS, Policy, + IndentLevel); +} + +void StmtPrinterFiltering::VisitNullStmt(NullStmt *Node) { + Indent() << ";" << NL; +} + +void StmtPrinterFiltering::VisitDeclStmt(DeclStmt *Node) { + Indent(); + PrintRawDeclStmt(Node); + OS << ";" << NL; +} + +void StmtPrinterFiltering::VisitCompoundStmt(CompoundStmt *Node) { + Indent(); + PrintRawCompoundStmt(Node); + OS << "" << NL; +} + +void StmtPrinterFiltering::VisitCaseStmt(CaseStmt *Node) { + Indent(-1) << "case "; + // Node->dump(); + // Node->getLHS()->dump(); + PrintExpr(Node->getLHS()); + + if (Node->getRHS()) { + OS << " ... "; + PrintExpr(Node->getRHS()); + } + OS << ":" << NL; + + PrintStmt(Node->getSubStmt(), 0); +} + +void StmtPrinterFiltering::VisitDefaultStmt(DefaultStmt *Node) { + Indent(-1) << "default:" << NL; + PrintStmt(Node->getSubStmt(), 0); +} + +void StmtPrinterFiltering::VisitLabelStmt(LabelStmt *Node) { + Indent(-1) << Node->getName() << ":" << NL; + PrintStmt(Node->getSubStmt(), 0); +} + +void StmtPrinterFiltering::VisitAttributedStmt(AttributedStmt *Node) { + for (const auto *Attr : Node->getAttrs()) { + // TODO Jr + Attr->printPretty(OS, Policy); + } + + PrintStmt(Node->getSubStmt(), 0); +} + +void StmtPrinterFiltering::PrintRawIfStmt(IfStmt *If) { + OS << "if ("; + if (If->getInit()) + PrintInitStmt(If->getInit(), 4); + if (const DeclStmt *DS = If->getConditionVariableDeclStmt()) + PrintRawDeclStmt(DS); + else + PrintExpr(If->getCond()); + OS << ')'; + + if (auto *CS = dyn_cast(If->getThen())) { + OS << ' '; + PrintRawCompoundStmt(CS); + OS << (If->getElse() ? " " : NL); + } else { + OS << NL; + PrintStmt(If->getThen(), true); + if (If->getElse()) + Indent(); + } + + if (Stmt *Else = If->getElse()) { + OS << "else"; + + if (auto *CS = dyn_cast(Else)) { + OS << ' '; + PrintRawCompoundStmt(CS); + OS << NL; + } else if (auto *ElseIf = dyn_cast(Else)) { + OS << ' '; + PrintRawIfStmt(ElseIf); + } else { + OS << NL; + PrintStmt(If->getElse(), true); + } + } +} + +void StmtPrinterFiltering::VisitIfStmt(IfStmt *If) { + Indent(); + PrintRawIfStmt(If); +} + +void StmtPrinterFiltering::VisitSwitchStmt(SwitchStmt *Node) { + Indent() << "switch ("; + if (Node->getInit()) + PrintInitStmt(Node->getInit(), 8); + if (const DeclStmt *DS = Node->getConditionVariableDeclStmt()) + PrintRawDeclStmt(DS); + else + PrintExpr(Node->getCond()); + OS << ")"; + PrintControlledStmt(Node->getBody()); +} + +void StmtPrinterFiltering::VisitWhileStmt(WhileStmt *Node) { + Indent() << "while ("; + if (const DeclStmt *DS = Node->getConditionVariableDeclStmt()) + PrintRawDeclStmt(DS); + else + PrintExpr(Node->getCond()); + OS << ")" << NL; + PrintStmt(Node->getBody(), true); +} + +void StmtPrinterFiltering::VisitDoStmt(DoStmt *Node) { + Indent() << "do "; + if (auto *CS = dyn_cast(Node->getBody())) { + PrintRawCompoundStmt(CS); + OS << " "; + } else { + OS << NL; + PrintStmt(Node->getBody(), true); + Indent(); + } + + OS << "while ("; + PrintExpr(Node->getCond()); + OS << ");" << NL; +} + +void StmtPrinterFiltering::VisitForStmt(ForStmt *Node) { + Indent() << "for ("; + if (Node->getInit()) + PrintInitStmt(Node->getInit(), 5); + else + OS << (Node->getCond() ? "; " : ";"); + if (Node->getCond()) + PrintExpr(Node->getCond()); + OS << ";"; + if (Node->getInc()) { + OS << " "; + PrintExpr(Node->getInc()); + } + OS << ")"; + PrintControlledStmt(Node->getBody()); +} + +void StmtPrinterFiltering::VisitObjCForCollectionStmt( + ObjCForCollectionStmt *Node) { + Indent() << "for ("; + if (auto *DS = dyn_cast(Node->getElement())) + PrintRawDeclStmt(DS); + else + PrintExpr(cast(Node->getElement())); + OS << " in "; + PrintExpr(Node->getCollection()); + OS << ")"; + PrintControlledStmt(Node->getBody()); +} + +void StmtPrinterFiltering::VisitCXXForRangeStmt(CXXForRangeStmt *Node) { + Indent() << "for ("; + if (Node->getInit()) + PrintInitStmt(Node->getInit(), 5); + PrintingPolicy SubPolicy(Policy); + SubPolicy.SuppressInitializers = true; + selective_printer::print(Node->getLoopVariable(), lines, OS, SubPolicy, + IndentLevel); + OS << " : "; + PrintExpr(Node->getRangeInit()); + OS << ")"; + PrintControlledStmt(Node->getBody()); +} + +void StmtPrinterFiltering::VisitMSDependentExistsStmt( + MSDependentExistsStmt *Node) { + Indent(); + if (Node->isIfExists()) + OS << "__if_exists ("; + else + OS << "__if_not_exists ("; + + if (NestedNameSpecifier *Qualifier = + Node->getQualifierLoc().getNestedNameSpecifier()) + Qualifier->print(OS, Policy); + + OS << Node->getNameInfo() << ") "; + + PrintRawCompoundStmt(Node->getSubStmt()); +} + +void StmtPrinterFiltering::VisitGotoStmt(GotoStmt *Node) { + Indent() << "goto " << Node->getLabel()->getName() << ";"; + if (Policy.IncludeNewlines) + OS << NL; +} + +void StmtPrinterFiltering::VisitIndirectGotoStmt(IndirectGotoStmt *Node) { + Indent() << "goto *"; + PrintExpr(Node->getTarget()); + OS << ";"; + if (Policy.IncludeNewlines) + OS << NL; +} + +void StmtPrinterFiltering::VisitContinueStmt(ContinueStmt *Node) { + Indent() << "continue;"; + if (Policy.IncludeNewlines) + OS << NL; +} + +void StmtPrinterFiltering::VisitBreakStmt(BreakStmt *Node) { + Indent() << "break;"; + if (Policy.IncludeNewlines) + OS << NL; +} + +void StmtPrinterFiltering::VisitReturnStmt(ReturnStmt *Node) { + Indent() << "return"; + if (Node->getRetValue()) { + OS << " "; + PrintExpr(Node->getRetValue()); + } + OS << ";"; + if (Policy.IncludeNewlines) + OS << NL; +} + +void StmtPrinterFiltering::VisitGCCAsmStmt(GCCAsmStmt *Node) { + Indent() << "asm "; + + if (Node->isVolatile()) + OS << "volatile "; + + if (Node->isAsmGoto()) + OS << "goto "; + + OS << "("; + VisitStringLiteral(Node->getAsmString()); + + // Outputs + if (Node->getNumOutputs() != 0 || Node->getNumInputs() != 0 || + Node->getNumClobbers() != 0 || Node->getNumLabels() != 0) + OS << " : "; + + for (unsigned i = 0, e = Node->getNumOutputs(); i != e; ++i) { + if (i != 0) + OS << ", "; + + if (!Node->getOutputName(i).empty()) { + OS << '['; + OS << Node->getOutputName(i); + OS << "] "; + } + + VisitStringLiteral(Node->getOutputConstraintLiteral(i)); + OS << " ("; + Visit(Node->getOutputExpr(i)); + OS << ")"; + } + + // Inputs + if (Node->getNumInputs() != 0 || Node->getNumClobbers() != 0 || + Node->getNumLabels() != 0) + OS << " : "; + + for (unsigned i = 0, e = Node->getNumInputs(); i != e; ++i) { + if (i != 0) + OS << ", "; + + if (!Node->getInputName(i).empty()) { + OS << '['; + OS << Node->getInputName(i); + OS << "] "; + } + + VisitStringLiteral(Node->getInputConstraintLiteral(i)); + OS << " ("; + Visit(Node->getInputExpr(i)); + OS << ")"; + } + + // Clobbers + if (Node->getNumClobbers() != 0 || Node->getNumLabels()) + OS << " : "; + + for (unsigned i = 0, e = Node->getNumClobbers(); i != e; ++i) { + if (i != 0) + OS << ", "; + + VisitStringLiteral(Node->getClobberStringLiteral(i)); + } + + // Labels + if (Node->getNumLabels() != 0) + OS << " : "; + + for (unsigned i = 0, e = Node->getNumLabels(); i != e; ++i) { + if (i != 0) + OS << ", "; + OS << Node->getLabelName(i); + } + + OS << ");"; + if (Policy.IncludeNewlines) + OS << NL; +} + +void StmtPrinterFiltering::VisitMSAsmStmt(MSAsmStmt *Node) { + // FIXME: Implement MS style inline asm statement printer. + Indent() << "__asm "; + if (Node->hasBraces()) + OS << "{" << NL; + OS << Node->getAsmString() << NL; + if (Node->hasBraces()) + Indent() << "}" << NL; +} + +void StmtPrinterFiltering::VisitCapturedStmt(CapturedStmt *Node) { + PrintStmt(Node->getCapturedDecl()->getBody()); +} + +void StmtPrinterFiltering::VisitObjCAtTryStmt(ObjCAtTryStmt *Node) { + Indent() << "@try"; + if (auto *TS = dyn_cast(Node->getTryBody())) { + PrintRawCompoundStmt(TS); + OS << NL; + } + + for (unsigned I = 0, N = Node->getNumCatchStmts(); I != N; ++I) { + ObjCAtCatchStmt *catchStmt = Node->getCatchStmt(I); + Indent() << "@catch("; + if (catchStmt->getCatchParamDecl()) { + if (Decl *DS = catchStmt->getCatchParamDecl()) + PrintRawDecl(DS); + } + OS << ")"; + if (auto *CS = dyn_cast(catchStmt->getCatchBody())) { + PrintRawCompoundStmt(CS); + OS << NL; + } + } + + if (auto *FS = static_cast(Node->getFinallyStmt())) { + Indent() << "@finally"; + PrintRawCompoundStmt(dyn_cast(FS->getFinallyBody())); + OS << NL; + } +} + +void StmtPrinterFiltering::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *Node) {} + +void StmtPrinterFiltering::VisitObjCAtCatchStmt(ObjCAtCatchStmt *Node) { + Indent() << "@catch (...) { /* todo */ } " << NL; +} + +void StmtPrinterFiltering::VisitObjCAtThrowStmt(ObjCAtThrowStmt *Node) { + Indent() << "@throw"; + if (Node->getThrowExpr()) { + OS << " "; + PrintExpr(Node->getThrowExpr()); + } + OS << ";" << NL; +} + +void StmtPrinterFiltering::VisitObjCAvailabilityCheckExpr( + ObjCAvailabilityCheckExpr *Node) { + OS << "@available(...)"; +} + +void StmtPrinterFiltering::VisitObjCAtSynchronizedStmt( + ObjCAtSynchronizedStmt *Node) { + Indent() << "@synchronized ("; + PrintExpr(Node->getSynchExpr()); + OS << ")"; + PrintRawCompoundStmt(Node->getSynchBody()); + OS << NL; +} + +void StmtPrinterFiltering::VisitObjCAutoreleasePoolStmt( + ObjCAutoreleasePoolStmt *Node) { + Indent() << "@autoreleasepool"; + PrintRawCompoundStmt(dyn_cast(Node->getSubStmt())); + OS << NL; +} + +void StmtPrinterFiltering::PrintRawCXXCatchStmt(CXXCatchStmt *Node) { + OS << "catch ("; + if (Decl *ExDecl = Node->getExceptionDecl()) + PrintRawDecl(ExDecl); + else + OS << "..."; + OS << ") "; + PrintRawCompoundStmt(cast(Node->getHandlerBlock())); +} + +void StmtPrinterFiltering::VisitCXXCatchStmt(CXXCatchStmt *Node) { + Indent(); + PrintRawCXXCatchStmt(Node); + OS << NL; +} + +void StmtPrinterFiltering::VisitCXXTryStmt(CXXTryStmt *Node) { + Indent() << "try "; + PrintRawCompoundStmt(Node->getTryBlock()); + for (unsigned i = 0, e = Node->getNumHandlers(); i < e; ++i) { + OS << " "; + PrintRawCXXCatchStmt(Node->getHandler(i)); + } + OS << NL; +} + +void StmtPrinterFiltering::VisitSEHTryStmt(SEHTryStmt *Node) { + Indent() << (Node->getIsCXXTry() ? "try " : "__try "); + PrintRawCompoundStmt(Node->getTryBlock()); + SEHExceptStmt *E = Node->getExceptHandler(); + SEHFinallyStmt *F = Node->getFinallyHandler(); + if (E) + PrintRawSEHExceptHandler(E); + else { + assert(F && "Must have a finally block..."); + PrintRawSEHFinallyStmt(F); + } + OS << NL; +} + +void StmtPrinterFiltering::PrintRawSEHFinallyStmt(SEHFinallyStmt *Node) { + OS << "__finally "; + PrintRawCompoundStmt(Node->getBlock()); + OS << NL; +} + +void StmtPrinterFiltering::PrintRawSEHExceptHandler(SEHExceptStmt *Node) { + OS << "__except ("; + VisitExpr(Node->getFilterExpr()); + OS << ")" << NL; + PrintRawCompoundStmt(Node->getBlock()); + OS << NL; +} + +void StmtPrinterFiltering::VisitSEHExceptStmt(SEHExceptStmt *Node) { + Indent(); + PrintRawSEHExceptHandler(Node); + OS << NL; +} + +void StmtPrinterFiltering::VisitSEHFinallyStmt(SEHFinallyStmt *Node) { + Indent(); + PrintRawSEHFinallyStmt(Node); + OS << NL; +} + +void StmtPrinterFiltering::VisitSEHLeaveStmt(SEHLeaveStmt *Node) { + Indent() << "__leave;"; + if (Policy.IncludeNewlines) + OS << NL; +} + +//===----------------------------------------------------------------------===// +// OpenMP directives printing methods +//===----------------------------------------------------------------------===// + +void StmtPrinterFiltering::PrintOMPExecutableDirective( + OMPExecutableDirective *S, bool ForceNoStmt) { + OMPClausePrinter Printer(OS, Policy); + ArrayRef Clauses = S->clauses(); + for (auto *Clause : Clauses) + if (Clause && !Clause->isImplicit()) { + OS << ' '; + Printer.Visit(Clause); + } + OS << NL; + if (!ForceNoStmt && S->hasAssociatedStmt()) + PrintStmt(S->getInnermostCapturedStmt()->getCapturedStmt()); +} + +void StmtPrinterFiltering::VisitOMPParallelDirective( + OMPParallelDirective *Node) { + Indent() << "#pragma omp parallel"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPSimdDirective(OMPSimdDirective *Node) { + Indent() << "#pragma omp simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPForDirective(OMPForDirective *Node) { + Indent() << "#pragma omp for"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPForSimdDirective(OMPForSimdDirective *Node) { + Indent() << "#pragma omp for simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPSectionsDirective( + OMPSectionsDirective *Node) { + Indent() << "#pragma omp sections"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPSectionDirective(OMPSectionDirective *Node) { + Indent() << "#pragma omp section"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPSingleDirective(OMPSingleDirective *Node) { + Indent() << "#pragma omp single"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPMasterDirective(OMPMasterDirective *Node) { + Indent() << "#pragma omp master"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPCriticalDirective( + OMPCriticalDirective *Node) { + Indent() << "#pragma omp critical"; + if (Node->getDirectiveName().getName()) { + OS << " ("; + Node->getDirectiveName().printName(OS, Policy); + OS << ")"; + } + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPParallelForDirective( + OMPParallelForDirective *Node) { + Indent() << "#pragma omp parallel for"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPParallelForSimdDirective( + OMPParallelForSimdDirective *Node) { + Indent() << "#pragma omp parallel for simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPParallelMasterDirective( + OMPParallelMasterDirective *Node) { + Indent() << "#pragma omp parallel master"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPParallelSectionsDirective( + OMPParallelSectionsDirective *Node) { + Indent() << "#pragma omp parallel sections"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTaskDirective(OMPTaskDirective *Node) { + Indent() << "#pragma omp task"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTaskyieldDirective( + OMPTaskyieldDirective *Node) { + Indent() << "#pragma omp taskyield"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPBarrierDirective(OMPBarrierDirective *Node) { + Indent() << "#pragma omp barrier"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTaskwaitDirective( + OMPTaskwaitDirective *Node) { + Indent() << "#pragma omp taskwait"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTaskgroupDirective( + OMPTaskgroupDirective *Node) { + Indent() << "#pragma omp taskgroup"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPFlushDirective(OMPFlushDirective *Node) { + Indent() << "#pragma omp flush"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPOrderedDirective(OMPOrderedDirective *Node) { + Indent() << "#pragma omp ordered"; + PrintOMPExecutableDirective(Node, Node->hasClausesOfKind()); +} + +void StmtPrinterFiltering::VisitOMPAtomicDirective(OMPAtomicDirective *Node) { + Indent() << "#pragma omp atomic"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTargetDirective(OMPTargetDirective *Node) { + Indent() << "#pragma omp target"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTargetDataDirective( + OMPTargetDataDirective *Node) { + Indent() << "#pragma omp target data"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTargetEnterDataDirective( + OMPTargetEnterDataDirective *Node) { + Indent() << "#pragma omp target enter data"; + PrintOMPExecutableDirective(Node, /*ForceNoStmt=*/true); +} + +void StmtPrinterFiltering::VisitOMPTargetExitDataDirective( + OMPTargetExitDataDirective *Node) { + Indent() << "#pragma omp target exit data"; + PrintOMPExecutableDirective(Node, /*ForceNoStmt=*/true); +} + +void StmtPrinterFiltering::VisitOMPTargetParallelDirective( + OMPTargetParallelDirective *Node) { + Indent() << "#pragma omp target parallel"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTargetParallelForDirective( + OMPTargetParallelForDirective *Node) { + Indent() << "#pragma omp target parallel for"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTeamsDirective(OMPTeamsDirective *Node) { + Indent() << "#pragma omp teams"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPCancellationPointDirective( + OMPCancellationPointDirective *Node) { + Indent() << "#pragma omp cancellation point " + << getOpenMPDirectiveName(Node->getCancelRegion()); + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPCancelDirective(OMPCancelDirective *Node) { + Indent() << "#pragma omp cancel " + << getOpenMPDirectiveName(Node->getCancelRegion()); + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTaskLoopDirective( + OMPTaskLoopDirective *Node) { + Indent() << "#pragma omp taskloop"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTaskLoopSimdDirective( + OMPTaskLoopSimdDirective *Node) { + Indent() << "#pragma omp taskloop simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPMasterTaskLoopDirective( + OMPMasterTaskLoopDirective *Node) { + Indent() << "#pragma omp master taskloop"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPMasterTaskLoopSimdDirective( + OMPMasterTaskLoopSimdDirective *Node) { + Indent() << "#pragma omp master taskloop simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPParallelMasterTaskLoopDirective( + OMPParallelMasterTaskLoopDirective *Node) { + Indent() << "#pragma omp parallel master taskloop"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPParallelMasterTaskLoopSimdDirective( + OMPParallelMasterTaskLoopSimdDirective *Node) { + Indent() << "#pragma omp parallel master taskloop simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPDistributeDirective( + OMPDistributeDirective *Node) { + Indent() << "#pragma omp distribute"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTargetUpdateDirective( + OMPTargetUpdateDirective *Node) { + Indent() << "#pragma omp target update"; + PrintOMPExecutableDirective(Node, /*ForceNoStmt=*/true); +} + +void StmtPrinterFiltering::VisitOMPDistributeParallelForDirective( + OMPDistributeParallelForDirective *Node) { + Indent() << "#pragma omp distribute parallel for"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPDistributeParallelForSimdDirective( + OMPDistributeParallelForSimdDirective *Node) { + Indent() << "#pragma omp distribute parallel for simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPDistributeSimdDirective( + OMPDistributeSimdDirective *Node) { + Indent() << "#pragma omp distribute simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTargetParallelForSimdDirective( + OMPTargetParallelForSimdDirective *Node) { + Indent() << "#pragma omp target parallel for simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTargetSimdDirective( + OMPTargetSimdDirective *Node) { + Indent() << "#pragma omp target simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTeamsDistributeDirective( + OMPTeamsDistributeDirective *Node) { + Indent() << "#pragma omp teams distribute"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTeamsDistributeSimdDirective( + OMPTeamsDistributeSimdDirective *Node) { + Indent() << "#pragma omp teams distribute simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTeamsDistributeParallelForSimdDirective( + OMPTeamsDistributeParallelForSimdDirective *Node) { + Indent() << "#pragma omp teams distribute parallel for simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTeamsDistributeParallelForDirective( + OMPTeamsDistributeParallelForDirective *Node) { + Indent() << "#pragma omp teams distribute parallel for"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTargetTeamsDirective( + OMPTargetTeamsDirective *Node) { + Indent() << "#pragma omp target teams"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTargetTeamsDistributeDirective( + OMPTargetTeamsDistributeDirective *Node) { + Indent() << "#pragma omp target teams distribute"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTargetTeamsDistributeParallelForDirective( + OMPTargetTeamsDistributeParallelForDirective *Node) { + Indent() << "#pragma omp target teams distribute parallel for"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering:: + VisitOMPTargetTeamsDistributeParallelForSimdDirective( + OMPTargetTeamsDistributeParallelForSimdDirective *Node) { + Indent() << "#pragma omp target teams distribute parallel for simd"; + PrintOMPExecutableDirective(Node); +} + +void StmtPrinterFiltering::VisitOMPTargetTeamsDistributeSimdDirective( + OMPTargetTeamsDistributeSimdDirective *Node) { + Indent() << "#pragma omp target teams distribute simd"; + PrintOMPExecutableDirective(Node); +} + +//===----------------------------------------------------------------------===// +// Expr printing methods. +//===----------------------------------------------------------------------===// + +void StmtPrinterFiltering::VisitSourceLocExpr(SourceLocExpr *Node) { + OS << Node->getBuiltinStr() << "()"; +} + +void StmtPrinterFiltering::VisitConstantExpr(ConstantExpr *Node) { + PrintExpr(Node->getSubExpr()); +} + +void StmtPrinterFiltering::VisitDeclRefExpr(DeclRefExpr *Node) { + if (const auto *OCED = dyn_cast(Node->getDecl())) { + selective_printer::printPretty(OCED->getInit()->IgnoreImpCasts(), lines, OS, + nullptr, Policy, Context); + return; + } + if (NestedNameSpecifier *Qualifier = Node->getQualifier()) + Qualifier->print(OS, Policy); + if (Node->hasTemplateKeyword()) + OS << "template "; + OS << Node->getNameInfo(); + if (Node->hasExplicitTemplateArgs()) + printTemplateArgumentList(OS, Node->template_arguments(), Policy); +} + +void StmtPrinterFiltering::VisitDependentScopeDeclRefExpr( + DependentScopeDeclRefExpr *Node) { + if (NestedNameSpecifier *Qualifier = Node->getQualifier()) + Qualifier->print(OS, Policy); + if (Node->hasTemplateKeyword()) + OS << "template "; + OS << Node->getNameInfo(); + if (Node->hasExplicitTemplateArgs()) + printTemplateArgumentList(OS, Node->template_arguments(), Policy); +} + +void StmtPrinterFiltering::VisitUnresolvedLookupExpr( + UnresolvedLookupExpr *Node) { + if (Node->getQualifier()) + Node->getQualifier()->print(OS, Policy); + if (Node->hasTemplateKeyword()) + OS << "template "; + OS << Node->getNameInfo(); + if (Node->hasExplicitTemplateArgs()) + printTemplateArgumentList(OS, Node->template_arguments(), Policy); +} + +// ODR rename +static bool isImplicitSelfCopy(const Expr *E) { + if (const auto *DRE = dyn_cast(E)) { + if (const auto *PD = dyn_cast(DRE->getDecl())) { + if (PD->getParameterKind() == ImplicitParamDecl::ObjCSelf && + DRE->getBeginLoc().isInvalid()) + return true; + } + } + return false; +} + +void StmtPrinterFiltering::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) { + if (Node->getBase()) { + if (!Policy.SuppressImplicitBase || + !isImplicitSelfCopy(Node->getBase()->IgnoreImpCasts())) { + PrintExpr(Node->getBase()); + OS << (Node->isArrow() ? "->" : "."); + } + } + OS << *Node->getDecl(); +} + +void StmtPrinterFiltering::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *Node) { + if (Node->isSuperReceiver()) + OS << "super."; + else if (Node->isObjectReceiver() && Node->getBase()) { + PrintExpr(Node->getBase()); + OS << "."; + } else if (Node->isClassReceiver() && Node->getClassReceiver()) { + OS << Node->getClassReceiver()->getName() << "."; + } + + if (Node->isImplicitProperty()) { + if (const auto *Getter = Node->getImplicitPropertyGetter()) + Getter->getSelector().print(OS); + else + OS << SelectorTable::getPropertyNameFromSetterSelector( + Node->getImplicitPropertySetter()->getSelector()); + } else + OS << Node->getExplicitProperty()->getName(); +} + +void StmtPrinterFiltering::VisitObjCSubscriptRefExpr( + ObjCSubscriptRefExpr *Node) { + PrintExpr(Node->getBaseExpr()); + OS << "["; + PrintExpr(Node->getKeyExpr()); + OS << "]"; +} + +void StmtPrinterFiltering::VisitPredefinedExpr(PredefinedExpr *Node) { + OS << PredefinedExpr::getIdentKindName(Node->getIdentKind()); +} + +void StmtPrinterFiltering::VisitCharacterLiteral(CharacterLiteral *Node) { + unsigned value = Node->getValue(); + + switch (Node->getKind()) { + case CharacterLiteral::Ascii: + break; // no prefix. + case CharacterLiteral::Wide: + OS << 'L'; + break; + case CharacterLiteral::UTF8: + OS << "u8"; + break; + case CharacterLiteral::UTF16: + OS << 'u'; + break; + case CharacterLiteral::UTF32: + OS << 'U'; + break; + } + + switch (value) { + case '\\': + OS << "'\\\\'"; + break; + case '\'': + OS << "'\\''"; + break; + case '\a': + // TODO: K&R: the meaning of '\\a' is different in traditional C + OS << "'\\a'"; + break; + case '\b': + OS << "'\\b'"; + break; + // Nonstandard escape sequence. + /*case '\e': + OS << "'\\e'"; + break;*/ + case '\f': + OS << "'\\f'"; + break; + case '\n': + OS << "'\\n'"; + break; + case '\r': + OS << "'\\r'"; + break; + case '\t': + OS << "'\\t'"; + break; + case '\v': + OS << "'\\v'"; + break; + default: + // A character literal might be sign-extended, which + // would result in an invalid \U escape sequence. + // FIXME: multicharacter literals such as '\xFF\xFF\xFF\xFF' + // are not correctly handled. + if ((value & ~0xFFu) == ~0xFFu && + Node->getKind() == CharacterLiteral::Ascii) + value &= 0xFFu; + if (value < 256 && isPrintable((unsigned char)value)) + OS << "'" << (char)value << "'"; + else if (value < 256) + OS << "'\\x" << llvm::format("%02x", value) << "'"; + else if (value <= 0xFFFF) + OS << "'\\u" << llvm::format("%04x", value) << "'"; + else + OS << "'\\U" << llvm::format("%08x", value) << "'"; + } +} + +/// Prints the given expression using the original source text. Returns true on +/// success, false otherwise. +// Renamed to prevent ODR violation +static bool printExprAsWrittenCopy(raw_ostream &OS, Expr *E, + const ASTContext *Context) { + if (!Context) + return false; + bool Invalid = false; + StringRef Source = Lexer::getSourceText( + CharSourceRange::getTokenRange(E->getSourceRange()), + Context->getSourceManager(), Context->getLangOpts(), &Invalid); + if (!Invalid) { + OS << Source; + return true; + } + return false; +} + +void StmtPrinterFiltering::VisitIntegerLiteral(IntegerLiteral *Node) { + if (Policy.ConstantsAsWritten && printExprAsWrittenCopy(OS, Node, Context)) + return; + bool isSigned = Node->getType()->isSignedIntegerType(); + OS << Node->getValue().toString(10, isSigned); + + // Emit suffixes. Integer literals are always a builtin integer type. + switch (Node->getType()->castAs()->getKind()) { + default: + llvm_unreachable("Unexpected type for integer literal!"); + case BuiltinType::Char_S: + case BuiltinType::Char_U: + OS << "i8"; + break; + case BuiltinType::UChar: + OS << "Ui8"; + break; + case BuiltinType::Short: + OS << "i16"; + break; + case BuiltinType::UShort: + OS << "Ui16"; + break; + case BuiltinType::Int: + break; // no suffix. + case BuiltinType::UInt: + OS << 'U'; + break; + case BuiltinType::Long: + OS << 'L'; + break; + case BuiltinType::ULong: + OS << "UL"; + break; + case BuiltinType::LongLong: + OS << "LL"; + break; + case BuiltinType::ULongLong: + OS << "ULL"; + break; + } +} + +void StmtPrinterFiltering::VisitFixedPointLiteral(FixedPointLiteral *Node) { + if (Policy.ConstantsAsWritten && printExprAsWrittenCopy(OS, Node, Context)) + return; + OS << Node->getValueAsString(/*Radix=*/10); + + switch (Node->getType()->castAs()->getKind()) { + default: + llvm_unreachable("Unexpected type for fixed point literal!"); + case BuiltinType::ShortFract: + OS << "hr"; + break; + case BuiltinType::ShortAccum: + OS << "hk"; + break; + case BuiltinType::UShortFract: + OS << "uhr"; + break; + case BuiltinType::UShortAccum: + OS << "uhk"; + break; + case BuiltinType::Fract: + OS << "r"; + break; + case BuiltinType::Accum: + OS << "k"; + break; + case BuiltinType::UFract: + OS << "ur"; + break; + case BuiltinType::UAccum: + OS << "uk"; + break; + case BuiltinType::LongFract: + OS << "lr"; + break; + case BuiltinType::LongAccum: + OS << "lk"; + break; + case BuiltinType::ULongFract: + OS << "ulr"; + break; + case BuiltinType::ULongAccum: + OS << "ulk"; + break; + } +} + +// Renamed to prevent ODR violation +static void PrintFloatingLiteralCopy(raw_ostream &OS, FloatingLiteral *Node, + bool PrintSuffix) { + SmallString<16> Str; + Node->getValue().toString(Str); + OS << Str; + if (Str.find_first_not_of("-0123456789") == StringRef::npos) + OS << '.'; // Trailing dot in order to separate from ints. + + if (!PrintSuffix) + return; + + // Emit suffixes. Float literals are always a builtin float type. + switch (Node->getType()->castAs()->getKind()) { + default: + llvm_unreachable("Unexpected type for float literal!"); + case BuiltinType::Half: + break; // FIXME: suffix? + case BuiltinType::Double: + break; // no suffix. + case BuiltinType::Float16: + OS << "F16"; + break; + case BuiltinType::Float: + OS << 'F'; + break; + case BuiltinType::LongDouble: + OS << 'L'; + break; + case BuiltinType::Float128: + OS << 'Q'; + break; + } +} + +void StmtPrinterFiltering::VisitFloatingLiteral(FloatingLiteral *Node) { + if (Policy.ConstantsAsWritten && printExprAsWrittenCopy(OS, Node, Context)) + return; + PrintFloatingLiteralCopy(OS, Node, /*PrintSuffix=*/true); +} + +void StmtPrinterFiltering::VisitImaginaryLiteral(ImaginaryLiteral *Node) { + PrintExpr(Node->getSubExpr()); + OS << "i"; +} + +void StmtPrinterFiltering::VisitStringLiteral(StringLiteral *Str) { + Str->outputString(OS); +} + +void StmtPrinterFiltering::VisitParenExpr(ParenExpr *Node) { + OS << "("; + PrintExpr(Node->getSubExpr()); + OS << ")"; +} + +void StmtPrinterFiltering::VisitUnaryOperator(UnaryOperator *Node) { + if (!Node->isPostfix()) { + OS << UnaryOperator::getOpcodeStr(Node->getOpcode()); + + // Print a space if this is an "identifier operator" like __real, or if + // it might be concatenated incorrectly like '+'. + switch (Node->getOpcode()) { + default: + break; + case UO_Real: + case UO_Imag: + case UO_Extension: + OS << ' '; + break; + case UO_Plus: + case UO_Minus: + if (isa(Node->getSubExpr())) + OS << ' '; + break; + } + } + PrintExpr(Node->getSubExpr()); + + if (Node->isPostfix()) + OS << UnaryOperator::getOpcodeStr(Node->getOpcode()); +} + +void StmtPrinterFiltering::VisitOffsetOfExpr(OffsetOfExpr *Node) { + OS << "__builtin_offsetof("; + Node->getTypeSourceInfo()->getType().print(OS, Policy); + OS << ", "; + bool PrintedSomething = false; + for (unsigned i = 0, n = Node->getNumComponents(); i < n; ++i) { + OffsetOfNode ON = Node->getComponent(i); + if (ON.getKind() == OffsetOfNode::Array) { + // Array node + OS << "["; + PrintExpr(Node->getIndexExpr(ON.getArrayExprIndex())); + OS << "]"; + PrintedSomething = true; + continue; + } + + // Skip implicit base indirections. + if (ON.getKind() == OffsetOfNode::Base) + continue; + + // Field or identifier node. + IdentifierInfo *Id = ON.getFieldName(); + if (!Id) + continue; + + if (PrintedSomething) + OS << "."; + else + PrintedSomething = true; + OS << Id->getName(); + } + OS << ")"; +} + +void StmtPrinterFiltering::VisitUnaryExprOrTypeTraitExpr( + UnaryExprOrTypeTraitExpr *Node) { + switch (Node->getKind()) { + case UETT_SizeOf: + OS << "sizeof"; + break; + case UETT_AlignOf: + if (Policy.Alignof) + OS << "alignof"; + else if (Policy.UnderscoreAlignof) + OS << "_Alignof"; + else + OS << "__alignof"; + break; + case UETT_PreferredAlignOf: + OS << "__alignof"; + break; + case UETT_VecStep: + OS << "vec_step"; + break; + case UETT_OpenMPRequiredSimdAlign: + OS << "__builtin_omp_required_simd_align"; + break; + } + if (Node->isArgumentType()) { + OS << '('; + Node->getArgumentType().print(OS, Policy); + OS << ')'; + } else { + OS << " "; + PrintExpr(Node->getArgumentExpr()); + } +} + +void StmtPrinterFiltering::VisitGenericSelectionExpr( + GenericSelectionExpr *Node) { + OS << "_Generic("; + PrintExpr(Node->getControllingExpr()); + for (const GenericSelectionExpr::Association Assoc : Node->associations()) { + OS << ", "; + QualType T = Assoc.getType(); + if (T.isNull()) + OS << "default"; + else + T.print(OS, Policy); + OS << ": "; + PrintExpr(Assoc.getAssociationExpr()); + } + OS << ")"; +} + +void StmtPrinterFiltering::VisitArraySubscriptExpr(ArraySubscriptExpr *Node) { + PrintExpr(Node->getLHS()); + OS << "["; + PrintExpr(Node->getRHS()); + OS << "]"; +} + +void StmtPrinterFiltering::VisitOMPArraySectionExpr(OMPArraySectionExpr *Node) { + PrintExpr(Node->getBase()); + OS << "["; + if (Node->getLowerBound()) + PrintExpr(Node->getLowerBound()); + if (Node->getColonLoc().isValid()) { + OS << ":"; + if (Node->getLength()) + PrintExpr(Node->getLength()); + } + OS << "]"; +} + +void StmtPrinterFiltering::PrintCallArgs(CallExpr *Call) { + for (unsigned i = 0, e = Call->getNumArgs(); i != e; ++i) { + if (isa(Call->getArg(i))) { + // Don't print any defaulted arguments + break; + } + + if (i) + OS << ", "; + PrintExpr(Call->getArg(i)); + } +} + +void StmtPrinterFiltering::VisitCallExpr(CallExpr *Call) { + PrintExpr(Call->getCallee()); + OS << "("; + PrintCallArgs(Call); + OS << ")"; +} + +// Renamed to prevent ODR violation +static bool isImplicitThisCopy(const Expr *E) { + if (const auto *TE = dyn_cast(E)) + return TE->isImplicit(); + return false; +} + +void StmtPrinterFiltering::VisitMemberExpr(MemberExpr *Node) { + if (!Policy.SuppressImplicitBase || !isImplicitThisCopy(Node->getBase())) { + PrintExpr(Node->getBase()); + + auto *ParentMember = dyn_cast(Node->getBase()); + FieldDecl *ParentDecl = + ParentMember ? dyn_cast(ParentMember->getMemberDecl()) + : nullptr; + + if (!ParentDecl || !ParentDecl->isAnonymousStructOrUnion()) + OS << (Node->isArrow() ? "->" : "."); + } + + if (auto *FD = dyn_cast(Node->getMemberDecl())) + if (FD->isAnonymousStructOrUnion()) + return; + + if (NestedNameSpecifier *Qualifier = Node->getQualifier()) + Qualifier->print(OS, Policy); + if (Node->hasTemplateKeyword()) + OS << "template "; + OS << Node->getMemberNameInfo(); + if (Node->hasExplicitTemplateArgs()) + printTemplateArgumentList(OS, Node->template_arguments(), Policy); +} + +void StmtPrinterFiltering::VisitObjCIsaExpr(ObjCIsaExpr *Node) { + PrintExpr(Node->getBase()); + OS << (Node->isArrow() ? "->isa" : ".isa"); +} + +void StmtPrinterFiltering::VisitExtVectorElementExpr( + ExtVectorElementExpr *Node) { + PrintExpr(Node->getBase()); + OS << "."; + OS << Node->getAccessor().getName(); +} + +void StmtPrinterFiltering::VisitCStyleCastExpr(CStyleCastExpr *Node) { + OS << '('; + Node->getTypeAsWritten().print(OS, Policy); + OS << ')'; + PrintExpr(Node->getSubExpr()); +} + +void StmtPrinterFiltering::VisitCompoundLiteralExpr(CompoundLiteralExpr *Node) { + OS << '('; + Node->getType().print(OS, Policy); + OS << ')'; + PrintExpr(Node->getInitializer()); +} + +void StmtPrinterFiltering::VisitImplicitCastExpr(ImplicitCastExpr *Node) { + // No need to print anything, simply forward to the subexpression. + PrintExpr(Node->getSubExpr()); +} + +void StmtPrinterFiltering::VisitBinaryOperator(BinaryOperator *Node) { + PrintExpr(Node->getLHS()); + OS << " " << BinaryOperator::getOpcodeStr(Node->getOpcode()) << " "; + PrintExpr(Node->getRHS()); +} + +void StmtPrinterFiltering::VisitCompoundAssignOperator( + CompoundAssignOperator *Node) { + PrintExpr(Node->getLHS()); + OS << " " << BinaryOperator::getOpcodeStr(Node->getOpcode()) << " "; + PrintExpr(Node->getRHS()); +} + +void StmtPrinterFiltering::VisitConditionalOperator(ConditionalOperator *Node) { + PrintExpr(Node->getCond()); + OS << " ? "; + PrintExpr(Node->getLHS()); + OS << " : "; + PrintExpr(Node->getRHS()); +} + +// GNU extensions. + +void StmtPrinterFiltering::VisitBinaryConditionalOperator( + BinaryConditionalOperator *Node) { + PrintExpr(Node->getCommon()); + OS << " ?: "; + PrintExpr(Node->getFalseExpr()); +} + +void StmtPrinterFiltering::VisitAddrLabelExpr(AddrLabelExpr *Node) { + OS << "&&" << Node->getLabel()->getName(); +} + +void StmtPrinterFiltering::VisitStmtExpr(StmtExpr *E) { + OS << "("; + PrintRawCompoundStmt(E->getSubStmt()); + OS << ")"; +} + +void StmtPrinterFiltering::VisitChooseExpr(ChooseExpr *Node) { + OS << "__builtin_choose_expr("; + PrintExpr(Node->getCond()); + OS << ", "; + PrintExpr(Node->getLHS()); + OS << ", "; + PrintExpr(Node->getRHS()); + OS << ")"; +} + +void StmtPrinterFiltering::VisitGNUNullExpr(GNUNullExpr *) { OS << "__null"; } + +void StmtPrinterFiltering::VisitShuffleVectorExpr(ShuffleVectorExpr *Node) { + OS << "__builtin_shufflevector("; + for (unsigned i = 0, e = Node->getNumSubExprs(); i != e; ++i) { + if (i) + OS << ", "; + PrintExpr(Node->getExpr(i)); + } + OS << ")"; +} + +void StmtPrinterFiltering::VisitConvertVectorExpr(ConvertVectorExpr *Node) { + OS << "__builtin_convertvector("; + PrintExpr(Node->getSrcExpr()); + OS << ", "; + Node->getType().print(OS, Policy); + OS << ")"; +} + +void StmtPrinterFiltering::VisitInitListExpr(InitListExpr *Node) { + if (Node->getSyntacticForm()) { + Visit(Node->getSyntacticForm()); + return; + } + + OS << "{"; + for (unsigned i = 0, e = Node->getNumInits(); i != e; ++i) { + if (i) + OS << ", "; + if (Node->getInit(i)) + PrintExpr(Node->getInit(i)); + else + OS << "{}"; + } + OS << "}"; +} + +void StmtPrinterFiltering::VisitArrayInitLoopExpr(ArrayInitLoopExpr *Node) { + // There's no way to express this expression in any of our supported + // languages, so just emit something terse and (hopefully) clear. + OS << "{"; + PrintExpr(Node->getSubExpr()); + OS << "}"; +} + +void StmtPrinterFiltering::VisitArrayInitIndexExpr(ArrayInitIndexExpr *Node) { + OS << "*"; +} + +void StmtPrinterFiltering::VisitParenListExpr(ParenListExpr *Node) { + OS << "("; + for (unsigned i = 0, e = Node->getNumExprs(); i != e; ++i) { + if (i) + OS << ", "; + PrintExpr(Node->getExpr(i)); + } + OS << ")"; +} + +void StmtPrinterFiltering::VisitDesignatedInitExpr(DesignatedInitExpr *Node) { + bool NeedsEquals = true; + for (const DesignatedInitExpr::Designator &D : Node->designators()) { + if (D.isFieldDesignator()) { + if (D.getDotLoc().isInvalid()) { + if (IdentifierInfo *II = D.getFieldName()) { + OS << II->getName() << ":"; + NeedsEquals = false; + } + } else { + OS << "." << D.getFieldName()->getName(); + } + } else { + OS << "["; + if (D.isArrayDesignator()) { + PrintExpr(Node->getArrayIndex(D)); + } else { + PrintExpr(Node->getArrayRangeStart(D)); + OS << " ... "; + PrintExpr(Node->getArrayRangeEnd(D)); + } + OS << "]"; + } + } + + if (NeedsEquals) + OS << " = "; + else + OS << " "; + PrintExpr(Node->getInit()); +} + +void StmtPrinterFiltering::VisitDesignatedInitUpdateExpr( + DesignatedInitUpdateExpr *Node) { + OS << "{"; + OS << "/*base*/"; + PrintExpr(Node->getBase()); + OS << ", "; + + OS << "/*updater*/"; + PrintExpr(Node->getUpdater()); + OS << "}"; +} + +void StmtPrinterFiltering::VisitNoInitExpr(NoInitExpr *Node) { + OS << "/*no init*/"; +} + +void StmtPrinterFiltering::VisitImplicitValueInitExpr( + ImplicitValueInitExpr *Node) { + if (Node->getType()->getAsCXXRecordDecl()) { + OS << "/*implicit*/"; + Node->getType().print(OS, Policy); + OS << "()"; + } else { + OS << "/*implicit*/("; + Node->getType().print(OS, Policy); + OS << ')'; + if (Node->getType()->isRecordType()) + OS << "{}"; + else + OS << 0; + } +} + +void StmtPrinterFiltering::VisitVAArgExpr(VAArgExpr *Node) { + OS << "__builtin_va_arg("; + PrintExpr(Node->getSubExpr()); + OS << ", "; + Node->getType().print(OS, Policy); + OS << ")"; +} + +void StmtPrinterFiltering::VisitPseudoObjectExpr(PseudoObjectExpr *Node) { + PrintExpr(Node->getSyntacticForm()); +} + +void StmtPrinterFiltering::VisitAtomicExpr(AtomicExpr *Node) { + const char *Name = nullptr; + switch (Node->getOp()) { +#define BUILTIN(ID, TYPE, ATTRS) +#define ATOMIC_BUILTIN(ID, TYPE, ATTRS) \ + case AtomicExpr::AO##ID: \ + Name = #ID "("; \ + break; +#include "clang/Basic/Builtins.def" + } + OS << Name; + + // AtomicExpr stores its subexpressions in a permuted order. + PrintExpr(Node->getPtr()); + if (Node->getOp() != AtomicExpr::AO__c11_atomic_load && + Node->getOp() != AtomicExpr::AO__atomic_load_n && + Node->getOp() != AtomicExpr::AO__opencl_atomic_load) { + OS << ", "; + PrintExpr(Node->getVal1()); + } + if (Node->getOp() == AtomicExpr::AO__atomic_exchange || Node->isCmpXChg()) { + OS << ", "; + PrintExpr(Node->getVal2()); + } + if (Node->getOp() == AtomicExpr::AO__atomic_compare_exchange || + Node->getOp() == AtomicExpr::AO__atomic_compare_exchange_n) { + OS << ", "; + PrintExpr(Node->getWeak()); + } + if (Node->getOp() != AtomicExpr::AO__c11_atomic_init && + Node->getOp() != AtomicExpr::AO__opencl_atomic_init) { + OS << ", "; + PrintExpr(Node->getOrder()); + } + if (Node->isCmpXChg()) { + OS << ", "; + PrintExpr(Node->getOrderFail()); + } + OS << ")"; +} + +// C++ +void StmtPrinterFiltering::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *Node) { + OverloadedOperatorKind Kind = Node->getOperator(); + if (Kind == OO_PlusPlus || Kind == OO_MinusMinus) { + if (Node->getNumArgs() == 1) { + OS << getOperatorSpelling(Kind) << ' '; + PrintExpr(Node->getArg(0)); + } else { + PrintExpr(Node->getArg(0)); + OS << ' ' << getOperatorSpelling(Kind); + } + } else if (Kind == OO_Arrow) { + PrintExpr(Node->getArg(0)); + } else if (Kind == OO_Call) { + PrintExpr(Node->getArg(0)); + OS << '('; + for (unsigned ArgIdx = 1; ArgIdx < Node->getNumArgs(); ++ArgIdx) { + if (ArgIdx > 1) + OS << ", "; + if (!isa(Node->getArg(ArgIdx))) + PrintExpr(Node->getArg(ArgIdx)); + } + OS << ')'; + } else if (Kind == OO_Subscript) { + PrintExpr(Node->getArg(0)); + OS << '['; + PrintExpr(Node->getArg(1)); + OS << ']'; + } else if (Node->getNumArgs() == 1) { + OS << getOperatorSpelling(Kind) << ' '; + PrintExpr(Node->getArg(0)); + } else if (Node->getNumArgs() == 2) { + PrintExpr(Node->getArg(0)); + OS << ' ' << getOperatorSpelling(Kind) << ' '; + PrintExpr(Node->getArg(1)); + } else { + llvm_unreachable("unknown overloaded operator"); + } +} + +void StmtPrinterFiltering::VisitCXXMemberCallExpr(CXXMemberCallExpr *Node) { + // If we have a conversion operator call only print the argument. + CXXMethodDecl *MD = Node->getMethodDecl(); + if (MD && isa(MD)) { + PrintExpr(Node->getImplicitObjectArgument()); + return; + } + VisitCallExpr(cast(Node)); +} + +void StmtPrinterFiltering::VisitCUDAKernelCallExpr(CUDAKernelCallExpr *Node) { + PrintExpr(Node->getCallee()); + OS << "<<<"; + PrintCallArgs(Node->getConfig()); + OS << ">>>("; + PrintCallArgs(Node); + OS << ")"; +} + +void StmtPrinterFiltering::VisitCXXRewrittenBinaryOperator( + CXXRewrittenBinaryOperator *Node) { + CXXRewrittenBinaryOperator::DecomposedForm Decomposed = + Node->getDecomposedForm(); + PrintExpr(const_cast(Decomposed.LHS)); + OS << ' ' << BinaryOperator::getOpcodeStr(Decomposed.Opcode) << ' '; + PrintExpr(const_cast(Decomposed.RHS)); +} + +void StmtPrinterFiltering::VisitCXXNamedCastExpr(CXXNamedCastExpr *Node) { + OS << Node->getCastName() << '<'; + Node->getTypeAsWritten().print(OS, Policy); + OS << ">("; + PrintExpr(Node->getSubExpr()); + OS << ")"; +} + +void StmtPrinterFiltering::VisitCXXStaticCastExpr(CXXStaticCastExpr *Node) { + VisitCXXNamedCastExpr(Node); +} + +void StmtPrinterFiltering::VisitCXXDynamicCastExpr(CXXDynamicCastExpr *Node) { + VisitCXXNamedCastExpr(Node); +} + +void StmtPrinterFiltering::VisitCXXReinterpretCastExpr( + CXXReinterpretCastExpr *Node) { + VisitCXXNamedCastExpr(Node); +} + +void StmtPrinterFiltering::VisitCXXConstCastExpr(CXXConstCastExpr *Node) { + VisitCXXNamedCastExpr(Node); +} + +void StmtPrinterFiltering::VisitBuiltinBitCastExpr(BuiltinBitCastExpr *Node) { + OS << "__builtin_bit_cast("; + Node->getTypeInfoAsWritten()->getType().print(OS, Policy); + OS << ", "; + PrintExpr(Node->getSubExpr()); + OS << ")"; +} + +void StmtPrinterFiltering::VisitCXXTypeidExpr(CXXTypeidExpr *Node) { + OS << "typeid("; + if (Node->isTypeOperand()) { + Node->getTypeOperandSourceInfo()->getType().print(OS, Policy); + } else { + PrintExpr(Node->getExprOperand()); + } + OS << ")"; +} + +void StmtPrinterFiltering::VisitCXXUuidofExpr(CXXUuidofExpr *Node) { + OS << "__uuidof("; + if (Node->isTypeOperand()) { + Node->getTypeOperandSourceInfo()->getType().print(OS, Policy); + } else { + PrintExpr(Node->getExprOperand()); + } + OS << ")"; +} + +void StmtPrinterFiltering::VisitMSPropertyRefExpr(MSPropertyRefExpr *Node) { + PrintExpr(Node->getBaseExpr()); + if (Node->isArrow()) + OS << "->"; + else + OS << "."; + if (NestedNameSpecifier *Qualifier = + Node->getQualifierLoc().getNestedNameSpecifier()) + Qualifier->print(OS, Policy); + OS << Node->getPropertyDecl()->getDeclName(); +} + +void StmtPrinterFiltering::VisitMSPropertySubscriptExpr( + MSPropertySubscriptExpr *Node) { + PrintExpr(Node->getBase()); + OS << "["; + PrintExpr(Node->getIdx()); + OS << "]"; +} + +void StmtPrinterFiltering::VisitUserDefinedLiteral(UserDefinedLiteral *Node) { + switch (Node->getLiteralOperatorKind()) { + case UserDefinedLiteral::LOK_Raw: + OS << cast(Node->getArg(0)->IgnoreImpCasts())->getString(); + break; + case UserDefinedLiteral::LOK_Template: { + const auto *DRE = cast(Node->getCallee()->IgnoreImpCasts()); + const TemplateArgumentList *Args = + cast(DRE->getDecl())->getTemplateSpecializationArgs(); + assert(Args); + + if (Args->size() != 1) { + OS << "operator\"\"" << Node->getUDSuffix()->getName(); + printTemplateArgumentList(OS, Args->asArray(), Policy); + OS << "()"; + return; + } + + const TemplateArgument &Pack = Args->get(0); + for (const auto &P : Pack.pack_elements()) { + char C = (char)P.getAsIntegral().getZExtValue(); + OS << C; + } + break; + } + case UserDefinedLiteral::LOK_Integer: { + // Print integer literal without suffix. + const auto *Int = cast(Node->getCookedLiteral()); + OS << Int->getValue().toString(10, /*isSigned*/ false); + break; + } + case UserDefinedLiteral::LOK_Floating: { + // Print floating literal without suffix. + auto *Float = cast(Node->getCookedLiteral()); + PrintFloatingLiteralCopy(OS, Float, /*PrintSuffix=*/false); + break; + } + case UserDefinedLiteral::LOK_String: + case UserDefinedLiteral::LOK_Character: + PrintExpr(Node->getCookedLiteral()); + break; + } + OS << Node->getUDSuffix()->getName(); +} + +void StmtPrinterFiltering::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *Node) { + OS << (Node->getValue() ? "true" : "false"); +} + +void StmtPrinterFiltering::VisitCXXNullPtrLiteralExpr( + CXXNullPtrLiteralExpr *Node) { + OS << "nullptr"; +} + +void StmtPrinterFiltering::VisitCXXThisExpr(CXXThisExpr *Node) { OS << "this"; } + +void StmtPrinterFiltering::VisitCXXThrowExpr(CXXThrowExpr *Node) { + if (!Node->getSubExpr()) + OS << "throw"; + else { + OS << "throw "; + PrintExpr(Node->getSubExpr()); + } +} + +void StmtPrinterFiltering::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *Node) { + // Nothing to print: we picked up the default argument. +} + +void StmtPrinterFiltering::VisitCXXDefaultInitExpr(CXXDefaultInitExpr *Node) { + // Nothing to print: we picked up the default initializer. +} + +void StmtPrinterFiltering::VisitCXXFunctionalCastExpr( + CXXFunctionalCastExpr *Node) { + Node->getType().print(OS, Policy); + // If there are no parens, this is list-initialization, and the braces are + // part of the syntax of the inner construct. + if (Node->getLParenLoc().isValid()) + OS << "("; + PrintExpr(Node->getSubExpr()); + if (Node->getLParenLoc().isValid()) + OS << ")"; +} + +void StmtPrinterFiltering::VisitCXXBindTemporaryExpr( + CXXBindTemporaryExpr *Node) { + PrintExpr(Node->getSubExpr()); +} + +void StmtPrinterFiltering::VisitCXXTemporaryObjectExpr( + CXXTemporaryObjectExpr *Node) { + Node->getType().print(OS, Policy); + if (Node->isStdInitListInitialization()) + /* Nothing to do; braces are part of creating the std::initializer_list. */; + else if (Node->isListInitialization()) + OS << "{"; + else + OS << "("; + for (CXXTemporaryObjectExpr::arg_iterator Arg = Node->arg_begin(), + ArgEnd = Node->arg_end(); + Arg != ArgEnd; ++Arg) { + if ((*Arg)->isDefaultArgument()) + break; + if (Arg != Node->arg_begin()) + OS << ", "; + PrintExpr(*Arg); + } + if (Node->isStdInitListInitialization()) + /* See above. */; + else if (Node->isListInitialization()) + OS << "}"; + else + OS << ")"; +} + +void StmtPrinterFiltering::VisitLambdaExpr(LambdaExpr *Node) { + OS << '['; + bool NeedComma = false; + switch (Node->getCaptureDefault()) { + case LCD_None: + break; + + case LCD_ByCopy: + OS << '='; + NeedComma = true; + break; + + case LCD_ByRef: + OS << '&'; + NeedComma = true; + break; + } + for (LambdaExpr::capture_iterator C = Node->explicit_capture_begin(), + CEnd = Node->explicit_capture_end(); + C != CEnd; ++C) { + if (C->capturesVLAType()) + continue; + + if (NeedComma) + OS << ", "; + NeedComma = true; + + switch (C->getCaptureKind()) { + case LCK_This: + OS << "this"; + break; + + case LCK_StarThis: + OS << "*this"; + break; + + case LCK_ByRef: + if (Node->getCaptureDefault() != LCD_ByRef || Node->isInitCapture(C)) + OS << '&'; + OS << C->getCapturedVar()->getName(); + break; + + case LCK_ByCopy: + OS << C->getCapturedVar()->getName(); + break; + + case LCK_VLAType: + llvm_unreachable("VLA type in explicit captures."); + } + + if (C->isPackExpansion()) + OS << "..."; + + if (Node->isInitCapture(C)) + PrintExpr(C->getCapturedVar()->getInit()); + } + OS << ']'; + + if (!Node->getExplicitTemplateParameters().empty()) { + Node->getTemplateParameterList()->print( + OS, Node->getLambdaClass()->getASTContext(), + /*OmitTemplateKW*/ true); + } + + if (Node->hasExplicitParameters()) { + OS << '('; + CXXMethodDecl *Method = Node->getCallOperator(); + NeedComma = false; + for (const auto *P : Method->parameters()) { + if (NeedComma) { + OS << ", "; + } else { + NeedComma = true; + } + std::string ParamStr = P->getNameAsString(); + P->getOriginalType().print(OS, Policy, ParamStr); + } + if (Method->isVariadic()) { + if (NeedComma) + OS << ", "; + OS << "..."; + } + OS << ')'; + + if (Node->isMutable()) + OS << " mutable"; + + auto *Proto = Method->getType()->castAs(); + Proto->printExceptionSpecification(OS, Policy); + + // FIXME: Attributes + + // Print the trailing return type if it was specified in the source. + if (Node->hasExplicitResultType()) { + OS << " -> "; + Proto->getReturnType().print(OS, Policy); + } + } + + // Print the body. + OS << ' '; + if (Policy.TerseOutput) + OS << "{}"; + else + PrintRawCompoundStmt(Node->getBody()); +} + +void StmtPrinterFiltering::VisitCXXScalarValueInitExpr( + CXXScalarValueInitExpr *Node) { + if (TypeSourceInfo *TSInfo = Node->getTypeSourceInfo()) + TSInfo->getType().print(OS, Policy); + else + Node->getType().print(OS, Policy); + OS << "()"; +} + +void StmtPrinterFiltering::VisitCXXNewExpr(CXXNewExpr *E) { + if (E->isGlobalNew()) + OS << "::"; + OS << "new "; + unsigned NumPlace = E->getNumPlacementArgs(); + if (NumPlace > 0 && !isa(E->getPlacementArg(0))) { + OS << "("; + PrintExpr(E->getPlacementArg(0)); + for (unsigned i = 1; i < NumPlace; ++i) { + if (isa(E->getPlacementArg(i))) + break; + OS << ", "; + PrintExpr(E->getPlacementArg(i)); + } + OS << ") "; + } + if (E->isParenTypeId()) + OS << "("; + std::string TypeS; + if (Optional Size = E->getArraySize()) { + llvm::raw_string_ostream s(TypeS); + s << '['; + if (*Size) + selective_printer::printPretty(*Size, lines, s, Helper, Policy, Context); + s << ']'; + } + E->getAllocatedType().print(OS, Policy, TypeS); + if (E->isParenTypeId()) + OS << ")"; + + CXXNewExpr::InitializationStyle InitStyle = E->getInitializationStyle(); + if (InitStyle) { + if (InitStyle == CXXNewExpr::CallInit) + OS << "("; + PrintExpr(E->getInitializer()); + if (InitStyle == CXXNewExpr::CallInit) + OS << ")"; + } +} + +void StmtPrinterFiltering::VisitCXXDeleteExpr(CXXDeleteExpr *E) { + if (E->isGlobalDelete()) + OS << "::"; + OS << "delete "; + if (E->isArrayForm()) + OS << "[] "; + PrintExpr(E->getArgument()); +} + +void StmtPrinterFiltering::VisitCXXPseudoDestructorExpr( + CXXPseudoDestructorExpr *E) { + PrintExpr(E->getBase()); + if (E->isArrow()) + OS << "->"; + else + OS << '.'; + if (E->getQualifier()) + E->getQualifier()->print(OS, Policy); + OS << "~"; + + if (IdentifierInfo *II = E->getDestroyedTypeIdentifier()) + OS << II->getName(); + else + E->getDestroyedType().print(OS, Policy); +} + +void StmtPrinterFiltering::VisitCXXConstructExpr(CXXConstructExpr *E) { + if (E->isListInitialization() && !E->isStdInitListInitialization()) + OS << "{"; + + for (unsigned i = 0, e = E->getNumArgs(); i != e; ++i) { + if (isa(E->getArg(i))) { + // Don't print any defaulted arguments + break; + } + + if (i) + OS << ", "; + PrintExpr(E->getArg(i)); + } + + if (E->isListInitialization() && !E->isStdInitListInitialization()) + OS << "}"; +} + +void StmtPrinterFiltering::VisitCXXInheritedCtorInitExpr( + CXXInheritedCtorInitExpr *E) { + // Parens are printed by the surrounding context. + OS << ""; +} + +void StmtPrinterFiltering::VisitCXXStdInitializerListExpr( + CXXStdInitializerListExpr *E) { + PrintExpr(E->getSubExpr()); +} + +void StmtPrinterFiltering::VisitExprWithCleanups(ExprWithCleanups *E) { + // Just forward to the subexpression. + PrintExpr(E->getSubExpr()); +} + +void StmtPrinterFiltering::VisitCXXUnresolvedConstructExpr( + CXXUnresolvedConstructExpr *Node) { + Node->getTypeAsWritten().print(OS, Policy); + OS << "("; + for (CXXUnresolvedConstructExpr::arg_iterator Arg = Node->arg_begin(), + ArgEnd = Node->arg_end(); + Arg != ArgEnd; ++Arg) { + if (Arg != Node->arg_begin()) + OS << ", "; + PrintExpr(*Arg); + } + OS << ")"; +} + +void StmtPrinterFiltering::VisitCXXDependentScopeMemberExpr( + CXXDependentScopeMemberExpr *Node) { + if (!Node->isImplicitAccess()) { + PrintExpr(Node->getBase()); + OS << (Node->isArrow() ? "->" : "."); + } + if (NestedNameSpecifier *Qualifier = Node->getQualifier()) + Qualifier->print(OS, Policy); + if (Node->hasTemplateKeyword()) + OS << "template "; + OS << Node->getMemberNameInfo(); + if (Node->hasExplicitTemplateArgs()) + printTemplateArgumentList(OS, Node->template_arguments(), Policy); +} + +void StmtPrinterFiltering::VisitUnresolvedMemberExpr( + UnresolvedMemberExpr *Node) { + if (!Node->isImplicitAccess()) { + PrintExpr(Node->getBase()); + OS << (Node->isArrow() ? "->" : "."); + } + if (NestedNameSpecifier *Qualifier = Node->getQualifier()) + Qualifier->print(OS, Policy); + if (Node->hasTemplateKeyword()) + OS << "template "; + OS << Node->getMemberNameInfo(); + if (Node->hasExplicitTemplateArgs()) + printTemplateArgumentList(OS, Node->template_arguments(), Policy); +} + +// Renamed to prevent ODR violation +static const char *getTypeTraitNameCopy(TypeTrait TT) { + switch (TT) { +#define TYPE_TRAIT_1(Spelling, Name, Key) \ + case clang::UTT_##Name: \ + return #Spelling; +#define TYPE_TRAIT_2(Spelling, Name, Key) \ + case clang::BTT_##Name: \ + return #Spelling; +#define TYPE_TRAIT_N(Spelling, Name, Key) \ + case clang::TT_##Name: \ + return #Spelling; +#include "clang/Basic/TokenKinds.def" + } + llvm_unreachable("Type trait not covered by switch"); +} + +// Renamed to prevent ODR violation +static const char *getTypeTraitNameCopy(ArrayTypeTrait ATT) { + switch (ATT) { + case ATT_ArrayRank: + return "__array_rank"; + case ATT_ArrayExtent: + return "__array_extent"; + } + llvm_unreachable("Array type trait not covered by switch"); +} + +// Renamed to prevent ODR violation +static const char *getExpressionTraitNameCopy(ExpressionTrait ET) { + switch (ET) { + case ET_IsLValueExpr: + return "__is_lvalue_expr"; + case ET_IsRValueExpr: + return "__is_rvalue_expr"; + } + llvm_unreachable("Expression type trait not covered by switch"); +} + +void StmtPrinterFiltering::VisitTypeTraitExpr(TypeTraitExpr *E) { + OS << getTypeTraitNameCopy(E->getTrait()) << "("; + for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) { + if (I > 0) + OS << ", "; + E->getArg(I)->getType().print(OS, Policy); + } + OS << ")"; +} + +void StmtPrinterFiltering::VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E) { + OS << getTypeTraitNameCopy(E->getTrait()) << '('; + E->getQueriedType().print(OS, Policy); + OS << ')'; +} + +void StmtPrinterFiltering::VisitExpressionTraitExpr(ExpressionTraitExpr *E) { + OS << getExpressionTraitNameCopy(E->getTrait()) << '('; + PrintExpr(E->getQueriedExpression()); + OS << ')'; +} + +void StmtPrinterFiltering::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) { + OS << "noexcept("; + PrintExpr(E->getOperand()); + OS << ")"; +} + +void StmtPrinterFiltering::VisitPackExpansionExpr(PackExpansionExpr *E) { + PrintExpr(E->getPattern()); + OS << "..."; +} + +void StmtPrinterFiltering::VisitSizeOfPackExpr(SizeOfPackExpr *E) { + OS << "sizeof...(" << *E->getPack() << ")"; +} + +void StmtPrinterFiltering::VisitSubstNonTypeTemplateParmPackExpr( + SubstNonTypeTemplateParmPackExpr *Node) { + OS << *Node->getParameterPack(); +} + +void StmtPrinterFiltering::VisitSubstNonTypeTemplateParmExpr( + SubstNonTypeTemplateParmExpr *Node) { + Visit(Node->getReplacement()); +} + +void StmtPrinterFiltering::VisitFunctionParmPackExpr(FunctionParmPackExpr *E) { + OS << *E->getParameterPack(); +} + +void StmtPrinterFiltering::VisitMaterializeTemporaryExpr( + MaterializeTemporaryExpr *Node) { + PrintExpr(Node->getSubExpr()); +} + +void StmtPrinterFiltering::VisitCXXFoldExpr(CXXFoldExpr *E) { + OS << "("; + if (E->getLHS()) { + PrintExpr(E->getLHS()); + OS << " " << BinaryOperator::getOpcodeStr(E->getOperator()) << " "; + } + OS << "..."; + if (E->getRHS()) { + OS << " " << BinaryOperator::getOpcodeStr(E->getOperator()) << " "; + PrintExpr(E->getRHS()); + } + OS << ")"; +} + +void StmtPrinterFiltering::VisitConceptSpecializationExpr( + ConceptSpecializationExpr *E) { + NestedNameSpecifierLoc NNS = E->getNestedNameSpecifierLoc(); + if (NNS) + NNS.getNestedNameSpecifier()->print(OS, Policy); + if (E->getTemplateKWLoc().isValid()) + OS << "template "; + OS << E->getFoundDecl()->getName(); + printTemplateArgumentList(OS, E->getTemplateArgsAsWritten()->arguments(), + Policy); +} + +void StmtPrinterFiltering::VisitRequiresExpr(RequiresExpr *E) { + OS << "requires "; + auto LocalParameters = E->getLocalParameters(); + if (!LocalParameters.empty()) { + OS << "("; + for (ParmVarDecl *LocalParam : LocalParameters) { + PrintRawDecl(LocalParam); + if (LocalParam != LocalParameters.back()) + OS << ", "; + } + + OS << ") "; + } + OS << "{ "; + auto Requirements = E->getRequirements(); + for (concepts::Requirement *Req : Requirements) { + if (auto *TypeReq = dyn_cast(Req)) { + if (TypeReq->isSubstitutionFailure()) + OS << "<>"; + else + TypeReq->getType()->getType().print(OS, Policy); + } else if (auto *ExprReq = dyn_cast(Req)) { + if (ExprReq->isCompound()) + OS << "{ "; + if (ExprReq->isExprSubstitutionFailure()) + OS << "<>"; + else + PrintExpr(ExprReq->getExpr()); + if (ExprReq->isCompound()) { + OS << " }"; + if (ExprReq->getNoexceptLoc().isValid()) + OS << " noexcept"; + const auto &RetReq = ExprReq->getReturnTypeRequirement(); + if (!RetReq.isEmpty()) { + OS << " -> "; + if (RetReq.isSubstitutionFailure()) + OS << "<>"; + else if (RetReq.isTypeConstraint()) + RetReq.getTypeConstraint()->print(OS, Policy); + } + } + } else { + auto *NestedReq = cast(Req); + OS << "requires "; + if (NestedReq->isSubstitutionFailure()) + OS << "<>"; + else + PrintExpr(NestedReq->getConstraintExpr()); + } + OS << "; "; + } + OS << "}"; +} + +// C++ Coroutines TS + +void StmtPrinterFiltering::VisitCoroutineBodyStmt(CoroutineBodyStmt *S) { + Visit(S->getBody()); +} + +void StmtPrinterFiltering::VisitCoreturnStmt(CoreturnStmt *S) { + OS << "co_return"; + if (S->getOperand()) { + OS << " "; + Visit(S->getOperand()); + } + OS << ";"; +} + +void StmtPrinterFiltering::VisitCoawaitExpr(CoawaitExpr *S) { + OS << "co_await "; + PrintExpr(S->getOperand()); +} + +void StmtPrinterFiltering::VisitDependentCoawaitExpr(DependentCoawaitExpr *S) { + OS << "co_await "; + PrintExpr(S->getOperand()); +} + +void StmtPrinterFiltering::VisitCoyieldExpr(CoyieldExpr *S) { + OS << "co_yield "; + PrintExpr(S->getOperand()); +} + +// Obj-C + +void StmtPrinterFiltering::VisitObjCStringLiteral(ObjCStringLiteral *Node) { + OS << "@"; + VisitStringLiteral(Node->getString()); +} + +void StmtPrinterFiltering::VisitObjCBoxedExpr(ObjCBoxedExpr *E) { + OS << "@"; + Visit(E->getSubExpr()); +} + +void StmtPrinterFiltering::VisitObjCArrayLiteral(ObjCArrayLiteral *E) { + OS << "@[ "; + ObjCArrayLiteral::child_range Ch = E->children(); + for (auto I = Ch.begin(), E = Ch.end(); I != E; ++I) { + if (I != Ch.begin()) + OS << ", "; + Visit(*I); + } + OS << " ]"; +} + +void StmtPrinterFiltering::VisitObjCDictionaryLiteral( + ObjCDictionaryLiteral *E) { + OS << "@{ "; + for (unsigned I = 0, N = E->getNumElements(); I != N; ++I) { + if (I > 0) + OS << ", "; + + ObjCDictionaryElement Element = E->getKeyValueElement(I); + Visit(Element.Key); + OS << " : "; + Visit(Element.Value); + if (Element.isPackExpansion()) + OS << "..."; + } + OS << " }"; +} + +void StmtPrinterFiltering::VisitObjCEncodeExpr(ObjCEncodeExpr *Node) { + OS << "@encode("; + Node->getEncodedType().print(OS, Policy); + OS << ')'; +} + +void StmtPrinterFiltering::VisitObjCSelectorExpr(ObjCSelectorExpr *Node) { + OS << "@selector("; + Node->getSelector().print(OS); + OS << ')'; +} + +void StmtPrinterFiltering::VisitObjCProtocolExpr(ObjCProtocolExpr *Node) { + OS << "@protocol(" << *Node->getProtocol() << ')'; +} + +void StmtPrinterFiltering::VisitObjCMessageExpr(ObjCMessageExpr *Mess) { + OS << "["; + switch (Mess->getReceiverKind()) { + case ObjCMessageExpr::Instance: + PrintExpr(Mess->getInstanceReceiver()); + break; + + case ObjCMessageExpr::Class: + Mess->getClassReceiver().print(OS, Policy); + break; + + case ObjCMessageExpr::SuperInstance: + case ObjCMessageExpr::SuperClass: + OS << "Super"; + break; + } + + OS << ' '; + Selector selector = Mess->getSelector(); + if (selector.isUnarySelector()) { + OS << selector.getNameForSlot(0); + } else { + for (unsigned i = 0, e = Mess->getNumArgs(); i != e; ++i) { + if (i < selector.getNumArgs()) { + if (i > 0) + OS << ' '; + if (selector.getIdentifierInfoForSlot(i)) + OS << selector.getIdentifierInfoForSlot(i)->getName() << ':'; + else + OS << ":"; + } else + OS << ", "; // Handle variadic methods. + + PrintExpr(Mess->getArg(i)); + } + } + OS << "]"; +} + +void StmtPrinterFiltering::VisitObjCBoolLiteralExpr(ObjCBoolLiteralExpr *Node) { + OS << (Node->getValue() ? "__objc_yes" : "__objc_no"); +} + +void StmtPrinterFiltering::VisitObjCIndirectCopyRestoreExpr( + ObjCIndirectCopyRestoreExpr *E) { + PrintExpr(E->getSubExpr()); +} + +void StmtPrinterFiltering::VisitObjCBridgedCastExpr(ObjCBridgedCastExpr *E) { + OS << '(' << E->getBridgeKindName(); + E->getType().print(OS, Policy); + OS << ')'; + PrintExpr(E->getSubExpr()); +} + +void StmtPrinterFiltering::VisitBlockExpr(BlockExpr *Node) { + BlockDecl *BD = Node->getBlockDecl(); + OS << "^"; + + const FunctionType *AFT = Node->getFunctionType(); + + if (isa(AFT)) { + OS << "()"; + } else if (!BD->param_empty() || cast(AFT)->isVariadic()) { + OS << '('; + for (BlockDecl::param_iterator AI = BD->param_begin(), E = BD->param_end(); + AI != E; ++AI) { + if (AI != BD->param_begin()) + OS << ", "; + std::string ParamStr = (*AI)->getNameAsString(); + (*AI)->getType().print(OS, Policy, ParamStr); + } + + const auto *FT = cast(AFT); + if (FT->isVariadic()) { + if (!BD->param_empty()) + OS << ", "; + OS << "..."; + } + OS << ')'; + } + OS << "{ }"; +} + +void StmtPrinterFiltering::VisitOpaqueValueExpr(OpaqueValueExpr *Node) { + PrintExpr(Node->getSourceExpr()); +} + +void StmtPrinterFiltering::VisitTypoExpr(TypoExpr *Node) { + // TODO: Print something reasonable for a TypoExpr, if necessary. + llvm_unreachable("Cannot print TypoExpr nodes"); +} + +void StmtPrinterFiltering::VisitAsTypeExpr(AsTypeExpr *Node) { + OS << "__builtin_astype("; + PrintExpr(Node->getSrcExpr()); + OS << ", "; + Node->getType().print(OS, Policy); + OS << ")"; +} + +//===----------------------------------------------------------------------===// +// Stmt method implementations +//===----------------------------------------------------------------------===// + +namespace selective_printer { +void printPretty(const Stmt *stmt, const std::set &lines, + raw_ostream &Out, PrinterHelper *Helper, + const PrintingPolicy &Policy, const clang::ASTContext *Context, + unsigned Indentation, StringRef NL) { + StmtPrinterFiltering P(lines, Out, Helper, Policy, Indentation, NL, Context); + P.Visit(const_cast(stmt)); +} + +} // namespace selective_printer diff --git a/tools/module-extractor/SelectiveStmtPrinter.h b/tools/module-extractor/SelectiveStmtPrinter.h new file mode 100644 index 0000000000..dbfd2ebe21 --- /dev/null +++ b/tools/module-extractor/SelectiveStmtPrinter.h @@ -0,0 +1,20 @@ +#ifndef PHASAR_SELECTIVESTMTPRINTER_H +#define PHASAR_SELECTIVESTMTPRINTER_H + +#include +#include +#include +#include + +#include + +namespace selective_printer { +void printPretty(const clang::Stmt *stmt, const std::set &lines, + llvm::raw_ostream &Out, clang::PrinterHelper *Helper, + const clang::PrintingPolicy &Policy, + const clang::ASTContext *Context, unsigned Indentation = 0, + llvm::StringRef NL = "\n"); + +} // namespace selective_printer + +#endif // PHASAR_SELECTIVESTMTPRINTER_H diff --git a/tools/module-extractor/back_mapper.cpp b/tools/module-extractor/back_mapper.cpp index 2d3b29e666..281a60974b 100644 --- a/tools/module-extractor/back_mapper.cpp +++ b/tools/module-extractor/back_mapper.cpp @@ -1,4 +1,6 @@ #include "back_mapper.h" +#include "SelectiveDeclPrinter.h" +#include "printer.h" #include #include @@ -6,6 +8,9 @@ #include #include #include +#include + +#include #include /** @@ -23,78 +28,113 @@ * What needs special handling? Semicolons, Compound Statements, what else? * Data structure for storing and merging the source code ranges? (Overlapping * intervals problem) + * Presumed, expansion, or spelling loc? */ namespace { + +/* class RewriteSourceVisitor : public clang::RecursiveASTVisitor { public: - RewriteSourceVisitor( - clang::ASTContext &context, std::set *target_lines, - const std::shared_ptr> &resultingLines) + RewriteSourceVisitor(clang::ASTContext &context, + std::set *target_lines, + std::shared_ptr> resultingLines) : context(context), target_lines(target_lines), - resulting_lines(resultingLines), candidate_lines(), + resulting_lines(std::move(resultingLines)), candidate_lines(), sm(context.getSourceManager()) {} - [[maybe_unused]] bool VisitStmt(clang::Stmt *S) { - auto es = - context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); - auto es4 = - context.getSourceManager().getExpansionLineNumber(S->getEndLoc()); - if (es == es4 && target_lines->find(es) != target_lines->end()) { - for (auto &l : candidate_lines) { - resulting_lines->insert(l); - } - } - return true; - } - - [[maybe_unused]] bool VisitFunctionDecl(clang::FunctionDecl *D) { - if (context.getSourceManager().isInMainFile(D->getLocation())) { - // D->dumpColor(); - } - return true; - } - - [[maybe_unused]] bool VisitCompoundStmt(clang::CompoundStmt *C) { - if (context.getSourceManager().isInMainFile(C->getBeginLoc())) { - C->dumpColor(); - C->getLBracLoc().dump(context.getSourceManager()); - C->getRBracLoc().dump(context.getSourceManager()); - } - - return true; - } - - [[maybe_unused]] bool VisitReturnStmt(clang::ReturnStmt *R) { - if (sm.isInMainFile(R->getBeginLoc())) { - R->getBeginLoc().dump(sm); - R->getEndLoc().dump(sm); - clang::Lexer::getLocForEndOfToken(R->getEndLoc(), 0, sm, - context.getLangOpts()) - .dump(sm); - } - return true; - } - - [[maybe_unused]] bool VisitDefaultStmt(clang::DefaultStmt *S) { - auto line = - context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); - candidate_lines.insert(line); - return true; + bool VisitTranslationUnitDecl(clang::TranslationUnitDecl *D) { + selective_printer::print(D, *target_lines, llvm::errs()); + return false; } - [[maybe_unused]] bool VisitCaseStmt(clang::CaseStmt *S) { - auto line = - context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); - candidate_lines.insert(line); - return true; - } - - [[maybe_unused]] bool VisitBreakStmt(clang::BreakStmt *S) { - candidate_lines.clear(); - return true; - } +// [[maybe_unused]] bool VisitFunctionDecl(clang::FunctionDecl *F) { +// // if (sm.isInMainFile(F->getBeginLoc())) { +// // F->getBeginLoc().dump(sm); +// // F->getEndLoc().dump(sm); +// // if (F->hasBody()) { +// // { +// // std::string buffer; +// // llvm::raw_string_ostream RSO(buffer); +// // F->print(RSO, context.getPrintingPolicy()); +// // llvm::errs() << RSO.str() << "\n"; +// // } +// // } +// // } +// F->getBeginLoc().dump(sm); +// F->getEndLoc().dump(sm); +// F->getLocation().dump(sm); +// // F->getloc +// selective_printer::print(F, *target_lines, llvm::errs()); +// return true; +// } +// +// [[maybe_unused]] bool VisitStmt(clang::Stmt *S) { +// auto es = +// context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); +// auto es4 = +// context.getSourceManager().getExpansionLineNumber(S->getEndLoc()); +// if (es == es4 && target_lines->find(es) != target_lines->end()) { +// for (auto &l : candidate_lines) { +// resulting_lines->insert(l); +// } +// } +// if (context.getSourceManager().isInMainFile(S->getBeginLoc())) { +// // S->dumpPretty(context); +// } +// if (llvm::isa(S)) { +// // S->dump(); +// } +// return true; +// } +// +// [[maybe_unused]] bool VisitCompoundStmt(clang::CompoundStmt *C) { +// if (context.getSourceManager().isInMainFile(C->getBeginLoc())) { +// // C->dumpColor(); +// // C->getLBracLoc().dump(context.getSourceManager()); +// // C->getRBracLoc().dump(context.getSourceManager()); +// } +// +// return true; +// } +// +// [[maybe_unused]] bool VisitReturnStmt(clang::ReturnStmt *R) { +// if (sm.isInMainFile(R->getBeginLoc())) { +// // R->getBeginLoc().dump(sm); +// // R->getEndLoc().dump(sm); +// // R->dumpPretty(context); +// // clang::Lexer::getLocForEndOfToken(R->getEndLoc(), 0, sm, +// // context.getLangOpts()) +// // .dump(sm); +// // auto PLoc = sm.getPresumedLoc(R->getBeginLoc()); +// // llvm::errs() << PLoc.getFilename() << ':' << PLoc.getLine() << +':' +// // << PLoc.getColumn() << "\n"; +// // sm.getExpansionLoc(R->getBeginLoc()).dump(sm); +// // sm.getSpellingLoc(R->getBeginLoc()).dump(sm); +// } +// return true; +// } +// +// [[maybe_unused]] bool VisitDefaultStmt(clang::DefaultStmt *S) { +// auto line = +// context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); +// candidate_lines.insert(line); +// return true; +// } +// +// [[maybe_unused]] bool VisitCaseStmt(clang::CaseStmt *S) { +// auto line = +// context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); +// candidate_lines.insert(line); +// return true; +// } +// +// [[maybe_unused]] bool VisitBreakStmt(clang::BreakStmt *S) { +// candidate_lines.clear(); +// return true; +// } private: clang::ASTContext &context; @@ -103,64 +143,67 @@ class RewriteSourceVisitor std::set candidate_lines; clang::SourceManager &sm; }; +*/ class RewriteSourceConsumer : public clang::ASTConsumer { public: - RewriteSourceConsumer( - std::set *target_lines, - const std::shared_ptr> &resultingLines) - : target_lines(target_lines), resulting_lines(resultingLines) {} - virtual void HandleTranslationUnit(clang::ASTContext &Context) { + RewriteSourceConsumer(const std::set *target_lines, + std::string &output) + : target_lines(target_lines), output(output) {} + void HandleTranslationUnit(clang::ASTContext &Context) override { // Traversing the translation unit decl via a RecursiveASTVisitor // will visit all nodes in the AST. // llvm::dbgs << Context.getTranslationUnitDecl(); - RewriteSourceVisitor Visitor(Context, target_lines, resulting_lines); - Visitor.TraverseDecl(Context.getTranslationUnitDecl()); + { + llvm::raw_string_ostream out(output); + selective_printer::print(Context.getTranslationUnitDecl(), *target_lines, + out); + } + // RewriteSourceVisitor Visitor(Context, target_lines, resulting_lines); + // Visitor.TraverseDecl(Context.getTranslationUnitDecl()); } private: // A RecursiveASTVisitor implementation. - std::set *target_lines; - std::shared_ptr> resulting_lines; + const std::set *target_lines; + std::string &output; }; class RewriteSourceAction // : public clang::ASTFrontendAction { public: - RewriteSourceAction( - std::set *target_lines, - const std::shared_ptr> &resultingLines) - : target_lines(target_lines), resulting_lines(resultingLines) {} + RewriteSourceAction(const std::set *target_lines, + std::string &output) + : target_lines(target_lines), output(output) {} std::unique_ptr newASTConsumer() { return std::unique_ptr( - new RewriteSourceConsumer(target_lines, resulting_lines)); + new RewriteSourceConsumer(target_lines, output)); } private: - std::set *target_lines; - std::shared_ptr> resulting_lines; + const std::set *target_lines; + std::string &output; }; } // namespace -std::shared_ptr> -add_block(std::string file, std::set *target_lines) { +std::string add_block(std::string file, + const std::set *target_lines) { std::string err; auto db = clang::tooling::CompilationDatabase::autoDetectFromDirectory( boost::filesystem::path(file).parent_path().string(), err); if (!db) { - llvm::errs() << err; + throw std::runtime_error(err); } - std::vector Sources; Sources.push_back(file); clang::tooling::ClangTool Tool(*db, Sources); - auto res = std::make_shared>(); + std::string buffer; Tool.run(clang::tooling::newFrontendActionFactory( - new RewriteSourceAction(target_lines, res)) + new RewriteSourceAction(target_lines, buffer)) .get()); - return res; + return buffer; } diff --git a/tools/module-extractor/back_mapper.h b/tools/module-extractor/back_mapper.h index 76402bb601..4151bf72aa 100644 --- a/tools/module-extractor/back_mapper.h +++ b/tools/module-extractor/back_mapper.h @@ -1,11 +1,14 @@ #ifndef PHASAR_BACK_MAPPER_H #define PHASAR_BACK_MAPPER_H -#include #include #include -std::shared_ptr> -add_block(std::string file, std::set *target_lines); +namespace clang { +class SourceLocation; +}; + +std::string add_block(std::string file, + const std::set *target_lines); #endif // PHASAR_BACK_MAPPER_H diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp new file mode 100644 index 0000000000..577ff12eeb --- /dev/null +++ b/tools/module-extractor/printer.cpp @@ -0,0 +1,30 @@ +// +// Created by jr on 12.11.21. +// + +#include "printer.h" +void DeclPrinter::VisitFunctionDecl(const clang::FunctionDecl *decl) { + assert(decl->hasBody()); + if(printer::isAnyInWhitelist(decl, TargetLines, SM)) { + + } + llvm_unreachable("test"); +} +void DeclPrinter::VisitDecl(const clang::Decl *decl) { + llvm_unreachable("Hit unsupported decl"); +} +DeclPrinter::DeclPrinter(const std::set &targetLines, + const clang::ASTContext &ctx) + : TargetLines(targetLines), SM(ctx.getSourceManager()), CTX(ctx) {} +void StmtPrinterFiltering::VisitStmt(const clang::Stmt *stmt) { + llvm_unreachable("Hit unsupported stmt"); +} +void StmtPrinterFiltering::VisitCompoundStmt(const clang::CompoundStmt *stmt) { + llvm_unreachable("unimplemented"); +} +StmtPrinterFiltering::StmtPrinterFiltering(const std::set &targetLines) + : TargetLines(targetLines) {} +printer::Slice::Slice(clang::SourceLocation begin, + clang::SourceLocation end, + printer::Terminator terminator) + : Begin(begin), End(end), Terminator(terminator) {} diff --git a/tools/module-extractor/printer.h b/tools/module-extractor/printer.h new file mode 100644 index 0000000000..ddf44a6a05 --- /dev/null +++ b/tools/module-extractor/printer.h @@ -0,0 +1,65 @@ +// +// Created by jr on 12.11.21. +// + +#ifndef PHASAR_PRINTER_H +#define PHASAR_PRINTER_H + +#include +#include +#include +#include + +#include +#include +#include +#include + +namespace printer { + +template +bool isAnyInWhitelist(const T *Decl, const std::set &Lines, + const clang::SourceManager &SM) { + unsigned int Begin = SM.getPresumedLineNumber(Decl->getBeginLoc()); + unsigned int End = SM.getPresumedLineNumber(Decl->getEndLoc()); + assert(Begin <= End); + return Lines.lower_bound(Begin) != Lines.upper_bound(End); +} + +enum class Terminator { None, Semicolon }; + +struct Slice { + Slice(clang::SourceLocation begin, clang::SourceLocation end, + Terminator terminator); + const clang::SourceLocation Begin; + const clang::SourceLocation End; + const Terminator Terminator; +}; + +} // namespace printer + +class StmtPrinterFiltering + : public clang::ConstStmtVisitor { +public: + StmtPrinterFiltering(const std::set &targetLines); + void VisitCompoundStmt(const clang::CompoundStmt *stmt); + void VisitStmt(const clang::Stmt *stmt); + +private: + const std::set &TargetLines; +}; +class DeclPrinter : public clang::ConstDeclVisitor { +public: + DeclPrinter(const std::set &targetLines, + const clang::ASTContext &ctx); + void VisitFunctionDecl(const clang::FunctionDecl *decl); + void VisitDecl(const clang::Decl *decl); + +private: + std::vector Slices; + const std::set &TargetLines; + const clang::SourceManager &SM; + const clang::ASTContext &CTX; +}; + +#endif // PHASAR_PRINTER_H diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index 326ae06d72..d804e15fb7 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -4,7 +4,6 @@ #include #include - struct SliceComparator { template bool operator()(const tuple &l, @@ -102,7 +101,8 @@ class IFDSSlicer : public IFDSTabulationProblem> { const std::set &entrypoints; }; -void copy_files(map> &file_lines, string outPath) { +void copy_files(map> &file_lines, + map &file_slices, string outPath) { for (const auto &file : file_lines) { std::ifstream in(file.first); std::ofstream out( @@ -119,6 +119,15 @@ void copy_files(map> &file_lines, string outPath) { } out.close(); } + for (const auto &file : file_slices) { + std::string outname = + "out/" + file.first.substr(file.first.find_last_of("/"), string::npos) + + ".slice"; + // llvm::errs() << outname; + std::ofstream out(outname, std::ios_base::out | std::ios_base::trunc); + out << file.second << endl; + } + if (true) { std::ofstream out("out/" + outPath + ".c"); for (const auto &file : file_lines) { @@ -145,6 +154,7 @@ void copy_files(map> &file_lines, string outPath) { template void process_results(ProjectIRDB &DB, IFDSSolver &solver, LLVMBasedBackwardsICFG &cg, string outPath) { + map file_slices; map> slice_instruction; llvm::dbgs() << "SOLVING DONE\n"; for (auto *const module : DB.getAllModules()) { @@ -251,7 +261,8 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, if (first) { auto line = psr::getLineFromIR(p.first); // llvm::dbgs() << "TEst jr\n"; - llvm::dbgs() << psr::getSrcCodeFromIR(p.first) << "\t" << line << "\n"; + // llvm::dbgs() << psr::getSrcCodeFromIR(p.first) << "\t" << line << + // "\n"; auto end_line = psr::getFunctionHeaderLines(p.first); for (unsigned int l = line; l <= end_line; ++l) { file_lines[file].insert(l); @@ -287,6 +298,8 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, if (auto *scope = dyn_cast(inst->getDebugLoc().getScope())) { block_lines.insert(line); + // TODO jr + file_lines[file].insert(line); file_lines[file].insert(scope->getLine()); } } @@ -304,16 +317,24 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, } } } - auto lines = add_block(file, &block_lines); - for (auto line : *lines) { - file_lines[file].insert(line); - } + // auto lines = add_block(file, &block_lines); + // for (auto line : *lines) { + // file_lines[file].insert(line); + // } + // TODO jr + // std::string slices = add_block(file, &file_lines[file]); + // file_slices.emplace(file, slices); } - copy_files(file_lines, outPath); + for (const auto &f : file_lines) { + std::string slices = add_block(f.first, &f.second); + file_slices.emplace(f.first, slices); + } + + copy_files(file_lines, file_slices, outPath); } std::string createSlice(string target, const set &entrypoints, - const vector &terms,string outPath) { + const vector &terms, string outPath) { ProjectIRDB DB({std::move(target)}, IRDBOptions::WPA); initializeLogger(false); // initializeLogger(true); @@ -421,7 +442,7 @@ int main(int argc, const char **argv) { // TODO USAGE return -1; } -// std::cout << "Current path is " << bofs::current_path() << '\n'; + // std::cout << "Current path is " << bofs::current_path() << '\n'; const auto target = argv[1]; std::ifstream in(argv[2]); json j; @@ -435,7 +456,7 @@ int main(int argc, const char **argv) { } std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); - createSlice(target, entrypoints, terms,outPath); + createSlice(target, entrypoints, terms, outPath); std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); std::cout << "Time difference = " << std::chrono::duration_cast(end - @@ -458,7 +479,6 @@ int main(int argc, const char **argv) { return 0; } - std::set NormalFlowFunction::computeTargets(SlicerFact source) { set facts; @@ -638,5 +658,3 @@ RetFlowFunction::computeTargets(SlicerFact source) { #endif return facts; } - - diff --git a/tools/module-extractor/source_utils.h b/tools/module-extractor/source_utils.h new file mode 100644 index 0000000000..e9ddc440b7 --- /dev/null +++ b/tools/module-extractor/source_utils.h @@ -0,0 +1,86 @@ +#ifndef PHASAR_SOURCE_UTILS_H +#define PHASAR_SOURCE_UTILS_H + +#include +#include +#include +#include + +#include +#include +#include + +namespace utils { + +inline clang::PresumedLoc getLocationAsWritten(clang::SourceLocation loc, + const clang::SourceManager &sm) { + return sm.getPresumedLoc(loc); +} + +// https://github.com/llvm/llvm-project/blob/main/clang/lib/CodeGen/CGDebugInfo.cpp#L470 +inline unsigned int getLineFromSourceLocation(const clang::PresumedLoc &loc) { + return loc.getLine(); +} + +inline bool isInTargetFile(const clang::PresumedLoc &loc, + const clang::SourceManager &sm) { + return sm.getMainFileID() == loc.getFileID(); +} + +inline bool isInWhitelist(unsigned int line, + const std::set &lines) { + return lines.find(line) != lines.end(); +} + +/** + * inclusive + * @param lineBegin + * @param lineEnd + * @param lines + * @return + */ +inline bool isAnyInRangeInWhitelist(unsigned int lineBegin, + unsigned int lineEnd, + const std::set &lines) { + assert(lineBegin <= lineEnd); + return lines.lower_bound(lineBegin) != lines.upper_bound(lineEnd); +} + +inline bool shouldBeSliced(const clang::Decl *decl, + const clang::SourceManager &sm, + const std::set &lines) { + if (llvm::isa(decl)) { + return true; + } + if (sm.getFileID(sm.getSpellingLoc(decl->getBeginLoc())) != + sm.getMainFileID()) { + return false; + } + // return true; + return lines.lower_bound(sm.getPresumedLineNumber(decl->getBeginLoc())) != + lines.upper_bound(sm.getPresumedLineNumber(decl->getEndLoc())); +} + +inline bool shouldBeSliced(const clang::Stmt *stmt, + const clang::SourceManager &sm, + const std::set &lines) { + // if (sm.getFileID(sm.getSpellingLoc(stmt->getBeginLoc())) != + // sm.getMainFileID()) { + // return false; + // } + if (llvm::isa(stmt) || + llvm::isa(stmt) || + llvm::isa(stmt) || + llvm::isa(stmt) || + llvm::isa(stmt) || + llvm::isa(stmt)) { + return true; + } + + return lines.lower_bound(sm.getPresumedLineNumber(stmt->getBeginLoc())) != + lines.upper_bound(sm.getPresumedLineNumber(stmt->getEndLoc())); +} + +} // namespace utils + +#endif // PHASAR_SOURCE_UTILS_H From 889b582e78c246aaf6925b237a0d351f3b082e73 Mon Sep 17 00:00:00 2001 From: jr Date: Wed, 17 Nov 2021 21:47:52 +0100 Subject: [PATCH 23/42] Only print separators if required --- .../module-extractor/SelectiveDeclPrinter.cpp | 53 +++++++++++-------- tools/module-extractor/SelectiveDeclPrinter.h | 6 +-- 2 files changed, 35 insertions(+), 24 deletions(-) diff --git a/tools/module-extractor/SelectiveDeclPrinter.cpp b/tools/module-extractor/SelectiveDeclPrinter.cpp index e123548a4a..9bf43c664f 100644 --- a/tools/module-extractor/SelectiveDeclPrinter.cpp +++ b/tools/module-extractor/SelectiveDeclPrinter.cpp @@ -19,6 +19,7 @@ #include "SelectiveStmtPrinter.h" #include "source_utils.h" +#include #include #include @@ -47,17 +48,18 @@ class DeclPrinterFiltering : public DeclVisitor { public: #define PTR(CLASS) typename std::add_pointer::type #define DISPATCH(NAME, CLASS) \ - return static_cast(this)->Visit##NAME( \ + static_cast(this)->Visit##NAME( \ static_cast(D)) - void Visit(PTR(Decl) D) { + bool Visit(PTR(Decl) D) { if (!utils::shouldBeSliced(D, Context.getSourceManager(), lines)) { - return; + return false; } switch (D->getKind()) { #define DECL(DERIVED, BASE) \ case Decl::DERIVED: \ - DISPATCH(DERIVED##Decl, DERIVED##Decl); + DISPATCH(DERIVED##Decl, DERIVED##Decl); \ + return true; #define ABSTRACT_DECL(DECL) #include "clang/AST/DeclNodes.inc" } @@ -183,26 +185,25 @@ class DeclPrinterFiltering : public DeclVisitor { } // namespace namespace selective_printer { -void print(const Decl *decl, const std::set &lines, +bool print(const Decl *decl, const std::set &lines, raw_ostream &Out, const PrintingPolicy &Policy, unsigned Indentation, bool PrintInstantiation) { DeclPrinterFiltering Printer(lines, Out, Policy, decl->getASTContext(), Indentation, PrintInstantiation); - Printer.Visit(const_cast(decl)); + return Printer.Visit(const_cast(decl)); } -void print(const Decl *decl, const std::set &lines, +bool print(const Decl *decl, const std::set &lines, raw_ostream &Out, unsigned Indentation, bool PrintInstantiation) { - print(decl, lines, Out, decl->getASTContext().getPrintingPolicy(), - Indentation, PrintInstantiation); + return print(decl, lines, Out, decl->getASTContext().getPrintingPolicy(), + Indentation, PrintInstantiation); } -void printGroup(Decl **Begin, unsigned NumDecls, +bool printGroup(Decl **Begin, unsigned NumDecls, const std::set &lines, raw_ostream &Out, const PrintingPolicy &Policy, unsigned Indentation) { if (NumDecls == 1) { - print(*Begin, lines, Out, Policy, Indentation); - return; + return print(*Begin, lines, Out, Policy, Indentation); } Decl **End = Begin + NumDecls; @@ -212,6 +213,7 @@ void printGroup(Decl **Begin, unsigned NumDecls, PrintingPolicy SubPolicy(Policy); + bool printed = false; bool isFirst = true; for (; Begin != End; ++Begin) { if (isFirst) { @@ -225,8 +227,9 @@ void printGroup(Decl **Begin, unsigned NumDecls, SubPolicy.IncludeTagDefinition = false; SubPolicy.SuppressSpecifiers = true; } - print(*Begin, lines, Out, SubPolicy, Indentation); + printed |= print(*Begin, lines, Out, SubPolicy, Indentation); } + return printed; } } // namespace selective_printer @@ -359,9 +362,11 @@ void DeclPrinterFiltering::printDeclType(QualType T, StringRef DeclName, void DeclPrinterFiltering::ProcessDeclGroup(SmallVectorImpl &Decls) { this->Indent(); - selective_printer::printGroup(Decls.data(), Decls.size(), this->lines, Out, - Policy, Indentation); - Out << ";\n"; + bool printed = selective_printer::printGroup( + Decls.data(), Decls.size(), this->lines, Out, Policy, Indentation); + if (printed) { + Out << ";\n"; + } Decls.clear(); } @@ -522,7 +527,7 @@ void DeclPrinterFiltering::VisitDeclContext(DeclContext *DC, bool Indent) { } this->Indent(); - Visit(*D); + bool printed = Visit(*D); // FIXME: Need to be able to tell the DeclPrinter when const char *Terminator = nullptr; @@ -555,8 +560,11 @@ void DeclPrinterFiltering::VisitDeclContext(DeclContext *DC, bool Indent) { } else Terminator = ";"; - if (Terminator) - Out << Terminator; + if (Terminator) { + if (printed || std::strcmp(Terminator, ";") != 0) { + Out << Terminator; + } + } if (!Policy.TerseOutput && ((isa(*D) && cast(*D)->doesThisDeclarationHaveABody()) || @@ -565,8 +573,11 @@ void DeclPrinterFiltering::VisitDeclContext(DeclContext *DC, bool Indent) { ->getTemplatedDecl() ->doesThisDeclarationHaveABody()))) ; // StmtPrinter already added '\n' after CompoundStmt. - else - Out << "\n"; + else { + if (printed) { + Out << "\n"; + } + } // Declare target attribute is special one, natural spelling for the pragma // assumes "ending" construct so print it here. diff --git a/tools/module-extractor/SelectiveDeclPrinter.h b/tools/module-extractor/SelectiveDeclPrinter.h index f7621eb3b2..b695336026 100644 --- a/tools/module-extractor/SelectiveDeclPrinter.h +++ b/tools/module-extractor/SelectiveDeclPrinter.h @@ -8,15 +8,15 @@ #include namespace selective_printer { -void print(const clang::Decl *decl, const std::set &lines, +bool print(const clang::Decl *decl, const std::set &lines, llvm::raw_ostream &Out, const clang::PrintingPolicy &Policy, unsigned Indentation = 0, bool PrintInstantiation = false); -void print(const clang::Decl *decl, const std::set &lines, +bool print(const clang::Decl *decl, const std::set &lines, llvm::raw_ostream &Out, unsigned Indentation = 0, bool PrintInstantiation = false); -void printGroup(clang::Decl **Begin, unsigned NumDecls, +bool printGroup(clang::Decl **Begin, unsigned NumDecls, const std::set &lines, llvm::raw_ostream &Out, const clang::PrintingPolicy &Policy, unsigned Indentation = 0); } // namespace selective_printer From 8133dde17118f4465449e962947b00cb6ea87974 Mon Sep 17 00:00:00 2001 From: jr Date: Thu, 25 Nov 2021 13:21:00 +0100 Subject: [PATCH 24/42] Add basic slicing extractor --- CMakeLists.txt | 2 +- tools/module-extractor/CMakeLists.txt | 4 + tools/module-extractor/back_mapper.cpp | 25 +-- tools/module-extractor/back_mapper.h | 6 +- tools/module-extractor/printer.cpp | 228 ++++++++++++++++++++++++- tools/module-extractor/printer.h | 61 ++++++- tools/module-extractor/slicer.cpp | 13 +- tools/module-extractor/source_utils.h | 17 +- 8 files changed, 321 insertions(+), 35 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e9589b7e28..3dac227c1a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,7 +23,7 @@ if (NOT CMAKE_BUILD_TYPE) default is 'Debug')" FORCE) endif () if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -MP -fvisibility-inlines-hidden -fstack-protector-strong -ffunction-sections -fdata-sections -pipe -g") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -MP -fvisibility-inlines-hidden -fstack-protector-strong -ffunction-sections -fdata-sections -fno-limit-debug-info -march=native -pipe -g") else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -MP -fvisibility-inlines-hidden -fstack-protector-strong -ffunction-sections -fdata-sections -pipe -march=native") endif() diff --git a/tools/module-extractor/CMakeLists.txt b/tools/module-extractor/CMakeLists.txt index acb6d21078..2a4f2b640c 100644 --- a/tools/module-extractor/CMakeLists.txt +++ b/tools/module-extractor/CMakeLists.txt @@ -11,6 +11,8 @@ if (PHASAR_IN_TREE) tools/module-extractor/SelectiveDeclPrinter.h tools/module-extractor/SelectiveStmtPrinter.cpp tools/module-extractor/SelectiveStmtPrinter.h + tools/module-extractor/printer.cpp + tools/module-extractor/printer.h ) else () add_executable(slicer @@ -25,6 +27,8 @@ else () ../module-extractor/SelectiveDeclPrinter.h ../module-extractor/SelectiveStmtPrinter.cpp ../module-extractor/SelectiveStmtPrinter.h + ../module-extractor/printer.cpp + ../module-extractor/printer.h ) endif () diff --git a/tools/module-extractor/back_mapper.cpp b/tools/module-extractor/back_mapper.cpp index 281a60974b..dd00e9fc29 100644 --- a/tools/module-extractor/back_mapper.cpp +++ b/tools/module-extractor/back_mapper.cpp @@ -148,16 +148,20 @@ class RewriteSourceVisitor class RewriteSourceConsumer : public clang::ASTConsumer { public: RewriteSourceConsumer(const std::set *target_lines, - std::string &output) + std::vector &output) : target_lines(target_lines), output(output) {} void HandleTranslationUnit(clang::ASTContext &Context) override { // Traversing the translation unit decl via a RecursiveASTVisitor // will visit all nodes in the AST. // llvm::dbgs << Context.getTranslationUnitDecl(); { - llvm::raw_string_ostream out(output); - selective_printer::print(Context.getTranslationUnitDecl(), *target_lines, - out); + // llvm::raw_string_ostream out(output); + // selective_printer::print(Context.getTranslationUnitDecl(), + // *target_lines, + // out); + printer::DeclPrinter Printer(*target_lines, Context); + Printer.Visit(Context.getTranslationUnitDecl()); + output = Printer.GetSlices(); } // RewriteSourceVisitor Visitor(Context, target_lines, resulting_lines); // Visitor.TraverseDecl(Context.getTranslationUnitDecl()); @@ -167,7 +171,7 @@ class RewriteSourceConsumer : public clang::ASTConsumer { // A RecursiveASTVisitor implementation. const std::set *target_lines; - std::string &output; + std::vector &output; }; class RewriteSourceAction // : public clang::ASTFrontendAction @@ -175,7 +179,7 @@ class RewriteSourceAction public: RewriteSourceAction(const std::set *target_lines, - std::string &output) + std::vector &output) : target_lines(target_lines), output(output) {} std::unique_ptr newASTConsumer() { @@ -185,13 +189,13 @@ class RewriteSourceAction private: const std::set *target_lines; - std::string &output; + std::vector &output; }; } // namespace -std::string add_block(std::string file, - const std::set *target_lines) { +std::vector +add_block(std::string file, const std::set *target_lines) { std::string err; auto db = clang::tooling::CompilationDatabase::autoDetectFromDirectory( boost::filesystem::path(file).parent_path().string(), err); @@ -201,9 +205,10 @@ std::string add_block(std::string file, std::vector Sources; Sources.push_back(file); clang::tooling::ClangTool Tool(*db, Sources); - std::string buffer; + std::vector buffer; Tool.run(clang::tooling::newFrontendActionFactory( new RewriteSourceAction(target_lines, buffer)) .get()); + printer::mergeSlices(buffer); return buffer; } diff --git a/tools/module-extractor/back_mapper.h b/tools/module-extractor/back_mapper.h index 4151bf72aa..e27a47341c 100644 --- a/tools/module-extractor/back_mapper.h +++ b/tools/module-extractor/back_mapper.h @@ -1,14 +1,16 @@ #ifndef PHASAR_BACK_MAPPER_H #define PHASAR_BACK_MAPPER_H +#include "printer.h" #include #include +#include namespace clang { class SourceLocation; }; -std::string add_block(std::string file, - const std::set *target_lines); +std::vector +add_block(std::string file, const std::set *target_lines); #endif // PHASAR_BACK_MAPPER_H diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp index 577ff12eeb..bc147599fd 100644 --- a/tools/module-extractor/printer.cpp +++ b/tools/module-extractor/printer.cpp @@ -3,28 +3,238 @@ // #include "printer.h" +#include "source_utils.h" + +#include +#include + +#include +#include +#include +#include + +namespace printer { void DeclPrinter::VisitFunctionDecl(const clang::FunctionDecl *decl) { - assert(decl->hasBody()); - if(printer::isAnyInWhitelist(decl, TargetLines, SM)) { + if (!decl->hasBody()) { + llvm_unreachable("Function declarations are not yet supported."); + } + if (printer::isAnyInWhitelist(decl, TargetLines, SM)) { + // const auto next = clang::Lexer::findLocationAfterToken( + // decl->getBeginLoc(), clang::tok::l_brace, SM, CTX.getLangOpts(), + // false); + // next.dump(SM); + const auto text = clang::Lexer::getSourceText( + clang::CharSourceRange::getTokenRange(decl->getBeginLoc(), + decl->getBody()->getBeginLoc()), + SM, CTX.getLangOpts()); + this->Slices.emplace_back( + decl->getBeginLoc(), + utils::getEndOfToken(decl->getBody()->getBeginLoc(), SM, + CTX.getLangOpts())); + llvm::errs() << text; + const auto text2 = clang::Lexer::getSourceText( + clang::CharSourceRange::getTokenRange(decl->getBody()->getEndLoc(), + decl->getEndLoc()), + SM, CTX.getLangOpts()); + this->Slices.emplace_back( + decl->getBody()->getEndLoc(), + utils::getEndOfToken(decl->getEndLoc(), SM, CTX.getLangOpts())); + llvm::errs() << text2; } - llvm_unreachable("test"); + // llvm_unreachable("test"); } void DeclPrinter::VisitDecl(const clang::Decl *decl) { - llvm_unreachable("Hit unsupported decl"); + if (!decl->isImplicit()) { + llvm_unreachable("Hit unsupported decl"); + } } DeclPrinter::DeclPrinter(const std::set &targetLines, const clang::ASTContext &ctx) : TargetLines(targetLines), SM(ctx.getSourceManager()), CTX(ctx) {} + +void DeclPrinter::VisitTranslationUnitDecl( + const clang::TranslationUnitDecl *decl) { + decl->dump(); + for (const auto &D : decl->decls()) { + Visit(D); + } +} +std::vector DeclPrinter::GetSlices() const { + std::vector Result; + for (const auto &S : Slices) { + Result.emplace_back(S, SM); + } + return Result; +} + void StmtPrinterFiltering::VisitStmt(const clang::Stmt *stmt) { llvm_unreachable("Hit unsupported stmt"); } void StmtPrinterFiltering::VisitCompoundStmt(const clang::CompoundStmt *stmt) { llvm_unreachable("unimplemented"); } -StmtPrinterFiltering::StmtPrinterFiltering(const std::set &targetLines) +StmtPrinterFiltering::StmtPrinterFiltering( + const std::set &targetLines) : TargetLines(targetLines) {} -printer::Slice::Slice(clang::SourceLocation begin, - clang::SourceLocation end, - printer::Terminator terminator) - : Begin(begin), End(end), Terminator(terminator) {} +void StmtPrinterFiltering::VisitWhileStmt(const clang::WhileStmt *Stmt) { + llvm_unreachable("WhileStmt"); +} +void StmtPrinterFiltering::VisitForStmt(const clang::ForStmt *Stmt) { + llvm_unreachable("ForStmt"); +} +void StmtPrinterFiltering::VisitDoStmt(const clang::DoStmt *Stmt) { + llvm_unreachable("DoStmt"); +} +void StmtPrinterFiltering::VisitSwitchStmt(const clang::SwitchStmt *Stmt) { + llvm_unreachable("SwitchStmt"); +} +void StmtPrinterFiltering::VisitReturnStmt(const clang::ReturnStmt *Stmt) { + llvm_unreachable("ReturnStatement"); +} +printer::Slice::Slice(clang::SourceLocation Begin, clang::SourceLocation End) + : Begin(Begin), End(End) { + assert(Begin.isValid()); + assert(End.isValid()); +} +FileOffset::FileOffset(unsigned int Line, unsigned int Column) + : Line(Line), Column(Column) {} +bool FileOffset::operator<(const FileOffset &rhs) const { + if (Line < rhs.Line) { + return true; + } + if (rhs.Line < Line) { + return false; + } + return Column < rhs.Column; +} +bool FileOffset::operator>(const FileOffset &rhs) const { return rhs < *this; } +bool FileOffset::operator<=(const FileOffset &rhs) const { + return !(rhs < *this); +} +bool FileOffset::operator>=(const FileOffset &rhs) const { + return !(*this < rhs); +} +std::ostream &operator<<(std::ostream &os, const FileOffset &offset) { + os << "[" << offset.Line << ":" << offset.Column << "]"; + return os; +} +FileOffset::FileOffset(const clang::PresumedLoc &Loc) + : Line(Loc.getLine()), Column(Loc.getColumn()) { + assert(Loc.isValid()); +} +unsigned int FileOffset::GetSliceColumn() const { + assert(Column >= 1); + return Column - 1; +} +unsigned int FileOffset::GetSliceLine() const { + assert(Line >= 1); + return Line - 1; +} +FileSlice::FileSlice(FileOffset Begin, FileOffset End) + : Begin(Begin), End(End) { + assert(Begin < End); +} +std::ostream &operator<<(std::ostream &os, const FileSlice &slice) { + os << slice.Begin << " - " << slice.End; + return os; +} +FileSlice::FileSlice(const Slice &Slice, const clang::SourceManager &SM) + : Begin(utils::getLocationAsWritten(Slice.Begin, SM)), + End(utils::getLocationAsWritten(Slice.End, SM)) {} +void mergeSlices(std::vector &Slices) { + assert(!Slices.empty()); + std::sort( + Slices.begin(), Slices.end(), + [](const FileSlice &a, const FileSlice &b) { return a.Begin < b.Begin; }); + auto OutputIndex = Slices.begin(); + for (std::size_t I = 1; I < Slices.size(); I++) { + if (OutputIndex->End >= Slices[I].Begin) { + OutputIndex->End = std::max(OutputIndex->End, Slices[I].End); + } else { + OutputIndex++; + *OutputIndex = Slices[I]; + } + } + OutputIndex++; + Slices.erase(OutputIndex, Slices.end()); +} +void extractSlices(const std::string &FileIn, const std::string &FileOut, + const std::vector &Slices) { + assert(std::is_sorted(Slices.begin(), Slices.end(), + [](const FileSlice &a, const FileSlice &b) { + return a.Begin < b.Begin; + })); + std::ifstream Input(FileIn); + if (!Input.is_open()) { + throw std::runtime_error("Could not open input file " + FileIn); + } + std::ofstream Output(FileOut); + if (!Output.is_open()) { + throw std::runtime_error("Could not open output file " + FileOut); + } + + std::string Line; + unsigned int LineNumber = 0; + auto PreviousSlice = Slices.end(); + auto CurrentSlice = Slices.begin(); + while (std::getline(Input, Line)) { + while (true) { + // Case: We are in text befor the slice + if (CurrentSlice == Slices.end() || + CurrentSlice->Begin.GetSliceLine() > LineNumber) { + Output << "\n"; + break; + } + // Handle the following cases: + // We are in a completely sliced line, excluding the end or begin: Copy + // the complete line + // We are in the first line: Pad from the previous slice with spaces + // and add the text + // We are in the last line: Add text, check if + // others slices are needed in the same line + if (CurrentSlice->Begin.GetSliceLine() < LineNumber && + CurrentSlice->End.GetSliceLine() > LineNumber) { + Output << Line << "\n"; + break; + } + if (CurrentSlice->Begin.GetSliceLine() == LineNumber) { + if (PreviousSlice != Slices.end() && + PreviousSlice->End.GetSliceLine() == LineNumber) { + // We need to pad only after the last slice + for (unsigned int I = 0; I < PreviousSlice->End.GetSliceColumn() - + CurrentSlice->Begin.GetSliceColumn(); + I++) { + Output << ' '; + } + } else { + for (unsigned int I = 0; I < CurrentSlice->Begin.GetSliceColumn(); + I++) { + Output << ' '; + } + } + // Copy our slice + if (CurrentSlice->End.GetSliceLine() == LineNumber) { + Output << Line.substr(CurrentSlice->Begin.GetSliceColumn(), + CurrentSlice->End.GetSliceColumn() - + CurrentSlice->Begin.GetSliceColumn()); + } else { + Output << Line.substr(CurrentSlice->Begin.GetSliceColumn()) << "\n"; + break; + } + } else { + // Handle end case + Output << Line.substr(0, CurrentSlice->End.GetSliceColumn()); + } + + PreviousSlice = CurrentSlice; + CurrentSlice++; + if (CurrentSlice == Slices.end()) { + Output << '\n'; + break; + } + } + LineNumber++; + } +} +} // namespace printer \ No newline at end of file diff --git a/tools/module-extractor/printer.h b/tools/module-extractor/printer.h index ddf44a6a05..bbd9f0d1e5 100644 --- a/tools/module-extractor/printer.h +++ b/tools/module-extractor/printer.h @@ -8,9 +8,11 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -26,17 +28,55 @@ bool isAnyInWhitelist(const T *Decl, const std::set &Lines, return Lines.lower_bound(Begin) != Lines.upper_bound(End); } -enum class Terminator { None, Semicolon }; - struct Slice { - Slice(clang::SourceLocation begin, clang::SourceLocation end, - Terminator terminator); + Slice(clang::SourceLocation Begin, clang::SourceLocation End); const clang::SourceLocation Begin; const clang::SourceLocation End; - const Terminator Terminator; }; -} // namespace printer +struct FileOffset { + FileOffset(unsigned int Line, unsigned int Column); + FileOffset(const clang::PresumedLoc &Loc); + bool operator<(const FileOffset &rhs) const; + bool operator>(const FileOffset &rhs) const; + bool operator<=(const FileOffset &rhs) const; + bool operator>=(const FileOffset &rhs) const; + friend std::ostream &operator<<(std::ostream &os, const FileOffset &offset); + + /** + * + * @return Zero based column offset + */ + unsigned int GetSliceColumn() const; + + /** + * + * @return Zero based line offset + */ + unsigned int GetSliceLine() const; + +private: + unsigned int Line; + unsigned int Column; +}; + +/** + * End is just one character after the target slice + */ +struct FileSlice { + FileSlice(FileOffset Begin, FileOffset End); + FileSlice(const Slice &Slice, const clang::SourceManager &SM); + friend std::ostream &operator<<(std::ostream &os, const FileSlice &slice); + FileOffset Begin; + FileOffset End; +}; + +void mergeSlices(std::vector &Slices); + +void extractSlices(const std::string &FileIn, const std::string &FileOut, + const std::vector &Slices); + +// namespace printer class StmtPrinterFiltering : public clang::ConstStmtVisitor { @@ -44,6 +84,11 @@ class StmtPrinterFiltering StmtPrinterFiltering(const std::set &targetLines); void VisitCompoundStmt(const clang::CompoundStmt *stmt); void VisitStmt(const clang::Stmt *stmt); + void VisitWhileStmt(const clang::WhileStmt *Stmt); + void VisitForStmt(const clang::ForStmt *Stmt); + void VisitDoStmt(const clang::DoStmt *Stmt); + void VisitSwitchStmt(const clang::SwitchStmt *Stmt); + void VisitReturnStmt(const clang::ReturnStmt *Stmt); private: const std::set &TargetLines; @@ -54,6 +99,8 @@ class DeclPrinter : public clang::ConstDeclVisitor { const clang::ASTContext &ctx); void VisitFunctionDecl(const clang::FunctionDecl *decl); void VisitDecl(const clang::Decl *decl); + void VisitTranslationUnitDecl(const clang::TranslationUnitDecl *decl); + std::vector GetSlices() const; private: std::vector Slices; @@ -62,4 +109,6 @@ class DeclPrinter : public clang::ConstDeclVisitor { const clang::ASTContext &CTX; }; +} // namespace printer + #endif // PHASAR_PRINTER_H diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index d804e15fb7..6445df54b8 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -102,7 +102,7 @@ class IFDSSlicer : public IFDSTabulationProblem> { }; void copy_files(map> &file_lines, - map &file_slices, string outPath) { + map> &file_slices, string outPath) { for (const auto &file : file_lines) { std::ifstream in(file.first); std::ofstream out( @@ -121,11 +121,12 @@ void copy_files(map> &file_lines, } for (const auto &file : file_slices) { std::string outname = - "out/" + file.first.substr(file.first.find_last_of("/"), string::npos) + + "out" + file.first.substr(file.first.find_last_of("/"), string::npos) + ".slice"; + printer::extractSlices(file.first, outname, file.second); // llvm::errs() << outname; - std::ofstream out(outname, std::ios_base::out | std::ios_base::trunc); - out << file.second << endl; +// std::ofstream out(outname, std::ios_base::out | std::ios_base::trunc); +// out << file.second << endl; } if (true) { @@ -154,7 +155,7 @@ void copy_files(map> &file_lines, template void process_results(ProjectIRDB &DB, IFDSSolver &solver, LLVMBasedBackwardsICFG &cg, string outPath) { - map file_slices; + map> file_slices; map> slice_instruction; llvm::dbgs() << "SOLVING DONE\n"; for (auto *const module : DB.getAllModules()) { @@ -326,7 +327,7 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, // file_slices.emplace(file, slices); } for (const auto &f : file_lines) { - std::string slices = add_block(f.first, &f.second); + const auto slices = add_block(f.first, &f.second); file_slices.emplace(f.first, slices); } diff --git a/tools/module-extractor/source_utils.h b/tools/module-extractor/source_utils.h index e9ddc440b7..55f529a665 100644 --- a/tools/module-extractor/source_utils.h +++ b/tools/module-extractor/source_utils.h @@ -2,16 +2,31 @@ #define PHASAR_SOURCE_UTILS_H #include +#include #include #include #include +#include #include -#include + #include namespace utils { +/** + * Return the location directy AFTER the end of the token + * @param Loc + * @param SM + * @param LangOpts + * @return + */ +inline clang::SourceLocation getEndOfToken(clang::SourceLocation Loc, + const clang::SourceManager &SM, + const clang::LangOptions &LangOpts) { + return clang::Lexer::getLocForEndOfToken(Loc, 0, SM, LangOpts); +} + inline clang::PresumedLoc getLocationAsWritten(clang::SourceLocation loc, const clang::SourceManager &sm) { return sm.getPresumedLoc(loc); From bbf384b55c74f828edcf5dc49d5f96af60479db1 Mon Sep 17 00:00:00 2001 From: jr Date: Tue, 30 Nov 2021 20:44:15 +0100 Subject: [PATCH 25/42] Add Source Information based Slicer --- CMakeLists.txt | 2 +- tools/module-extractor/CMakeLists.txt | 2 + tools/module-extractor/back_mapper.cpp | 5 +- tools/module-extractor/printer.cpp | 322 ++++++++++++++++++++---- tools/module-extractor/printer.h | 72 ++++-- tools/module-extractor/source_utils.cpp | 71 ++++++ tools/module-extractor/source_utils.h | 35 +++ 7 files changed, 439 insertions(+), 70 deletions(-) create mode 100644 tools/module-extractor/source_utils.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 3dac227c1a..4a81db5773 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ endif () if(CMAKE_BUILD_TYPE STREQUAL "Debug") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -MP -fvisibility-inlines-hidden -fstack-protector-strong -ffunction-sections -fdata-sections -fno-limit-debug-info -march=native -pipe -g") else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -MP -fvisibility-inlines-hidden -fstack-protector-strong -ffunction-sections -fdata-sections -pipe -march=native") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -MP -fvisibility-inlines-hidden -fstack-protector-strong -ffunction-sections -fdata-sections -fno-limit-debug-info -pipe -march=native") endif() # Enable testing diff --git a/tools/module-extractor/CMakeLists.txt b/tools/module-extractor/CMakeLists.txt index 2a4f2b640c..d8c7a9ed10 100644 --- a/tools/module-extractor/CMakeLists.txt +++ b/tools/module-extractor/CMakeLists.txt @@ -7,6 +7,7 @@ if (PHASAR_IN_TREE) tools/module-extractor/printer.cpp tools/module-extractor/printer.h tools/module-extractor/source_utils.h + tools/module-extractor/source_utils.cpp tools/module-extractor/SelectiveDeclPrinter.cpp tools/module-extractor/SelectiveDeclPrinter.h tools/module-extractor/SelectiveStmtPrinter.cpp @@ -21,6 +22,7 @@ else () ../module-extractor/back_mapper.h # ../module-extractor/StmtPrinter.cpp ../module-extractor/source_utils.h + ../module-extractor/source_utils.cpp ../module-extractor/printer.cpp ../module-extractor/printer.h ../module-extractor/SelectiveDeclPrinter.cpp diff --git a/tools/module-extractor/back_mapper.cpp b/tools/module-extractor/back_mapper.cpp index dd00e9fc29..d18cff75eb 100644 --- a/tools/module-extractor/back_mapper.cpp +++ b/tools/module-extractor/back_mapper.cpp @@ -159,9 +159,8 @@ class RewriteSourceConsumer : public clang::ASTConsumer { // selective_printer::print(Context.getTranslationUnitDecl(), // *target_lines, // out); - printer::DeclPrinter Printer(*target_lines, Context); - Printer.Visit(Context.getTranslationUnitDecl()); - output = Printer.GetSlices(); + output = printer::DeclPrinter::GetFileSlices( + Context.getTranslationUnitDecl(), *target_lines, Context); } // RewriteSourceVisitor Visitor(Context, target_lines, resulting_lines); // Visitor.TraverseDecl(Context.getTranslationUnitDecl()); diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp index bc147599fd..2a54e094ce 100644 --- a/tools/module-extractor/printer.cpp +++ b/tools/module-extractor/printer.cpp @@ -17,86 +17,310 @@ namespace printer { void DeclPrinter::VisitFunctionDecl(const clang::FunctionDecl *decl) { if (!decl->hasBody()) { llvm_unreachable("Function declarations are not yet supported."); - } - if (printer::isAnyInWhitelist(decl, TargetLines, SM)) { - // const auto next = clang::Lexer::findLocationAfterToken( - // decl->getBeginLoc(), clang::tok::l_brace, SM, CTX.getLangOpts(), - // false); - // next.dump(SM); - const auto text = clang::Lexer::getSourceText( - clang::CharSourceRange::getTokenRange(decl->getBeginLoc(), - decl->getBody()->getBeginLoc()), - SM, CTX.getLangOpts()); - this->Slices.emplace_back( - decl->getBeginLoc(), - utils::getEndOfToken(decl->getBody()->getBeginLoc(), SM, - CTX.getLangOpts())); + } else { + if (printer::isAnyInWhitelist(decl, TargetLines, SM)) { + // const auto next = clang::Lexer::findLocationAfterToken( + // decl->getBeginLoc(), clang::tok::l_brace, SM, CTX.getLangOpts(), + // false); + // next.dump(SM); + // const auto text = clang::Lexer::getSourceText( + // clang::CharSourceRange::getTokenRange(decl->getBeginLoc(), + // decl->getBody()->getBeginLoc()), + // SM, LO); + // decl->dump(); + // decl->getBeginLoc().dump(SM); + // decl->getEndLoc().dump(SM); + this->Slices.emplace_back( + SM.getExpansionRange(decl->getBeginLoc()).getBegin(), + utils::getEndOfToken( + SM.getExpansionRange(decl->getBody()->getBeginLoc()).getBegin(), + SM, LO)); - llvm::errs() << text; - const auto text2 = clang::Lexer::getSourceText( - clang::CharSourceRange::getTokenRange(decl->getBody()->getEndLoc(), - decl->getEndLoc()), - SM, CTX.getLangOpts()); - this->Slices.emplace_back( - decl->getBody()->getEndLoc(), - utils::getEndOfToken(decl->getEndLoc(), SM, CTX.getLangOpts())); - llvm::errs() << text2; - } - // llvm_unreachable("test"); + // llvm::errs() << text; + // const auto text2 = clang::Lexer::getSourceText( + // clang::CharSourceRange::getTokenRange(decl->getBody()->getEndLoc(), + // decl->getEndLoc()), + // SM, LO); + this->Slices.emplace_back( + SM.getExpansionRange(decl->getBody()->getEndLoc()).getEnd(), + utils::getEndOfToken(SM.getExpansionRange(decl->getEndLoc()).getEnd(), + SM, LO)); + // llvm::errs() << text2; + const auto Body = StmtPrinterFiltering::GetSlices( + decl->getBody(), TargetLines, CTX, SM, LO); + Slices.insert(Slices.end(), Body.begin(), Body.end()); + } + } } void DeclPrinter::VisitDecl(const clang::Decl *decl) { if (!decl->isImplicit()) { - llvm_unreachable("Hit unsupported decl"); + // TODO + // llvm_unreachable("Hit unsupported decl"); } } -DeclPrinter::DeclPrinter(const std::set &targetLines, - const clang::ASTContext &ctx) - : TargetLines(targetLines), SM(ctx.getSourceManager()), CTX(ctx) {} void DeclPrinter::VisitTranslationUnitDecl( const clang::TranslationUnitDecl *decl) { - decl->dump(); + // decl->dump(); for (const auto &D : decl->decls()) { Visit(D); } } -std::vector DeclPrinter::GetSlices() const { + +DeclPrinter::DeclPrinter(const std::set &Target, + const clang::ASTContext &CTX, + const clang::SourceManager &SM, + const clang::LangOptions &LO) + : TargetLines(Target), CTX(CTX), SM(SM), LO(LO) {} +std::vector DeclPrinter::GetSlices( + const clang::Decl *Decl, const std::set &TargetLines, + const clang::ASTContext &CTX, const clang::SourceManager &SM, + const clang::LangOptions &LO) { + DeclPrinter Visitor(TargetLines, CTX, SM, LO); + Visitor.Visit(Decl); + return Visitor.Slices; +} +std::vector +DeclPrinter::GetFileSlices(const clang::Decl *Decl, + const std::set &TargetLines, + const clang::ASTContext &CTX) { + const auto &SM = CTX.getSourceManager(); + const auto Slices = + DeclPrinter::GetSlices(Decl, TargetLines, CTX, SM, CTX.getLangOpts()); std::vector Result; + Result.reserve(Slices.size()); for (const auto &S : Slices) { Result.emplace_back(S, SM); } return Result; } +void DeclPrinter::VisitVarDecl(const clang::VarDecl *Decl) { + if (isAnyInWhitelist(Decl, TargetLines, SM)) { + Slices.emplace_back( + SM.getExpansionRange(Decl->getBeginLoc()).getBegin(), + utils::getEndOfToken(SM.getExpansionRange(Decl->getEndLoc()).getEnd(), + SM, LO)); + const auto Semicolon = + utils::getSemicolonAfterStmtEndLoc(Decl->getEndLoc(), SM, LO); + assert(Semicolon.isValid()); + Slices.emplace_back(SM.getExpansionRange(Decl->getEndLoc()).getBegin(), + utils::getEndOfToken(Semicolon, SM, LO)); + } +} -void StmtPrinterFiltering::VisitStmt(const clang::Stmt *stmt) { - llvm_unreachable("Hit unsupported stmt"); +bool StmtPrinterFiltering::VisitStmt(const clang::Stmt *Stmt) { + if (isAnyInWhitelist(Stmt, TargetLines, SM)) { + Slices.emplace_back( + SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), + utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), + SM, LO)); + return true; + } + // llvm_unreachable("Hit unsupported stmt"); + return false; } -void StmtPrinterFiltering::VisitCompoundStmt(const clang::CompoundStmt *stmt) { - llvm_unreachable("unimplemented"); +bool StmtPrinterFiltering::VisitCompoundStmt(const clang::CompoundStmt *Stmt) { + Slices.emplace_back( + SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), + utils::getEndOfToken(SM.getExpansionRange(Stmt->getLBracLoc()).getBegin(), + SM, LO)); + Slices.emplace_back( + SM.getExpansionRange(Stmt->getRBracLoc()).getEnd(), + utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, + LO)); + for (const auto *I : Stmt->body()) { + PrintStmt(I); + } + return true; } StmtPrinterFiltering::StmtPrinterFiltering( - const std::set &targetLines) - : TargetLines(targetLines) {} -void StmtPrinterFiltering::VisitWhileStmt(const clang::WhileStmt *Stmt) { - llvm_unreachable("WhileStmt"); + const std::set &TargetLines, const clang::ASTContext &CTX, + const clang::SourceManager &SM, const clang::LangOptions &LO) + : TargetLines(TargetLines), CTX(CTX), SM(SM), LO(LO) {} +bool StmtPrinterFiltering::VisitWhileStmt(const clang::WhileStmt *Stmt) { + if (isAnyInWhitelist(Stmt, TargetLines, SM)) { + + // Stmt->getBeginLoc().dump(SM); + // // // Stmt->getBeginLoc()).dump(SM); + // // SM.getExpansionLoc(Stmt->getBeginLoc()).dump(SM); + // // Stmt->getEndLoc().dump(SM); + // // //Stmt->getEndLoc()).dump(SM); + // // SM.getExpansionLoc(Stmt->getEndLoc()).dump(SM); + // Stmt->getBody()->getBeginLoc().dump(SM); + // SM.getExpansionLoc(Stmt->getBody()->getBeginLoc()).dump(SM); + // utils::findPreviousTokenStart(SM.getFileLoc(Stmt->getBody()->getBeginLoc()), + // SM, LO) + // .dump(SM); + // + // utils::getEndOfToken( + // utils::findPreviousTokenStart( + // SM.getFileLoc(Stmt->getBody()->getBeginLoc()), SM, LO), + // SM, LO) + // .dump(SM); + // SM.getSpellingLoc( + // utils::getEndOfToken(utils::findPreviousTokenStart( + // Stmt->getBody()->getBeginLoc(), SM, + // LO), + // SM, LO)) + // .dump(SM); + + Slices.emplace_back(Slice::generateFromStartAndNext( + Stmt->getBeginLoc(), Stmt->getBody()->getBeginLoc(), SM, LO)); + // SM.getSpellingLoc(Stmt->getBeginLoc()), + // utils::getEndOfToken(utils::findPreviousTokenStart( + // Stmt->getBody()->getBeginLoc(), SM, LO), + // SM, LO)); + PrintStmt(Stmt->getBody(), true); + return true; + } + return false; +} +bool StmtPrinterFiltering::VisitForStmt(const clang::ForStmt *Stmt) { + if (isAnyInWhitelist(Stmt, TargetLines, SM)) { + Slices.emplace_back(Slice::generateFromStartAndNext( + Stmt->getBeginLoc(), Stmt->getBody()->getBeginLoc(), SM, LO)); + PrintStmt(Stmt->getBody(), true); + return true; + } + return false; +} +bool StmtPrinterFiltering::VisitDoStmt(const clang::DoStmt *Stmt) { + if (isAnyInWhitelist(Stmt, TargetLines, SM)) { + Slices.emplace_back(Slice::generateFromStartAndNext( + Stmt->getBeginLoc(), Stmt->getBody()->getBeginLoc(), SM, LO)); + PrintStmt(Stmt->getBody(), true); + Slices.emplace_back( + SM.getExpansionRange(Stmt->getWhileLoc()).getBegin(), + utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), + SM, LO)); + return true; + } + return false; } -void StmtPrinterFiltering::VisitForStmt(const clang::ForStmt *Stmt) { - llvm_unreachable("ForStmt"); +bool StmtPrinterFiltering::VisitSwitchStmt(const clang::SwitchStmt *Stmt) { + if (isAnyInWhitelist(Stmt, TargetLines, SM)) { + Slices.emplace_back(Slice::generateFromStartAndNext( + Stmt->getBeginLoc(), Stmt->getBody()->getBeginLoc(), SM, LO)); + // Stmt->getBody()->dump(); + PrintStmt(Stmt->getBody(), true); + return true; + } + return false; +} + +// bool StmtPrinterFiltering::VisitReturnStmt(const clang::ReturnStmt *Stmt) { +// if (isAnyInWhitelist(Stmt, TargetLines, SM)) { +// Slices.emplace_back( +// SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), +// utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), +// SM, LO)); +// const auto Semicolon = +// utils::getSemicolonAfterStmtEndLoc(Stmt->getEndLoc(), SM, LO); +// assert(Semicolon.isValid()); +// Slices.emplace_back(SM.getExpansionRange(Stmt->getEndLoc()).getBegin(), +// utils::getEndOfToken(Semicolon, SM, LO)); +// return true; +// } +// return false; +// } +std::vector StmtPrinterFiltering::GetSlices( + const clang::Stmt *Stmt, const std::set &TargetLines, + const clang::ASTContext &CTX, const clang::SourceManager &SM, + const clang::LangOptions &LO) { + StmtPrinterFiltering Visitor(TargetLines, CTX, SM, LO); + Visitor.Visit(Stmt); + return Visitor.Slices; +} +void StmtPrinterFiltering::PrintStmt(const clang::Stmt *Stmt, bool required) { + if (Stmt && + (llvm::isa(Stmt) || llvm::isa(Stmt) || + llvm::isa(Stmt) || + llvm::isa(Stmt) || + llvm::isa(Stmt))) { + bool visited = Visit(Stmt); + if (visited || required) { + const auto Semicolon = + utils::getSemicolonAfterStmtEndLoc(Stmt->getEndLoc(), SM, LO); + assert(Semicolon.isValid()); + if (visited) { + Slices.emplace_back(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), + utils::getEndOfToken(Semicolon, SM, LO)); + } else { + Slices.emplace_back(Semicolon, utils::getEndOfToken(Semicolon, SM, LO)); + } + } + } else if (Stmt) { + // Stmt->dump(); + Visit(Stmt); + } else { + llvm_unreachable("Null Stmt"); + } } -void StmtPrinterFiltering::VisitDoStmt(const clang::DoStmt *Stmt) { - llvm_unreachable("DoStmt"); +bool StmtPrinterFiltering::VisitIfStmt(const clang::IfStmt *Stmt) { + if (isAnyInWhitelist(Stmt, TargetLines, SM)) { + // Stmt->getBeginLoc().dump(SM); + // Stmt->getEndLoc().dump(SM); + // Stmt->dump(); + Slices.emplace_back(Slice::generateFromStartAndNext( + Stmt->getBeginLoc(), Stmt->getThen()->getBeginLoc(), SM, LO)); + PrintStmt(Stmt->getThen(), true); + if (Stmt->getElse() && isAnyInWhitelist(Stmt->getElse(), TargetLines, SM)) { + // Stmt->getElseLoc().dump(SM); + // Stmt->getEndLoc().dump(SM); + // SM.getImmediateExpansionRange(Stmt->getEndLoc()).getEnd().dump(SM); + // SM.getExpansionRange(Stmt->getEndLoc()).getEnd().dump(SM); + Slices.emplace_back(Slice::generateFromStartAndNext( + Stmt->getElseLoc(), Stmt->getElse()->getBeginLoc(), SM, LO)); + PrintStmt(Stmt->getElse(), true); + } + return true; + } + return false; } -void StmtPrinterFiltering::VisitSwitchStmt(const clang::SwitchStmt *Stmt) { - llvm_unreachable("SwitchStmt"); +bool StmtPrinterFiltering::VisitCaseStmt(const clang::CaseStmt *Stmt) { + if (isAnyInWhitelist(Stmt, TargetLines, SM)) { + Slices.emplace_back(Slice::generateFromStartAndNext( + Stmt->getBeginLoc(), Stmt->getSubStmt()->getBeginLoc(), SM, LO)); + PrintStmt(Stmt->getSubStmt()); + return true; + } + return false; } -void StmtPrinterFiltering::VisitReturnStmt(const clang::ReturnStmt *Stmt) { - llvm_unreachable("ReturnStatement"); +bool StmtPrinterFiltering::VisitDefaultStmt(const clang::DefaultStmt *Stmt) { + if (isAnyInWhitelist(Stmt, TargetLines, SM)) { + Slices.emplace_back(Slice::generateFromStartAndNext( + Stmt->getBeginLoc(), Stmt->getSubStmt()->getBeginLoc(), SM, LO)); + PrintStmt(Stmt->getSubStmt()); + return true; + } + return false; } + +// bool StmtPrinterFiltering::VisitSwitchCase(const clang::SwitchCase *Stmt) { +// if(isAnyInWhitelist(Stmt, TargetLines, SM)) { +// //Slices.emplace_back(Slice::generateFromStartAndNext(Stmt->getBeginLoc(), +// Stmt.g)) return true; +// } +// return false; +// } + printer::Slice::Slice(clang::SourceLocation Begin, clang::SourceLocation End) : Begin(Begin), End(End) { assert(Begin.isValid()); assert(End.isValid()); } +Slice Slice::generateFromStartAndNext(clang::SourceLocation Start, + clang::SourceLocation Next, + const clang::SourceManager &SM, + const clang::LangOptions &LO) { + const auto TmpEnd = SM.getExpansionRange(Next).getEnd(); + const auto TmpStart = SM.getExpansionRange(Start).getBegin(); + if (TmpEnd == TmpStart) { + return {TmpStart, utils::getEndOfToken(TmpStart, SM, LO)}; + } + return {TmpStart, utils::getEndOfToken( + utils::findPreviousTokenStart(TmpEnd, SM, LO), SM, LO)}; +} FileOffset::FileOffset(unsigned int Line, unsigned int Column) : Line(Line), Column(Column) {} bool FileOffset::operator<(const FileOffset &rhs) const { @@ -202,8 +426,8 @@ void extractSlices(const std::string &FileIn, const std::string &FileOut, if (PreviousSlice != Slices.end() && PreviousSlice->End.GetSliceLine() == LineNumber) { // We need to pad only after the last slice - for (unsigned int I = 0; I < PreviousSlice->End.GetSliceColumn() - - CurrentSlice->Begin.GetSliceColumn(); + for (unsigned int I = 0; I < CurrentSlice->Begin.GetSliceColumn() - + PreviousSlice->End.GetSliceColumn(); I++) { Output << ' '; } diff --git a/tools/module-extractor/printer.h b/tools/module-extractor/printer.h index bbd9f0d1e5..c2f4c11696 100644 --- a/tools/module-extractor/printer.h +++ b/tools/module-extractor/printer.h @@ -22,6 +22,10 @@ namespace printer { template bool isAnyInWhitelist(const T *Decl, const std::set &Lines, const clang::SourceManager &SM) { + if (SM.getFileID(SM.getSpellingLoc(Decl->getBeginLoc())) != + SM.getMainFileID()) { + return false; + } unsigned int Begin = SM.getPresumedLineNumber(Decl->getBeginLoc()); unsigned int End = SM.getPresumedLineNumber(Decl->getEndLoc()); assert(Begin <= End); @@ -30,8 +34,12 @@ bool isAnyInWhitelist(const T *Decl, const std::set &Lines, struct Slice { Slice(clang::SourceLocation Begin, clang::SourceLocation End); - const clang::SourceLocation Begin; - const clang::SourceLocation End; + static Slice generateFromStartAndNext(clang::SourceLocation Start, + clang::SourceLocation Next, + const clang::SourceManager &SM, + const clang::LangOptions &LO); + clang::SourceLocation Begin; + clang::SourceLocation End; }; struct FileOffset { @@ -76,37 +84,67 @@ void mergeSlices(std::vector &Slices); void extractSlices(const std::string &FileIn, const std::string &FileOut, const std::vector &Slices); -// namespace printer - class StmtPrinterFiltering - : public clang::ConstStmtVisitor { + : public clang::ConstStmtVisitor { public: - StmtPrinterFiltering(const std::set &targetLines); - void VisitCompoundStmt(const clang::CompoundStmt *stmt); - void VisitStmt(const clang::Stmt *stmt); - void VisitWhileStmt(const clang::WhileStmt *Stmt); - void VisitForStmt(const clang::ForStmt *Stmt); - void VisitDoStmt(const clang::DoStmt *Stmt); - void VisitSwitchStmt(const clang::SwitchStmt *Stmt); - void VisitReturnStmt(const clang::ReturnStmt *Stmt); + bool VisitCompoundStmt(const clang::CompoundStmt *Stmt); + bool VisitStmt(const clang::Stmt *stmt); + bool VisitWhileStmt(const clang::WhileStmt *Stmt); + bool VisitForStmt(const clang::ForStmt *Stmt); + bool VisitDoStmt(const clang::DoStmt *Stmt); + bool VisitSwitchStmt(const clang::SwitchStmt *Stmt); + // bool VisitReturnStmt(const clang::ReturnStmt *Stmt); + bool VisitIfStmt(const clang::IfStmt *Stmt); + // bool VisitSwitchCase(const clang::SwitchCase *Stmt); + bool VisitCaseStmt(const clang::CaseStmt *Stmt); + bool VisitDefaultStmt(const clang::DefaultStmt *Stmt); + static std::vector GetSlices(const clang::Stmt *Stmt, + const std::set &TargetLines, + const clang::ASTContext &CTX, + const clang::SourceManager &SM, + const clang::LangOptions &LO); private: + StmtPrinterFiltering(const std::set &TargetLines, + const clang::ASTContext &CTX, + const clang::SourceManager &SM, + const clang::LangOptions &LO); + + void PrintStmt(const clang::Stmt *Stmt, bool required = false); + + std::vector Slices; const std::set &TargetLines; + const clang::ASTContext &CTX; + const clang::SourceManager &SM; + const clang::LangOptions &LO; }; class DeclPrinter : public clang::ConstDeclVisitor { public: - DeclPrinter(const std::set &targetLines, - const clang::ASTContext &ctx); void VisitFunctionDecl(const clang::FunctionDecl *decl); + void VisitVarDecl(const clang::VarDecl *decl); void VisitDecl(const clang::Decl *decl); void VisitTranslationUnitDecl(const clang::TranslationUnitDecl *decl); - std::vector GetSlices() const; + + static std::vector GetSlices(const clang::Decl *Decl, + const std::set &TargetLines, + const clang::ASTContext &CTX, + const clang::SourceManager &SM, + const clang::LangOptions &LO); + + static std::vector + GetFileSlices(const clang::Decl *Decl, + const std::set &TargetLines, + const clang::ASTContext &CTX); private: + DeclPrinter(const std::set &Target, + const clang::ASTContext &CTX, const clang::SourceManager &SM, + const clang::LangOptions &LO); std::vector Slices; const std::set &TargetLines; - const clang::SourceManager &SM; const clang::ASTContext &CTX; + const clang::SourceManager &SM; + const clang::LangOptions &LO; }; } // namespace printer diff --git a/tools/module-extractor/source_utils.cpp b/tools/module-extractor/source_utils.cpp new file mode 100644 index 0000000000..5ce3dd2884 --- /dev/null +++ b/tools/module-extractor/source_utils.cpp @@ -0,0 +1,71 @@ +#include "source_utils.h" + +namespace utils { +// Taken from clang tidy +llvm::Optional +findNextTokenSkippingComments(clang::SourceLocation Start, + const clang::SourceManager &SM, + const clang::LangOptions &LangOpts) { + llvm::Optional CurrentToken; + do { + CurrentToken = clang::Lexer::findNextToken(Start, SM, LangOpts); + } while (CurrentToken && CurrentToken->is(clang::tok::comment)); + return CurrentToken; +} + +// TODO: maybe change handling of macros +// Given a Stmt which does not include it's semicolon this method returns the +// SourceLocation of the semicolon. +// Taken from clang tidy +clang::SourceLocation getSemicolonAfterStmtEndLoc( + const clang::SourceLocation &EndLoc, const clang::SourceManager &SM, + const clang::LangOptions &LangOpts, clang::tok::TokenKind Kind) { + + if (EndLoc.isMacroID()) { + // Assuming EndLoc points to a function call foo within macro F. + // This method is supposed to return location of the semicolon within + // those macro arguments: + // F ( foo() ; ) + // ^ EndLoc ^ SpellingLoc ^ next token of SpellingLoc + const clang::SourceLocation SpellingLoc = SM.getSpellingLoc(EndLoc); + llvm::Optional NextTok = + findNextTokenSkippingComments(SpellingLoc, SM, LangOpts); + + // Was the next token found successfully? + // All macro issues are simply resolved by ensuring it's a semicolon. + if (NextTok && NextTok->is(Kind)) { + // Ideally this would return `F` with spelling location `;` (NextTok) + // following the example above. For now simply return NextTok location. + return NextTok->getLocation(); + } + + // Fallthrough to 'normal handling'. + // F ( foo() ) ; + // ^ EndLoc ^ SpellingLoc ) ^ next token of EndLoc + } + + llvm::Optional NextTok = + findNextTokenSkippingComments(EndLoc, SM, LangOpts); + + // Testing for semicolon again avoids some issues with macros. + if (NextTok && NextTok->is(Kind)) + return NextTok->getLocation(); + + return clang::SourceLocation(); +} + +clang::SourceLocation +findPreviousTokenStart(clang::SourceLocation Start, + const clang::SourceManager &SM, + const clang::LangOptions &LangOpts) { + if (Start.isInvalid() || Start.isMacroID()) + return clang::SourceLocation(); + + clang::SourceLocation BeforeStart = Start.getLocWithOffset(-1); + if (BeforeStart.isInvalid() || BeforeStart.isMacroID()) + return clang::SourceLocation(); + + return clang::Lexer::GetBeginningOfToken(BeforeStart, SM, LangOpts); +} + +} // namespace utils \ No newline at end of file diff --git a/tools/module-extractor/source_utils.h b/tools/module-extractor/source_utils.h index 55f529a665..61dbe4f3e6 100644 --- a/tools/module-extractor/source_utils.h +++ b/tools/module-extractor/source_utils.h @@ -96,6 +96,41 @@ inline bool shouldBeSliced(const clang::Stmt *stmt, lines.upper_bound(sm.getPresumedLineNumber(stmt->getEndLoc())); } +// Take from clang tidy +template +clang::SourceLocation +findNextToken(clang::SourceLocation Start, const clang::SourceManager &SM, + const clang::LangOptions &LangOpts, TokenKind TK) { + while (true) { + llvm::Optional CurrentToken = + clang::Lexer::findNextToken(Start, SM, LangOpts); + + if (!CurrentToken) + return clang::SourceLocation(); + + clang::Token PotentialMatch = *CurrentToken; + if (PotentialMatch.getKind() == TK) + return PotentialMatch.getLocation(); + + // If we reach the end of the file, and eof is not the target token, we stop + // the loop, otherwise we will get infinite loop (findNextToken will return + // eof on eof). + if (PotentialMatch.is(clang::tok::eof)) + return clang::SourceLocation(); + Start = PotentialMatch.getLastLoc(); + } +} + +clang::SourceLocation getSemicolonAfterStmtEndLoc( + const clang::SourceLocation &EndLoc, const clang::SourceManager &SM, + const clang::LangOptions &LangOpts, + clang::tok::TokenKind Kind = clang::tok::TokenKind::semi); + +clang::SourceLocation +findPreviousTokenStart(clang::SourceLocation Start, + const clang::SourceManager &SM, + const clang::LangOptions &LangOpts); + } // namespace utils #endif // PHASAR_SOURCE_UTILS_H From acbe43e54ae54b953376ee6136a81b64e8c8f7f0 Mon Sep 17 00:00:00 2001 From: jr Date: Sat, 11 Dec 2021 14:01:10 +0100 Subject: [PATCH 26/42] Dont print empty lines --- tools/module-extractor/printer.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp index 2a54e094ce..827453802d 100644 --- a/tools/module-extractor/printer.cpp +++ b/tools/module-extractor/printer.cpp @@ -407,7 +407,10 @@ void extractSlices(const std::string &FileIn, const std::string &FileOut, // Case: We are in text befor the slice if (CurrentSlice == Slices.end() || CurrentSlice->Begin.GetSliceLine() > LineNumber) { - Output << "\n"; + if (CurrentSlice != Slices.end() && + CurrentSlice->Begin.GetSliceLine() == (LineNumber + 1)) { + Output << "\n"; + } break; } // Handle the following cases: From 7cb4c9d916ef019080b9c11c04c957fcd1451fd0 Mon Sep 17 00:00:00 2001 From: jr Date: Fri, 17 Dec 2021 10:30:30 +0100 Subject: [PATCH 27/42] tmp --- tools/module-extractor/back_mapper.cpp | 6 +- tools/module-extractor/printer.cpp | 312 +++++++++++++++++++++---- tools/module-extractor/printer.h | 35 ++- tools/module-extractor/slicer.cpp | 2 +- 4 files changed, 297 insertions(+), 58 deletions(-) diff --git a/tools/module-extractor/back_mapper.cpp b/tools/module-extractor/back_mapper.cpp index d18cff75eb..4ca5fcc2ce 100644 --- a/tools/module-extractor/back_mapper.cpp +++ b/tools/module-extractor/back_mapper.cpp @@ -12,6 +12,7 @@ #include #include +#include /** * Notes JR: @@ -205,9 +206,12 @@ add_block(std::string file, const std::set *target_lines) { Sources.push_back(file); clang::tooling::ClangTool Tool(*db, Sources); std::vector buffer; + + std::cerr << file << std::endl; + Tool.run(clang::tooling::newFrontendActionFactory( new RewriteSourceAction(target_lines, buffer)) .get()); - printer::mergeSlices(buffer); + printer::mergeAndSplitSlices(buffer); return buffer; } diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp index 827453802d..be37e89951 100644 --- a/tools/module-extractor/printer.cpp +++ b/tools/module-extractor/printer.cpp @@ -15,40 +15,49 @@ namespace printer { void DeclPrinter::VisitFunctionDecl(const clang::FunctionDecl *decl) { - if (!decl->hasBody()) { - llvm_unreachable("Function declarations are not yet supported."); + if (!decl->doesThisDeclarationHaveABody()) { + // llvm_unreachable("Function declarations are not yet supported."); + // TODO } else { - if (printer::isAnyInWhitelist(decl, TargetLines, SM)) { - // const auto next = clang::Lexer::findLocationAfterToken( - // decl->getBeginLoc(), clang::tok::l_brace, SM, CTX.getLangOpts(), - // false); - // next.dump(SM); - // const auto text = clang::Lexer::getSourceText( - // clang::CharSourceRange::getTokenRange(decl->getBeginLoc(), - // decl->getBody()->getBeginLoc()), - // SM, LO); - // decl->dump(); - // decl->getBeginLoc().dump(SM); - // decl->getEndLoc().dump(SM); - this->Slices.emplace_back( - SM.getExpansionRange(decl->getBeginLoc()).getBegin(), - utils::getEndOfToken( - SM.getExpansionRange(decl->getBody()->getBeginLoc()).getBegin(), - SM, LO)); + if (isInSourceFile(decl, SM)) { + if (printer::isAnyInWhitelist(decl, TargetLines, SM)) { + // const auto next = clang::Lexer::findLocationAfterToken( + // decl->getBeginLoc(), clang::tok::l_brace, SM, + // CTX.getLangOpts(), false); + // next.dump(SM); + // const auto text = clang::Lexer::getSourceText( + // clang::CharSourceRange::getTokenRange(decl->getBeginLoc(), + // decl->getBody()->getBeginLoc()), + // SM, LO); + // decl->dump(); + // decl->getBeginLoc().dump(SM); + // decl->getEndLoc().dump(SM); + this->Slices.emplace_back( + SM.getExpansionRange(decl->getBeginLoc()).getBegin(), + utils::getEndOfToken( + SM.getExpansionRange(decl->getBody()->getBeginLoc()).getBegin(), + SM, LO)); - // llvm::errs() << text; - // const auto text2 = clang::Lexer::getSourceText( - // clang::CharSourceRange::getTokenRange(decl->getBody()->getEndLoc(), - // decl->getEndLoc()), - // SM, LO); - this->Slices.emplace_back( - SM.getExpansionRange(decl->getBody()->getEndLoc()).getEnd(), - utils::getEndOfToken(SM.getExpansionRange(decl->getEndLoc()).getEnd(), - SM, LO)); - // llvm::errs() << text2; - const auto Body = StmtPrinterFiltering::GetSlices( - decl->getBody(), TargetLines, CTX, SM, LO); - Slices.insert(Slices.end(), Body.begin(), Body.end()); + // llvm::errs() << text; + // const auto text2 = clang::Lexer::getSourceText( + // clang::CharSourceRange::getTokenRange(decl->getBody()->getEndLoc(), + // decl->getEndLoc()), + // SM, LO); + this->Slices.emplace_back( + SM.getExpansionRange(decl->getBody()->getEndLoc()).getEnd(), + utils::getEndOfToken( + SM.getExpansionRange(decl->getEndLoc()).getEnd(), SM, LO)); + // llvm::errs() << text2; + const auto Body = StmtPrinterFiltering::GetSlices( + decl->getBody(), TargetLines, CTX, SM, LO); + Slices.insert(Slices.end(), Body.begin(), Body.end()); + } else { + Slices.emplace_back( + SM.getExpansionRange(decl->getBeginLoc()).getBegin(), + utils::getEndOfToken( + SM.getExpansionRange(decl->getEndLoc()).getEnd(), SM, LO), + true); + } } } } @@ -95,16 +104,34 @@ DeclPrinter::GetFileSlices(const clang::Decl *Decl, return Result; } void DeclPrinter::VisitVarDecl(const clang::VarDecl *Decl) { - if (isAnyInWhitelist(Decl, TargetLines, SM)) { - Slices.emplace_back( - SM.getExpansionRange(Decl->getBeginLoc()).getBegin(), - utils::getEndOfToken(SM.getExpansionRange(Decl->getEndLoc()).getEnd(), - SM, LO)); + if (isInSourceFile(Decl, SM)) { + //Decl->dump(); + const auto Semicolon = + utils::getSemicolonAfterStmtEndLoc(Decl->getEndLoc(), SM, LO); + assert(Semicolon.isValid()); + Slice S(SM.getExpansionRange(Decl->getBeginLoc()).getBegin(), + utils::getEndOfToken(Semicolon, SM, LO)); + + if (!isAnyInWhitelist(Decl, TargetLines, SM)) { + S.NeedsDefine = true; + // Decl->dump(); + } + Slices.push_back(S); + } +} +void DeclPrinter::VisitTypeDecl(const clang::TypeDecl *Decl) { + // TODO: How do we want to deal with types? + if (isInSourceFile(Decl, SM)) { const auto Semicolon = utils::getSemicolonAfterStmtEndLoc(Decl->getEndLoc(), SM, LO); assert(Semicolon.isValid()); - Slices.emplace_back(SM.getExpansionRange(Decl->getEndLoc()).getBegin(), - utils::getEndOfToken(Semicolon, SM, LO)); + Slice S(SM.getExpansionRange(Decl->getBeginLoc()).getBegin(), + utils::getEndOfToken(Semicolon, SM, LO)); + + if (!isAnyInWhitelist(Decl, TargetLines, SM)) { + S.NeedsDefine = true; + } + Slices.push_back(S); } } @@ -116,6 +143,11 @@ bool StmtPrinterFiltering::VisitStmt(const clang::Stmt *Stmt) { SM, LO)); return true; } + Slices.emplace_back( + SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), + utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, + LO), + true); // llvm_unreachable("Hit unsupported stmt"); return false; } @@ -173,6 +205,11 @@ bool StmtPrinterFiltering::VisitWhileStmt(const clang::WhileStmt *Stmt) { PrintStmt(Stmt->getBody(), true); return true; } + Slices.emplace_back( + SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), + utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, + LO), + true); return false; } bool StmtPrinterFiltering::VisitForStmt(const clang::ForStmt *Stmt) { @@ -182,6 +219,11 @@ bool StmtPrinterFiltering::VisitForStmt(const clang::ForStmt *Stmt) { PrintStmt(Stmt->getBody(), true); return true; } + Slices.emplace_back( + SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), + utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, + LO), + true); return false; } bool StmtPrinterFiltering::VisitDoStmt(const clang::DoStmt *Stmt) { @@ -195,6 +237,11 @@ bool StmtPrinterFiltering::VisitDoStmt(const clang::DoStmt *Stmt) { SM, LO)); return true; } + Slices.emplace_back( + SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), + utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, + LO), + true); return false; } bool StmtPrinterFiltering::VisitSwitchStmt(const clang::SwitchStmt *Stmt) { @@ -205,6 +252,11 @@ bool StmtPrinterFiltering::VisitSwitchStmt(const clang::SwitchStmt *Stmt) { PrintStmt(Stmt->getBody(), true); return true; } + Slices.emplace_back( + SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), + utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, + LO), + true); return false; } @@ -238,16 +290,20 @@ void StmtPrinterFiltering::PrintStmt(const clang::Stmt *Stmt, bool required) { llvm::isa(Stmt) || llvm::isa(Stmt))) { bool visited = Visit(Stmt); + const auto Semicolon = + utils::getSemicolonAfterStmtEndLoc(Stmt->getEndLoc(), SM, LO); + assert(Semicolon.isValid()); if (visited || required) { - const auto Semicolon = - utils::getSemicolonAfterStmtEndLoc(Stmt->getEndLoc(), SM, LO); - assert(Semicolon.isValid()); + if (visited) { Slices.emplace_back(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), utils::getEndOfToken(Semicolon, SM, LO)); } else { Slices.emplace_back(Semicolon, utils::getEndOfToken(Semicolon, SM, LO)); } + } else { + Slices.emplace_back(Semicolon, utils::getEndOfToken(Semicolon, SM, LO), + true); } } else if (Stmt) { // Stmt->dump(); @@ -272,9 +328,21 @@ bool StmtPrinterFiltering::VisitIfStmt(const clang::IfStmt *Stmt) { Slices.emplace_back(Slice::generateFromStartAndNext( Stmt->getElseLoc(), Stmt->getElse()->getBeginLoc(), SM, LO)); PrintStmt(Stmt->getElse(), true); + } else if (Stmt->getElse()) { + Slices.emplace_back( + SM.getExpansionRange(Stmt->getElse()->getBeginLoc()).getBegin(), + utils::getEndOfToken( + SM.getExpansionRange(Stmt->getElse()->getEndLoc()).getEnd(), SM, + LO), + true); } return true; } + Slices.emplace_back( + SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), + utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, + LO), + true); return false; } bool StmtPrinterFiltering::VisitCaseStmt(const clang::CaseStmt *Stmt) { @@ -284,6 +352,12 @@ bool StmtPrinterFiltering::VisitCaseStmt(const clang::CaseStmt *Stmt) { PrintStmt(Stmt->getSubStmt()); return true; } + Slices.emplace_back( + SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), + utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, + LO), + true); + return false; } bool StmtPrinterFiltering::VisitDefaultStmt(const clang::DefaultStmt *Stmt) { @@ -293,6 +367,11 @@ bool StmtPrinterFiltering::VisitDefaultStmt(const clang::DefaultStmt *Stmt) { PrintStmt(Stmt->getSubStmt()); return true; } + Slices.emplace_back( + SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), + utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, + LO), + true); return false; } @@ -304,8 +383,9 @@ bool StmtPrinterFiltering::VisitDefaultStmt(const clang::DefaultStmt *Stmt) { // return false; // } -printer::Slice::Slice(clang::SourceLocation Begin, clang::SourceLocation End) - : Begin(Begin), End(End) { +printer::Slice::Slice(clang::SourceLocation Begin, clang::SourceLocation End, + bool NeedsDefine) + : Begin(Begin), End(End), NeedsDefine(NeedsDefine) { assert(Begin.isValid()); assert(End.isValid()); } @@ -355,19 +435,20 @@ unsigned int FileOffset::GetSliceLine() const { assert(Line >= 1); return Line - 1; } -FileSlice::FileSlice(FileOffset Begin, FileOffset End) - : Begin(Begin), End(End) { - assert(Begin < End); -} +// FileSlice::FileSlice(FileOffset Begin, FileOffset End) +// : Begin(Begin), End(End) { +// assert(Begin < End); +// } std::ostream &operator<<(std::ostream &os, const FileSlice &slice) { os << slice.Begin << " - " << slice.End; return os; } FileSlice::FileSlice(const Slice &Slice, const clang::SourceManager &SM) : Begin(utils::getLocationAsWritten(Slice.Begin, SM)), - End(utils::getLocationAsWritten(Slice.End, SM)) {} + End(utils::getLocationAsWritten(Slice.End, SM)), + NeedsDefine(Slice.NeedsDefine) {} void mergeSlices(std::vector &Slices) { - assert(!Slices.empty()); + assert(Slices.empty()); std::sort( Slices.begin(), Slices.end(), [](const FileSlice &a, const FileSlice &b) { return a.Begin < b.Begin; }); @@ -383,6 +464,44 @@ void mergeSlices(std::vector &Slices) { OutputIndex++; Slices.erase(OutputIndex, Slices.end()); } + +void mergeAndSplitSlices(std::vector &Slices) { + assert(!Slices.empty()); + + + std::vector Keep; + std::vector Tmp; + std::copy_if(Slices.begin(), Slices.end(), std::back_inserter(Keep), [](const auto &Slice) { return !Slice.NeedsDefine; }); + std::copy_if(Slices.begin(), Slices.end(), std::back_inserter(Tmp), [](const auto &Slice) { return Slice.NeedsDefine; }); + Slices.clear(); + std::copy(Tmp.begin(), Tmp.end(), std::back_inserter(Slices)); + + + mergeSlices(Slices); + if (!Keep.empty()) { + mergeSlices(Keep); + } + +#ifdef MERGE_DEFINES + auto OutputIndex = Slices.begin(); + auto KeepIndex = Keep.begin(); + for (std::size_t I = 1; I < Slices.size(); I++) { + while (KeepIndex != Keep.end() && KeepIndex->Begin < OutputIndex->End) { + KeepIndex++; + } + // Keep is after us or end + if (KeepIndex == Keep.end() || KeepIndex->Begin > Slices[I].Begin) { + OutputIndex->End = std::max(OutputIndex->End, Slices[I].End); + } else { + OutputIndex++; + *OutputIndex = Slices[I]; + } + } + OutputIndex++; + Slices.erase(OutputIndex, Slices.end()); +#endif +} + void extractSlices(const std::string &FileIn, const std::string &FileOut, const std::vector &Slices) { assert(std::is_sorted(Slices.begin(), Slices.end(), @@ -464,4 +583,97 @@ void extractSlices(const std::string &FileIn, const std::string &FileOut, LineNumber++; } } +void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, + const std::vector &Slices) { + assert(std::is_sorted(Slices.begin(), Slices.end(), + [](const FileSlice &a, const FileSlice &b) { + return a.Begin < b.Begin; + })); + std::ifstream Input(FileIn); + if (!Input.is_open()) { + throw std::runtime_error("Could not open input file " + FileIn); + } + std::ofstream Output(FileOut); + if (!Output.is_open()) { + throw std::runtime_error("Could not open output file " + FileOut); + } + + std::string Line; + unsigned int LineNumber = 0; + + auto CurrentSlice = Slices.begin(); + auto NextSlice = CurrentSlice + 1; + while (std::getline(Input, Line)) { + while (true) { + // Case: We are in text before the slice + if (CurrentSlice == Slices.end() || + CurrentSlice->Begin.GetSliceLine() > LineNumber) { + Output << Line << "\n"; + break; + } + + if (CurrentSlice->Begin.GetSliceLine() < LineNumber && + CurrentSlice->End.GetSliceLine() > LineNumber) { + Output << Line << "\n"; + break; + } + if (CurrentSlice->Begin.GetSliceLine() == LineNumber) { + if (CurrentSlice->Begin.GetSliceColumn() != 0) { + auto Sub = Line.substr(0, CurrentSlice->Begin.GetSliceColumn()); + if (Sub.find_first_not_of(" \t") != std::string::npos) { + Output << Sub << "\n"; + } + } + Output << "#ifndef SLICE\n"; + for (unsigned int I = 0; I < CurrentSlice->Begin.GetSliceColumn(); + I++) { + Output << ' '; + } + // Copy our slice + if (CurrentSlice->End.GetSliceLine() == LineNumber) { + Output << Line.substr(CurrentSlice->Begin.GetSliceColumn(), + CurrentSlice->End.GetSliceColumn() - + CurrentSlice->Begin.GetSliceColumn()); + Output << "\n#endif //Slice\n"; + if (NextSlice == Slices.end() || + NextSlice->Begin.GetSliceLine() > LineNumber) { + auto Sub = Line.substr(CurrentSlice->End.GetSliceColumn()); + if(!Sub.empty()) { + Output << Sub << '\n'; + } + + } else { + // Next slice to define is in the same column + Output << Line.substr(CurrentSlice->End.GetSliceColumn(), + NextSlice->Begin.GetSliceColumn() - + CurrentSlice->End.GetSliceColumn()); + } + } else { + Output << Line.substr(CurrentSlice->Begin.GetSliceColumn()) << '\n'; + break; + } + } else { + // Handle end case + Output << Line.substr(0, CurrentSlice->End.GetSliceColumn()); + Output << "\n#endif //Slice\n"; + if (NextSlice == Slices.end() || + NextSlice->Begin.GetSliceLine() > LineNumber) { + Output << Line.substr(CurrentSlice->End.GetSliceColumn()) << '\n'; + } else { + // Next slice to define is in the same column + Output << Line.substr(CurrentSlice->End.GetSliceColumn(), + NextSlice->Begin.GetSliceColumn() - + CurrentSlice->End.GetSliceColumn()); + } + } + + CurrentSlice++; + NextSlice = CurrentSlice + 1; + if (CurrentSlice == Slices.end() || CurrentSlice->Begin.GetSliceLine() > LineNumber) { + break; + } + } + LineNumber++; + } +} } // namespace printer \ No newline at end of file diff --git a/tools/module-extractor/printer.h b/tools/module-extractor/printer.h index c2f4c11696..6c8a0039d2 100644 --- a/tools/module-extractor/printer.h +++ b/tools/module-extractor/printer.h @@ -22,24 +22,30 @@ namespace printer { template bool isAnyInWhitelist(const T *Decl, const std::set &Lines, const clang::SourceManager &SM) { - if (SM.getFileID(SM.getSpellingLoc(Decl->getBeginLoc())) != - SM.getMainFileID()) { - return false; - } unsigned int Begin = SM.getPresumedLineNumber(Decl->getBeginLoc()); unsigned int End = SM.getPresumedLineNumber(Decl->getEndLoc()); assert(Begin <= End); return Lines.lower_bound(Begin) != Lines.upper_bound(End); } +template +bool isInSourceFile(const T *Decl, const clang::SourceManager &SM) { + if (SM.getFileID(SM.getSpellingLoc(Decl->getBeginLoc())) != + SM.getMainFileID()) { + return false; + } + return true; +} + struct Slice { - Slice(clang::SourceLocation Begin, clang::SourceLocation End); + Slice(clang::SourceLocation Begin, clang::SourceLocation End, bool NeedsDefine = false); static Slice generateFromStartAndNext(clang::SourceLocation Start, clang::SourceLocation Next, const clang::SourceManager &SM, const clang::LangOptions &LO); clang::SourceLocation Begin; clang::SourceLocation End; + bool NeedsDefine = false; }; struct FileOffset { @@ -72,18 +78,34 @@ struct FileOffset { * End is just one character after the target slice */ struct FileSlice { - FileSlice(FileOffset Begin, FileOffset End); + //FileSlice(FileOffset Begin, FileOffset End); FileSlice(const Slice &Slice, const clang::SourceManager &SM); friend std::ostream &operator<<(std::ostream &os, const FileSlice &slice); FileOffset Begin; FileOffset End; + bool NeedsDefine = false; }; void mergeSlices(std::vector &Slices); +void mergeAndSplitSlices(std::vector &Slices); +/** + * + * @param FileIn + * @param FileOut + * @param Slices Slices to slices + */ void extractSlices(const std::string &FileIn, const std::string &FileOut, const std::vector &Slices); +/** + * + * @param FileIn + * @param FileOut + * @param Slices Slices to put into define code + */ +void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, const std::vector &Slices); + class StmtPrinterFiltering : public clang::ConstStmtVisitor { public: @@ -123,6 +145,7 @@ class DeclPrinter : public clang::ConstDeclVisitor { void VisitFunctionDecl(const clang::FunctionDecl *decl); void VisitVarDecl(const clang::VarDecl *decl); void VisitDecl(const clang::Decl *decl); + void VisitTypeDecl(const clang::TypeDecl *Decl); void VisitTranslationUnitDecl(const clang::TranslationUnitDecl *decl); static std::vector GetSlices(const clang::Decl *Decl, diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index 6445df54b8..b0741e6aa0 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -123,7 +123,7 @@ void copy_files(map> &file_lines, std::string outname = "out" + file.first.substr(file.first.find_last_of("/"), string::npos) + ".slice"; - printer::extractSlices(file.first, outname, file.second); + printer::extractSlicesDefine(file.first, outname, file.second); // llvm::errs() << outname; // std::ofstream out(outname, std::ios_base::out | std::ios_base::trunc); // out << file.second << endl; From 2da16b10119e4727e8a1c229b683156d2558ccbc Mon Sep 17 00:00:00 2001 From: jr Date: Fri, 17 Dec 2021 12:22:34 +0100 Subject: [PATCH 28/42] Merge Defines --- tools/module-extractor/printer.cpp | 134 ++++++++++++++++++++++++----- 1 file changed, 111 insertions(+), 23 deletions(-) diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp index be37e89951..e487e9e055 100644 --- a/tools/module-extractor/printer.cpp +++ b/tools/module-extractor/printer.cpp @@ -105,7 +105,7 @@ DeclPrinter::GetFileSlices(const clang::Decl *Decl, } void DeclPrinter::VisitVarDecl(const clang::VarDecl *Decl) { if (isInSourceFile(Decl, SM)) { - //Decl->dump(); + // Decl->dump(); const auto Semicolon = utils::getSemicolonAfterStmtEndLoc(Decl->getEndLoc(), SM, LO); assert(Semicolon.isValid()); @@ -448,7 +448,7 @@ FileSlice::FileSlice(const Slice &Slice, const clang::SourceManager &SM) End(utils::getLocationAsWritten(Slice.End, SM)), NeedsDefine(Slice.NeedsDefine) {} void mergeSlices(std::vector &Slices) { - assert(Slices.empty()); + assert(!Slices.empty()); std::sort( Slices.begin(), Slices.end(), [](const FileSlice &a, const FileSlice &b) { return a.Begin < b.Begin; }); @@ -468,15 +468,15 @@ void mergeSlices(std::vector &Slices) { void mergeAndSplitSlices(std::vector &Slices) { assert(!Slices.empty()); - std::vector Keep; std::vector Tmp; - std::copy_if(Slices.begin(), Slices.end(), std::back_inserter(Keep), [](const auto &Slice) { return !Slice.NeedsDefine; }); - std::copy_if(Slices.begin(), Slices.end(), std::back_inserter(Tmp), [](const auto &Slice) { return Slice.NeedsDefine; }); + std::copy_if(Slices.begin(), Slices.end(), std::back_inserter(Keep), + [](const auto &Slice) { return !Slice.NeedsDefine; }); + std::copy_if(Slices.begin(), Slices.end(), std::back_inserter(Tmp), + [](const auto &Slice) { return Slice.NeedsDefine; }); Slices.clear(); std::copy(Tmp.begin(), Tmp.end(), std::back_inserter(Slices)); - mergeSlices(Slices); if (!Keep.empty()) { mergeSlices(Keep); @@ -583,6 +583,10 @@ void extractSlices(const std::string &FileIn, const std::string &FileOut, LineNumber++; } } +bool notOnlyWhitespace(const std::string &Str) { + return std::any_of(Str.begin(), Str.end(), + [](unsigned char c) { return !isspace(c); }); +} void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, const std::vector &Slices) { assert(std::is_sorted(Slices.begin(), Slices.end(), @@ -598,12 +602,22 @@ void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, throw std::runtime_error("Could not open output file " + FileOut); } + std::vector Lines; + { + std::string Line; + while (std::getline(Input, Line)) { + Lines.push_back(Line); + } + } + std::string Line; unsigned int LineNumber = 0; + bool InSliceGroup = false; auto CurrentSlice = Slices.begin(); auto NextSlice = CurrentSlice + 1; - while (std::getline(Input, Line)) { + for (unsigned I = 0; I < Lines.size(); I++) { + Line = Lines[I]; while (true) { // Case: We are in text before the slice if (CurrentSlice == Slices.end() || @@ -612,64 +626,138 @@ void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, break; } + // Case: We are in the middle of a slice if (CurrentSlice->Begin.GetSliceLine() < LineNumber && CurrentSlice->End.GetSliceLine() > LineNumber) { Output << Line << "\n"; break; } + + // Case Slice is starting in this line if (CurrentSlice->Begin.GetSliceLine() == LineNumber) { if (CurrentSlice->Begin.GetSliceColumn() != 0) { - auto Sub = Line.substr(0, CurrentSlice->Begin.GetSliceColumn()); - if (Sub.find_first_not_of(" \t") != std::string::npos) { - Output << Sub << "\n"; + const auto Sub = Line.substr(0, CurrentSlice->Begin.GetSliceColumn()); + if (notOnlyWhitespace(Sub)) { + Output << Sub; + if (!InSliceGroup) { + Output << '\n'; + } } } - Output << "#ifndef SLICE\n"; + if (!InSliceGroup) { + Output << "#ifndef SLICE\n"; + } + InSliceGroup = false; for (unsigned int I = 0; I < CurrentSlice->Begin.GetSliceColumn(); I++) { Output << ' '; } // Copy our slice if (CurrentSlice->End.GetSliceLine() == LineNumber) { + // This slice is ending in the same line it is starting in Output << Line.substr(CurrentSlice->Begin.GetSliceColumn(), CurrentSlice->End.GetSliceColumn() - CurrentSlice->Begin.GetSliceColumn()); - Output << "\n#endif //Slice\n"; + if (NextSlice == Slices.end() || NextSlice->Begin.GetSliceLine() > LineNumber) { + // The next slice does not start in the same line auto Sub = Line.substr(CurrentSlice->End.GetSliceColumn()); - if(!Sub.empty()) { - Output << Sub << '\n'; + if (notOnlyWhitespace(Sub)) { + Output << "\n#endif //Slice\n"; + Output << Sub << '\n'; + } else { + if (NextSlice != Slices.end()) { + bool FoundText = false; + unsigned TmpLine = I + 1; + while (!FoundText && + NextSlice->Begin.GetSliceLine() > TmpLine) { + FoundText |= notOnlyWhitespace(Lines[TmpLine]); + TmpLine++; + } + const auto TmpSub = + Lines[NextSlice->Begin.GetSliceLine()].substr( + 0, NextSlice->Begin.GetSliceColumn()); + FoundText |= notOnlyWhitespace(TmpSub); + if (!FoundText) { + InSliceGroup = true; + } else { + Output << "\n#endif //Slice\n"; + } + } else { + Output << "\n#endif //Slice\n"; + } } } else { + // Next slice to define is in the same column - Output << Line.substr(CurrentSlice->End.GetSliceColumn(), - NextSlice->Begin.GetSliceColumn() - - CurrentSlice->End.GetSliceColumn()); + const auto TmpSub = + Line.substr(CurrentSlice->End.GetSliceColumn(), + NextSlice->Begin.GetSliceColumn() - + CurrentSlice->End.GetSliceColumn()); + const bool FoundText = notOnlyWhitespace(TmpSub); + if (FoundText) { + Output << "\n#endif //Slice\n"; + } else { + InSliceGroup = true; + } + Output << TmpSub; } } else { + // The current slice is spanning multiple lines Output << Line.substr(CurrentSlice->Begin.GetSliceColumn()) << '\n'; break; } } else { // Handle end case Output << Line.substr(0, CurrentSlice->End.GetSliceColumn()); - Output << "\n#endif //Slice\n"; if (NextSlice == Slices.end() || NextSlice->Begin.GetSliceLine() > LineNumber) { - Output << Line.substr(CurrentSlice->End.GetSliceColumn()) << '\n'; + auto Sub = Line.substr(CurrentSlice->End.GetSliceColumn()); + if (notOnlyWhitespace(Sub)) { + Output << "\n#endif //Slice\n"; + Output << Sub << '\n'; + } else { + if (NextSlice != Slices.end()) { + bool FoundText = false; + unsigned TmpLine = I + 1; + while (!FoundText && NextSlice->Begin.GetSliceLine() > TmpLine) { + FoundText |= notOnlyWhitespace(Lines[TmpLine]); + TmpLine++; + } + const auto TmpSub = Lines[NextSlice->Begin.GetSliceLine()].substr( + 0, NextSlice->Begin.GetSliceColumn()); + FoundText |= notOnlyWhitespace(TmpSub); + if (!FoundText) { + InSliceGroup = true; + } else { + Output << "\n#endif //Slice\n"; + } + } else { + Output << "\n#endif //Slice\n"; + } + } } else { // Next slice to define is in the same column - Output << Line.substr(CurrentSlice->End.GetSliceColumn(), - NextSlice->Begin.GetSliceColumn() - - CurrentSlice->End.GetSliceColumn()); + const auto TmpSub = + Line.substr(CurrentSlice->End.GetSliceColumn(), + NextSlice->Begin.GetSliceColumn() - + CurrentSlice->End.GetSliceColumn()); + const bool FoundText = notOnlyWhitespace(TmpSub); + if (FoundText) { + Output << "\n#endif //Slice\n"; + } else { + InSliceGroup = true; + } + Output << TmpSub; } } CurrentSlice++; NextSlice = CurrentSlice + 1; - if (CurrentSlice == Slices.end() || CurrentSlice->Begin.GetSliceLine() > LineNumber) { + if (CurrentSlice == Slices.end() || + CurrentSlice->Begin.GetSliceLine() > LineNumber) { break; } } From 0b4f15f76fb8e8ab5e8656b97ab91e0b6e710c74 Mon Sep 17 00:00:00 2001 From: jr Date: Fri, 17 Dec 2021 18:52:52 +0100 Subject: [PATCH 29/42] Add cuttoff for extracting new functions --- tools/module-extractor/printer.cpp | 248 +++++++++++++++++++++-------- tools/module-extractor/printer.h | 41 +++-- 2 files changed, 206 insertions(+), 83 deletions(-) diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp index e487e9e055..a94e0b3250 100644 --- a/tools/module-extractor/printer.cpp +++ b/tools/module-extractor/printer.cpp @@ -12,45 +12,55 @@ #include #include #include +#include + +// Config +#define EXTRACT_TYPES (true) +#define EXTRACT_FUNCTION_DECLS (true) +#define MIN_FILTERED_FOR_EXTRA_FUNCTION (3) namespace printer { void DeclPrinter::VisitFunctionDecl(const clang::FunctionDecl *decl) { if (!decl->doesThisDeclarationHaveABody()) { - // llvm_unreachable("Function declarations are not yet supported."); - // TODO + if (isInSourceFile(decl, SM)) { + const auto Semicolon = + utils::getSemicolonAfterStmtEndLoc(decl->getEndLoc(), SM, LO); + assert(Semicolon.isValid()); + Slice S(SM.getExpansionRange(decl->getBeginLoc()).getBegin(), + utils::getEndOfToken(Semicolon, SM, LO)); + + if (!isAnyInWhitelist(decl, TargetLines, SM) && !EXTRACT_FUNCTION_DECLS) { + S.NeedsDefine = true; + } + Slices.push_back(S); + } + } else { if (isInSourceFile(decl, SM)) { if (printer::isAnyInWhitelist(decl, TargetLines, SM)) { - // const auto next = clang::Lexer::findLocationAfterToken( - // decl->getBeginLoc(), clang::tok::l_brace, SM, - // CTX.getLangOpts(), false); - // next.dump(SM); - // const auto text = clang::Lexer::getSourceText( - // clang::CharSourceRange::getTokenRange(decl->getBeginLoc(), - // decl->getBody()->getBeginLoc()), - // SM, LO); - // decl->dump(); - // decl->getBeginLoc().dump(SM); - // decl->getEndLoc().dump(SM); - this->Slices.emplace_back( + unsigned filtered; + const auto Body = StmtPrinterFiltering::GetSlices( + decl->getBody(), TargetLines, CTX, SM, LO, &filtered); + std::vector TmpSlices; + TmpSlices.emplace_back( SM.getExpansionRange(decl->getBeginLoc()).getBegin(), utils::getEndOfToken( SM.getExpansionRange(decl->getBody()->getBeginLoc()).getBegin(), SM, LO)); - - // llvm::errs() << text; - // const auto text2 = clang::Lexer::getSourceText( - // clang::CharSourceRange::getTokenRange(decl->getBody()->getEndLoc(), - // decl->getEndLoc()), - // SM, LO); - this->Slices.emplace_back( + TmpSlices.emplace_back( SM.getExpansionRange(decl->getBody()->getEndLoc()).getEnd(), utils::getEndOfToken( SM.getExpansionRange(decl->getEndLoc()).getEnd(), SM, LO)); - // llvm::errs() << text2; - const auto Body = StmtPrinterFiltering::GetSlices( - decl->getBody(), TargetLines, CTX, SM, LO); - Slices.insert(Slices.end(), Body.begin(), Body.end()); + TmpSlices.insert(TmpSlices.end(), Body.begin(), Body.end()); + if (filtered >= MIN_FILTERED_FOR_EXTRA_FUNCTION) { + Slices.emplace_back( + SM.getExpansionRange(decl->getBeginLoc()).getBegin(), + utils::getEndOfToken( + SM.getExpansionRange(decl->getEndLoc()).getEnd(), SM, LO), + TmpSlices); + } else { + Slices.insert(Slices.end(), TmpSlices.begin(), TmpSlices.end()); + } } else { Slices.emplace_back( SM.getExpansionRange(decl->getBeginLoc()).getBegin(), @@ -120,7 +130,6 @@ void DeclPrinter::VisitVarDecl(const clang::VarDecl *Decl) { } } void DeclPrinter::VisitTypeDecl(const clang::TypeDecl *Decl) { - // TODO: How do we want to deal with types? if (isInSourceFile(Decl, SM)) { const auto Semicolon = utils::getSemicolonAfterStmtEndLoc(Decl->getEndLoc(), SM, LO); @@ -128,7 +137,7 @@ void DeclPrinter::VisitTypeDecl(const clang::TypeDecl *Decl) { Slice S(SM.getExpansionRange(Decl->getBeginLoc()).getBegin(), utils::getEndOfToken(Semicolon, SM, LO)); - if (!isAnyInWhitelist(Decl, TargetLines, SM)) { + if (!isAnyInWhitelist(Decl, TargetLines, SM) && !EXTRACT_TYPES) { S.NeedsDefine = true; } Slices.push_back(S); @@ -143,6 +152,7 @@ bool StmtPrinterFiltering::VisitStmt(const clang::Stmt *Stmt) { SM, LO)); return true; } + Filtered++; Slices.emplace_back( SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, @@ -205,6 +215,7 @@ bool StmtPrinterFiltering::VisitWhileStmt(const clang::WhileStmt *Stmt) { PrintStmt(Stmt->getBody(), true); return true; } + Filtered++; Slices.emplace_back( SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, @@ -219,6 +230,7 @@ bool StmtPrinterFiltering::VisitForStmt(const clang::ForStmt *Stmt) { PrintStmt(Stmt->getBody(), true); return true; } + Filtered++; Slices.emplace_back( SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, @@ -237,6 +249,7 @@ bool StmtPrinterFiltering::VisitDoStmt(const clang::DoStmt *Stmt) { SM, LO)); return true; } + Filtered++; Slices.emplace_back( SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, @@ -252,6 +265,7 @@ bool StmtPrinterFiltering::VisitSwitchStmt(const clang::SwitchStmt *Stmt) { PrintStmt(Stmt->getBody(), true); return true; } + Filtered++; Slices.emplace_back( SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, @@ -278,9 +292,12 @@ bool StmtPrinterFiltering::VisitSwitchStmt(const clang::SwitchStmt *Stmt) { std::vector StmtPrinterFiltering::GetSlices( const clang::Stmt *Stmt, const std::set &TargetLines, const clang::ASTContext &CTX, const clang::SourceManager &SM, - const clang::LangOptions &LO) { + const clang::LangOptions &LO, unsigned *filtered) { StmtPrinterFiltering Visitor(TargetLines, CTX, SM, LO); Visitor.Visit(Stmt); + if (filtered != nullptr) { + *filtered = Visitor.Filtered; + } return Visitor.Slices; } void StmtPrinterFiltering::PrintStmt(const clang::Stmt *Stmt, bool required) { @@ -302,6 +319,7 @@ void StmtPrinterFiltering::PrintStmt(const clang::Stmt *Stmt, bool required) { Slices.emplace_back(Semicolon, utils::getEndOfToken(Semicolon, SM, LO)); } } else { + Filtered++; Slices.emplace_back(Semicolon, utils::getEndOfToken(Semicolon, SM, LO), true); } @@ -329,6 +347,7 @@ bool StmtPrinterFiltering::VisitIfStmt(const clang::IfStmt *Stmt) { Stmt->getElseLoc(), Stmt->getElse()->getBeginLoc(), SM, LO)); PrintStmt(Stmt->getElse(), true); } else if (Stmt->getElse()) { + Filtered++; Slices.emplace_back( SM.getExpansionRange(Stmt->getElse()->getBeginLoc()).getBegin(), utils::getEndOfToken( @@ -338,6 +357,7 @@ bool StmtPrinterFiltering::VisitIfStmt(const clang::IfStmt *Stmt) { } return true; } + Filtered++; Slices.emplace_back( SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, @@ -352,6 +372,7 @@ bool StmtPrinterFiltering::VisitCaseStmt(const clang::CaseStmt *Stmt) { PrintStmt(Stmt->getSubStmt()); return true; } + Filtered++; Slices.emplace_back( SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, @@ -367,6 +388,7 @@ bool StmtPrinterFiltering::VisitDefaultStmt(const clang::DefaultStmt *Stmt) { PrintStmt(Stmt->getSubStmt()); return true; } + Filtered++; Slices.emplace_back( SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), SM, @@ -401,24 +423,15 @@ Slice Slice::generateFromStartAndNext(clang::SourceLocation Start, return {TmpStart, utils::getEndOfToken( utils::findPreviousTokenStart(TmpEnd, SM, LO), SM, LO)}; } +Slice::Slice(clang::SourceLocation Begin, clang::SourceLocation End, + std::vector Keep) + : Begin(Begin), End(End), NeedsDefine(true), Keep(std::move(Keep)) { + assert(Begin.isValid()); + assert(End.isValid()); +} FileOffset::FileOffset(unsigned int Line, unsigned int Column) : Line(Line), Column(Column) {} -bool FileOffset::operator<(const FileOffset &rhs) const { - if (Line < rhs.Line) { - return true; - } - if (rhs.Line < Line) { - return false; - } - return Column < rhs.Column; -} -bool FileOffset::operator>(const FileOffset &rhs) const { return rhs < *this; } -bool FileOffset::operator<=(const FileOffset &rhs) const { - return !(rhs < *this); -} -bool FileOffset::operator>=(const FileOffset &rhs) const { - return !(*this < rhs); -} + std::ostream &operator<<(std::ostream &os, const FileOffset &offset) { os << "[" << offset.Line << ":" << offset.Column << "]"; return os; @@ -435,6 +448,22 @@ unsigned int FileOffset::GetSliceLine() const { assert(Line >= 1); return Line - 1; } +bool FileOffset::operator==(const FileOffset &rhs) const { + return std::tie(Line, Column) == std::tie(rhs.Line, rhs.Column); +} +bool FileOffset::operator!=(const FileOffset &rhs) const { + return !(rhs == *this); +} +bool FileOffset::operator<(const FileOffset &rhs) const { + return std::tie(Line, Column) < std::tie(rhs.Line, rhs.Column); +} +bool FileOffset::operator>(const FileOffset &rhs) const { return rhs < *this; } +bool FileOffset::operator<=(const FileOffset &rhs) const { + return !(rhs < *this); +} +bool FileOffset::operator>=(const FileOffset &rhs) const { + return !(*this < rhs); +} // FileSlice::FileSlice(FileOffset Begin, FileOffset End) // : Begin(Begin), End(End) { // assert(Begin < End); @@ -446,7 +475,18 @@ std::ostream &operator<<(std::ostream &os, const FileSlice &slice) { FileSlice::FileSlice(const Slice &Slice, const clang::SourceManager &SM) : Begin(utils::getLocationAsWritten(Slice.Begin, SM)), End(utils::getLocationAsWritten(Slice.End, SM)), - NeedsDefine(Slice.NeedsDefine) {} + NeedsDefine(Slice.NeedsDefine) { + for (const auto &S : Slice.Keep) { + Keep.emplace_back(S, SM); + } +} +bool FileSlice::operator==(const FileSlice &rhs) const { + return std::tie(Begin, End, NeedsDefine, Keep) == + std::tie(rhs.Begin, rhs.End, rhs.NeedsDefine, rhs.Keep); +} +bool FileSlice::operator!=(const FileSlice &rhs) const { + return !(rhs == *this); +} void mergeSlices(std::vector &Slices) { assert(!Slices.empty()); std::sort( @@ -454,7 +494,8 @@ void mergeSlices(std::vector &Slices) { [](const FileSlice &a, const FileSlice &b) { return a.Begin < b.Begin; }); auto OutputIndex = Slices.begin(); for (std::size_t I = 1; I < Slices.size(); I++) { - if (OutputIndex->End >= Slices[I].Begin) { + if (OutputIndex->End >= Slices[I].Begin && + OutputIndex->Keep == Slices[I].Keep) { OutputIndex->End = std::max(OutputIndex->End, Slices[I].End); } else { OutputIndex++; @@ -477,29 +518,12 @@ void mergeAndSplitSlices(std::vector &Slices) { Slices.clear(); std::copy(Tmp.begin(), Tmp.end(), std::back_inserter(Slices)); - mergeSlices(Slices); + if (!Slices.empty()) { + mergeSlices(Slices); + } if (!Keep.empty()) { mergeSlices(Keep); } - -#ifdef MERGE_DEFINES - auto OutputIndex = Slices.begin(); - auto KeepIndex = Keep.begin(); - for (std::size_t I = 1; I < Slices.size(); I++) { - while (KeepIndex != Keep.end() && KeepIndex->Begin < OutputIndex->End) { - KeepIndex++; - } - // Keep is after us or end - if (KeepIndex == Keep.end() || KeepIndex->Begin > Slices[I].Begin) { - OutputIndex->End = std::max(OutputIndex->End, Slices[I].End); - } else { - OutputIndex++; - *OutputIndex = Slices[I]; - } - } - OutputIndex++; - Slices.erase(OutputIndex, Slices.end()); -#endif } void extractSlices(const std::string &FileIn, const std::string &FileOut, @@ -587,6 +611,7 @@ bool notOnlyWhitespace(const std::string &Str) { return std::any_of(Str.begin(), Str.end(), [](unsigned char c) { return !isspace(c); }); } + void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, const std::vector &Slices) { assert(std::is_sorted(Slices.begin(), Slices.end(), @@ -635,6 +660,9 @@ void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, // Case Slice is starting in this line if (CurrentSlice->Begin.GetSliceLine() == LineNumber) { + if (!CurrentSlice->Keep.empty()) { + extractRewrittenFunction(Lines, CurrentSlice->Keep, Output); + } if (CurrentSlice->Begin.GetSliceColumn() != 0) { const auto Sub = Line.substr(0, CurrentSlice->Begin.GetSliceColumn()); if (notOnlyWhitespace(Sub)) { @@ -646,6 +674,8 @@ void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, } if (!InSliceGroup) { Output << "#ifndef SLICE\n"; + } else { + Output << '\n'; } InSliceGroup = false; for (unsigned int I = 0; I < CurrentSlice->Begin.GetSliceColumn(); @@ -667,7 +697,7 @@ void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, Output << "\n#endif //Slice\n"; Output << Sub << '\n'; } else { - if (NextSlice != Slices.end()) { + if (NextSlice != Slices.end() && NextSlice->Keep.empty()) { bool FoundText = false; unsigned TmpLine = I + 1; while (!FoundText && @@ -697,7 +727,7 @@ void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, NextSlice->Begin.GetSliceColumn() - CurrentSlice->End.GetSliceColumn()); const bool FoundText = notOnlyWhitespace(TmpSub); - if (FoundText) { + if (FoundText || !NextSlice->Keep.empty()) { Output << "\n#endif //Slice\n"; } else { InSliceGroup = true; @@ -719,7 +749,7 @@ void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, Output << "\n#endif //Slice\n"; Output << Sub << '\n'; } else { - if (NextSlice != Slices.end()) { + if (NextSlice != Slices.end() && NextSlice->Keep.empty()) { bool FoundText = false; unsigned TmpLine = I + 1; while (!FoundText && NextSlice->Begin.GetSliceLine() > TmpLine) { @@ -745,7 +775,7 @@ void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, NextSlice->Begin.GetSliceColumn() - CurrentSlice->End.GetSliceColumn()); const bool FoundText = notOnlyWhitespace(TmpSub); - if (FoundText) { + if (FoundText || !NextSlice->Keep.empty()) { Output << "\n#endif //Slice\n"; } else { InSliceGroup = true; @@ -764,4 +794,82 @@ void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, LineNumber++; } } +void extractRewrittenFunction(const std::vector &Lines, + const std::vector &SlicesIn, + std::ofstream &Output) { + Output << "#ifdef SLICE\n"; + + std::vector Slices; + std::copy_if(SlicesIn.begin(), SlicesIn.end(), std::back_inserter(Slices), + [](const FileSlice &Slice) { return !Slice.NeedsDefine; }); + + mergeSlices(Slices); + + auto PreviousSlice = Slices.end(); + auto CurrentSlice = Slices.begin(); + auto LineNumber = CurrentSlice->Begin.GetSliceLine(); + while (LineNumber < Lines.size()) { + const std::string Line = Lines[LineNumber]; + while (true) { + // Case: We are in text befor the slice + if (CurrentSlice == Slices.end() || + CurrentSlice->Begin.GetSliceLine() > LineNumber) { + if (CurrentSlice != Slices.end() && + CurrentSlice->Begin.GetSliceLine() == (LineNumber + 1)) { + Output << "\n"; + } + break; + } + // Handle the following cases: + // We are in a completely sliced line, excluding the end or begin: Copy + // the complete line + // We are in the first line: Pad from the previous slice with spaces + // and add the text + // We are in the last line: Add text, check if + // others slices are needed in the same line + if (CurrentSlice->Begin.GetSliceLine() < LineNumber && + CurrentSlice->End.GetSliceLine() > LineNumber) { + Output << Line << "\n"; + break; + } + if (CurrentSlice->Begin.GetSliceLine() == LineNumber) { + if (PreviousSlice != Slices.end() && + PreviousSlice->End.GetSliceLine() == LineNumber) { + // We need to pad only after the last slice + for (unsigned int I = 0; I < CurrentSlice->Begin.GetSliceColumn() - + PreviousSlice->End.GetSliceColumn(); + I++) { + Output << ' '; + } + } else { + for (unsigned int I = 0; I < CurrentSlice->Begin.GetSliceColumn(); + I++) { + Output << ' '; + } + } + // Copy our slice + if (CurrentSlice->End.GetSliceLine() == LineNumber) { + Output << Line.substr(CurrentSlice->Begin.GetSliceColumn(), + CurrentSlice->End.GetSliceColumn() - + CurrentSlice->Begin.GetSliceColumn()); + } else { + Output << Line.substr(CurrentSlice->Begin.GetSliceColumn()) << "\n"; + break; + } + } else { + // Handle end case + Output << Line.substr(0, CurrentSlice->End.GetSliceColumn()); + } + + PreviousSlice = CurrentSlice; + CurrentSlice++; + if (CurrentSlice == Slices.end()) { + Output << '\n'; + break; + } + } + LineNumber++; + } + Output << "#endif //SLICE\n"; +} } // namespace printer \ No newline at end of file diff --git a/tools/module-extractor/printer.h b/tools/module-extractor/printer.h index 6c8a0039d2..2474367a40 100644 --- a/tools/module-extractor/printer.h +++ b/tools/module-extractor/printer.h @@ -38,7 +38,10 @@ bool isInSourceFile(const T *Decl, const clang::SourceManager &SM) { } struct Slice { - Slice(clang::SourceLocation Begin, clang::SourceLocation End, bool NeedsDefine = false); + Slice(clang::SourceLocation Begin, clang::SourceLocation End, + bool NeedsDefine = false); + Slice(clang::SourceLocation Begin, clang::SourceLocation End, + std::vector Keep); static Slice generateFromStartAndNext(clang::SourceLocation Start, clang::SourceLocation Next, const clang::SourceManager &SM, @@ -46,15 +49,13 @@ struct Slice { clang::SourceLocation Begin; clang::SourceLocation End; bool NeedsDefine = false; + std::vector Keep; }; struct FileOffset { FileOffset(unsigned int Line, unsigned int Column); FileOffset(const clang::PresumedLoc &Loc); - bool operator<(const FileOffset &rhs) const; - bool operator>(const FileOffset &rhs) const; - bool operator<=(const FileOffset &rhs) const; - bool operator>=(const FileOffset &rhs) const; + friend std::ostream &operator<<(std::ostream &os, const FileOffset &offset); /** @@ -68,6 +69,12 @@ struct FileOffset { * @return Zero based line offset */ unsigned int GetSliceLine() const; + bool operator==(const FileOffset &rhs) const; + bool operator!=(const FileOffset &rhs) const; + bool operator<(const FileOffset &rhs) const; + bool operator>(const FileOffset &rhs) const; + bool operator<=(const FileOffset &rhs) const; + bool operator>=(const FileOffset &rhs) const; private: unsigned int Line; @@ -78,19 +85,22 @@ struct FileOffset { * End is just one character after the target slice */ struct FileSlice { - //FileSlice(FileOffset Begin, FileOffset End); + // FileSlice(FileOffset Begin, FileOffset End); FileSlice(const Slice &Slice, const clang::SourceManager &SM); friend std::ostream &operator<<(std::ostream &os, const FileSlice &slice); + bool operator==(const FileSlice &rhs) const; + bool operator!=(const FileSlice &rhs) const; FileOffset Begin; FileOffset End; bool NeedsDefine = false; + std::vector Keep; }; void mergeSlices(std::vector &Slices); void mergeAndSplitSlices(std::vector &Slices); /** - * + * Currently unused * @param FileIn * @param FileOut * @param Slices Slices to slices @@ -104,7 +114,12 @@ void extractSlices(const std::string &FileIn, const std::string &FileOut, * @param FileOut * @param Slices Slices to put into define code */ -void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, const std::vector &Slices); +void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, + const std::vector &Slices); + +void extractRewrittenFunction(const std::vector &Lines, + const std::vector &Slices, + std::ofstream &Output); class StmtPrinterFiltering : public clang::ConstStmtVisitor { @@ -120,11 +135,10 @@ class StmtPrinterFiltering // bool VisitSwitchCase(const clang::SwitchCase *Stmt); bool VisitCaseStmt(const clang::CaseStmt *Stmt); bool VisitDefaultStmt(const clang::DefaultStmt *Stmt); - static std::vector GetSlices(const clang::Stmt *Stmt, - const std::set &TargetLines, - const clang::ASTContext &CTX, - const clang::SourceManager &SM, - const clang::LangOptions &LO); + static std::vector + GetSlices(const clang::Stmt *Stmt, const std::set &TargetLines, + const clang::ASTContext &CTX, const clang::SourceManager &SM, + const clang::LangOptions &LO, unsigned *filtered = nullptr); private: StmtPrinterFiltering(const std::set &TargetLines, @@ -134,6 +148,7 @@ class StmtPrinterFiltering void PrintStmt(const clang::Stmt *Stmt, bool required = false); + unsigned int Filtered = 0; std::vector Slices; const std::set &TargetLines; const clang::ASTContext &CTX; From 0b2ce3f45712403ce3d6ab60eec9e325b77cf398 Mon Sep 17 00:00:00 2001 From: jr Date: Wed, 5 Jan 2022 13:17:16 +0100 Subject: [PATCH 30/42] Add functionality for extracting headers --- tools/module-extractor/back_mapper.cpp | 22 ++-- tools/module-extractor/back_mapper.h | 9 +- tools/module-extractor/printer.cpp | 137 +++++++++++++++++++++++-- tools/module-extractor/printer.h | 31 ++++-- tools/module-extractor/slicer.cpp | 23 +++-- 5 files changed, 194 insertions(+), 28 deletions(-) diff --git a/tools/module-extractor/back_mapper.cpp b/tools/module-extractor/back_mapper.cpp index 4ca5fcc2ce..8f2aeeaa82 100644 --- a/tools/module-extractor/back_mapper.cpp +++ b/tools/module-extractor/back_mapper.cpp @@ -149,7 +149,8 @@ class RewriteSourceVisitor class RewriteSourceConsumer : public clang::ASTConsumer { public: RewriteSourceConsumer(const std::set *target_lines, - std::vector &output) + std::pair, + std::vector> &output) : target_lines(target_lines), output(output) {} void HandleTranslationUnit(clang::ASTContext &Context) override { // Traversing the translation unit decl via a RecursiveASTVisitor @@ -171,7 +172,8 @@ class RewriteSourceConsumer : public clang::ASTConsumer { // A RecursiveASTVisitor implementation. const std::set *target_lines; - std::vector &output; + std::pair, std::vector> + &output; }; class RewriteSourceAction // : public clang::ASTFrontendAction @@ -179,7 +181,8 @@ class RewriteSourceAction public: RewriteSourceAction(const std::set *target_lines, - std::vector &output) + std::pair, + std::vector> &output) : target_lines(target_lines), output(output) {} std::unique_ptr newASTConsumer() { @@ -189,12 +192,13 @@ class RewriteSourceAction private: const std::set *target_lines; - std::vector &output; + std::pair, std::vector> + &output; }; } // namespace -std::vector +std::pair, std::vector> add_block(std::string file, const std::set *target_lines) { std::string err; auto db = clang::tooling::CompilationDatabase::autoDetectFromDirectory( @@ -205,13 +209,17 @@ add_block(std::string file, const std::set *target_lines) { std::vector Sources; Sources.push_back(file); clang::tooling::ClangTool Tool(*db, Sources); - std::vector buffer; + std::pair, std::vector> + buffer; std::cerr << file << std::endl; Tool.run(clang::tooling::newFrontendActionFactory( new RewriteSourceAction(target_lines, buffer)) .get()); - printer::mergeAndSplitSlices(buffer); + printer::mergeAndSplitSlices(buffer.first); + if (!buffer.second.empty()) { + printer::mergeSlices(buffer.second); + } return buffer; } diff --git a/tools/module-extractor/back_mapper.h b/tools/module-extractor/back_mapper.h index e27a47341c..9ac30f28d8 100644 --- a/tools/module-extractor/back_mapper.h +++ b/tools/module-extractor/back_mapper.h @@ -10,7 +10,14 @@ namespace clang { class SourceLocation; }; -std::vector +/** + * + * @param file + * @param target_lines + * @return The first vector are the file slices, the second the slices for the + * creation of a header + */ +std::pair, std::vector> add_block(std::string file, const std::set *target_lines); #endif // PHASAR_BACK_MAPPER_H diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp index a94e0b3250..8497ccc518 100644 --- a/tools/module-extractor/printer.cpp +++ b/tools/module-extractor/printer.cpp @@ -18,6 +18,7 @@ #define EXTRACT_TYPES (true) #define EXTRACT_FUNCTION_DECLS (true) #define MIN_FILTERED_FOR_EXTRA_FUNCTION (3) +#define EXTRACT_TYPES_INTO_HEADER (true) namespace printer { void DeclPrinter::VisitFunctionDecl(const clang::FunctionDecl *decl) { @@ -61,6 +62,28 @@ void DeclPrinter::VisitFunctionDecl(const clang::FunctionDecl *decl) { } else { Slices.insert(Slices.end(), TmpSlices.begin(), TmpSlices.end()); } + + auto FirstDecl = decl->getFirstDecl(); + assert(FirstDecl); + if (!isInSourceFile(FirstDecl, SM)) { + FirstDecl = decl; + } + if (FirstDecl->doesThisDeclarationHaveABody()) { + auto S = Slice::generateFromStartAndNext( + FirstDecl->getBeginLoc(), FirstDecl->getBody()->getBeginLoc(), SM, + LO); + S.NeedsDefine = true; + HeaderSlices.push_back(S); + } else { + const auto Semicolon = utils::getSemicolonAfterStmtEndLoc( + FirstDecl->getEndLoc(), SM, LO); + assert(Semicolon.isValid()); + Slice S(SM.getExpansionRange(FirstDecl->getBeginLoc()).getBegin(), + utils::getEndOfToken(Semicolon, SM, LO)); + S.NeedsDefine = false; + HeaderSlices.push_back(S); + } + } else { Slices.emplace_back( SM.getExpansionRange(decl->getBeginLoc()).getBegin(), @@ -91,25 +114,30 @@ DeclPrinter::DeclPrinter(const std::set &Target, const clang::SourceManager &SM, const clang::LangOptions &LO) : TargetLines(Target), CTX(CTX), SM(SM), LO(LO) {} -std::vector DeclPrinter::GetSlices( +std::pair, std::vector> DeclPrinter::GetSlices( const clang::Decl *Decl, const std::set &TargetLines, const clang::ASTContext &CTX, const clang::SourceManager &SM, const clang::LangOptions &LO) { DeclPrinter Visitor(TargetLines, CTX, SM, LO); Visitor.Visit(Decl); - return Visitor.Slices; + return {Visitor.Slices, Visitor.HeaderSlices}; } -std::vector +std::pair, std::vector> DeclPrinter::GetFileSlices(const clang::Decl *Decl, const std::set &TargetLines, const clang::ASTContext &CTX) { const auto &SM = CTX.getSourceManager(); const auto Slices = DeclPrinter::GetSlices(Decl, TargetLines, CTX, SM, CTX.getLangOpts()); - std::vector Result; - Result.reserve(Slices.size()); - for (const auto &S : Slices) { - Result.emplace_back(S, SM); + std::pair, std::vector> + Result; + Result.first.reserve(Slices.first.size()); + for (const auto &S : Slices.first) { + Result.first.emplace_back(S, SM); + } + Result.second.reserve(Slices.second.size()); + for (const auto &S : Slices.second) { + Result.second.emplace_back(S, SM); } return Result; } @@ -141,6 +169,10 @@ void DeclPrinter::VisitTypeDecl(const clang::TypeDecl *Decl) { S.NeedsDefine = true; } Slices.push_back(S); +#ifdef EXTRACT_TYPES_INTO_HEADER + S.NeedsDefine = false; + HeaderSlices.push_back(S); +#endif } } @@ -612,6 +644,97 @@ bool notOnlyWhitespace(const std::string &Str) { [](unsigned char c) { return !isspace(c); }); } +void extractHeaderSlices(const std::string &FileIn, const std::string &FileOut, + const std::vector &Slices, + const std::string &FileName) { + std::ifstream Input(FileIn); + if (!Input.is_open()) { + throw std::runtime_error("Could not open input file " + FileIn); + } + std::ofstream Output(FileOut); + if (!Output.is_open()) { + throw std::runtime_error("Could not open output file " + FileOut); + } + std::string HeaderName = FileName.substr(0, FileName.find('.')); + std::transform(HeaderName.begin(), HeaderName.end(), HeaderName.begin(), + [](unsigned char c) { return std::toupper(c); }); + HeaderName += "_H"; + Output << "#ifndef " << HeaderName << "\n"; + Output << "#define " << HeaderName << "\n"; + + std::string Line; + unsigned int LineNumber = 0; + auto PreviousSlice = Slices.end(); + auto CurrentSlice = Slices.begin(); + while (std::getline(Input, Line)) { + while (true) { + // Case: We are in text befor the slice + if (CurrentSlice == Slices.end() || + CurrentSlice->Begin.GetSliceLine() > LineNumber) { + break; + } + // Handle the following cases: + // We are in a completely sliced line, excluding the end or begin: Copy + // the complete line + // We are in the first line: Pad from the previous slice with spaces + // and add the text + // We are in the last line: Add text, check if + // others slices are needed in the same line + if (CurrentSlice->Begin.GetSliceLine() < LineNumber && + CurrentSlice->End.GetSliceLine() > LineNumber) { + Output << Line << '\n'; + break; + } + if (CurrentSlice->Begin.GetSliceLine() == LineNumber) { + if (PreviousSlice != Slices.end() && + PreviousSlice->End.GetSliceLine() == LineNumber) { + // We need to pad only after the last slice + for (unsigned int I = 0; I < CurrentSlice->Begin.GetSliceColumn() - + PreviousSlice->End.GetSliceColumn(); + I++) { + Output << ' '; + } + } else { + for (unsigned int I = 0; I < CurrentSlice->Begin.GetSliceColumn(); + I++) { + Output << ' '; + } + } + // Copy our slice + if (CurrentSlice->End.GetSliceLine() == LineNumber) { + Output << Line.substr(CurrentSlice->Begin.GetSliceColumn(), + CurrentSlice->End.GetSliceColumn() - + CurrentSlice->Begin.GetSliceColumn()); + if (CurrentSlice->NeedsDefine) { + Output << ';'; + } + Output << '\n'; + } else { + Output << Line.substr(CurrentSlice->Begin.GetSliceColumn()) << "\n"; + break; + } + } else { + // Handle end case + Output << Line.substr(0, CurrentSlice->End.GetSliceColumn()); + if (CurrentSlice->NeedsDefine) { + Output << ';'; + } + Output << '\n'; + } + + PreviousSlice = CurrentSlice; + CurrentSlice++; + if (CurrentSlice == Slices.end()) { + Output << '\n'; + break; + } + } + LineNumber++; + } + + Output << "#endif //" << HeaderName << "\n"; +} + void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, const std::vector &Slices) { assert(std::is_sorted(Slices.begin(), Slices.end(), diff --git a/tools/module-extractor/printer.h b/tools/module-extractor/printer.h index 2474367a40..6589f9b517 100644 --- a/tools/module-extractor/printer.h +++ b/tools/module-extractor/printer.h @@ -48,7 +48,10 @@ struct Slice { const clang::LangOptions &LO); clang::SourceLocation Begin; clang::SourceLocation End; - bool NeedsDefine = false; + bool NeedsDefine = + false; // True if the Slice should be commented out. If it is a header + // slice, true means that it is a function definition where we need + // to cut away the body. std::vector Keep; }; @@ -163,13 +166,22 @@ class DeclPrinter : public clang::ConstDeclVisitor { void VisitTypeDecl(const clang::TypeDecl *Decl); void VisitTranslationUnitDecl(const clang::TranslationUnitDecl *decl); - static std::vector GetSlices(const clang::Decl *Decl, - const std::set &TargetLines, - const clang::ASTContext &CTX, - const clang::SourceManager &SM, - const clang::LangOptions &LO); + /** + * + * @param Decl + * @param TargetLines + * @param CTX + * @param SM + * @param LO + * @return First are the file slices, then the ones required for the header + */ + static std::pair, std::vector> + GetSlices(const clang::Decl *Decl, const std::set &TargetLines, + const clang::ASTContext &CTX, const clang::SourceManager &SM, + const clang::LangOptions &LO); - static std::vector + static std::pair, + std::vector> GetFileSlices(const clang::Decl *Decl, const std::set &TargetLines, const clang::ASTContext &CTX); @@ -179,12 +191,17 @@ class DeclPrinter : public clang::ConstDeclVisitor { const clang::ASTContext &CTX, const clang::SourceManager &SM, const clang::LangOptions &LO); std::vector Slices; + std::vector HeaderSlices; const std::set &TargetLines; const clang::ASTContext &CTX; const clang::SourceManager &SM; const clang::LangOptions &LO; }; +void extractHeaderSlices(const std::string &FileIn, const std::string &FileOut, + const std::vector &Slices, + const std::string &FileName); + } // namespace printer #endif // PHASAR_PRINTER_H diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index b0741e6aa0..b378e7a396 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -101,8 +101,11 @@ class IFDSSlicer : public IFDSTabulationProblem> { const std::set &entrypoints; }; -void copy_files(map> &file_lines, - map> &file_slices, string outPath) { +void copy_files( + map> &file_lines, + map> &file_slices, + map> &header_slices, + const string &outPath) { for (const auto &file : file_lines) { std::ifstream in(file.first); std::ofstream out( @@ -125,8 +128,14 @@ void copy_files(map> &file_lines, ".slice"; printer::extractSlicesDefine(file.first, outname, file.second); // llvm::errs() << outname; -// std::ofstream out(outname, std::ios_base::out | std::ios_base::trunc); -// out << file.second << endl; + // std::ofstream out(outname, std::ios_base::out | std::ios_base::trunc); + // out << file.second << endl; + } + for (const auto &file : header_slices) { + const std::string filename = + file.first.substr(file.first.find_last_of("/") + 1, string::npos); + const std::string outname = "out/" + filename + ".h"; + printer::extractHeaderSlices(file.first, outname, file.second, filename); } if (true) { @@ -156,6 +165,7 @@ template void process_results(ProjectIRDB &DB, IFDSSolver &solver, LLVMBasedBackwardsICFG &cg, string outPath) { map> file_slices; + map> header_slices; map> slice_instruction; llvm::dbgs() << "SOLVING DONE\n"; for (auto *const module : DB.getAllModules()) { @@ -328,10 +338,11 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, } for (const auto &f : file_lines) { const auto slices = add_block(f.first, &f.second); - file_slices.emplace(f.first, slices); + file_slices.emplace(f.first, slices.first); + header_slices.emplace(f.first, slices.second); } - copy_files(file_lines, file_slices, outPath); + copy_files(file_lines, file_slices, header_slices, outPath); } std::string createSlice(string target, const set &entrypoints, From 27e3a999cf9f0f1ff60f649dc3c6a9c31a2c6406 Mon Sep 17 00:00:00 2001 From: jr Date: Thu, 20 Jan 2022 22:01:07 +0100 Subject: [PATCH 31/42] extract includes --- tools/module-extractor/CMakeLists.txt | 4 ++ tools/module-extractor/include_handling.cpp | 57 ++++++++++++++++++++ tools/module-extractor/include_handling.h | 15 ++++++ tools/module-extractor/printer.cpp | 33 +++++++----- tools/module-extractor/printer.h | 3 +- tools/module-extractor/slicer.cpp | 59 +++++++++++++++++---- 6 files changed, 148 insertions(+), 23 deletions(-) create mode 100644 tools/module-extractor/include_handling.cpp create mode 100644 tools/module-extractor/include_handling.h diff --git a/tools/module-extractor/CMakeLists.txt b/tools/module-extractor/CMakeLists.txt index d8c7a9ed10..a1925a8541 100644 --- a/tools/module-extractor/CMakeLists.txt +++ b/tools/module-extractor/CMakeLists.txt @@ -14,6 +14,8 @@ if (PHASAR_IN_TREE) tools/module-extractor/SelectiveStmtPrinter.h tools/module-extractor/printer.cpp tools/module-extractor/printer.h + tools/module-extractor/include_handling.cpp + tools/module-extractor/include_handling.h ) else () add_executable(slicer @@ -31,6 +33,8 @@ else () ../module-extractor/SelectiveStmtPrinter.h ../module-extractor/printer.cpp ../module-extractor/printer.h + ../module-extractor/include_handling.cpp + ../module-extractor/include_handling.h ) endif () diff --git a/tools/module-extractor/include_handling.cpp b/tools/module-extractor/include_handling.cpp new file mode 100644 index 0000000000..a5a08f5bea --- /dev/null +++ b/tools/module-extractor/include_handling.cpp @@ -0,0 +1,57 @@ +#include "include_handling.h" + +#include +#include +#include +#include + +std::vector +get_includes_to_extract(const std::string &filename, const std::string &outname, + const std::unordered_set &blacklist) { + const std::string iwyu_output_file = get_tmp_filename().native(); + const std::string iwyu_toolname = "iwyu"; + // inspired by + // https://stackoverflow.com/questions/26492513/write-c-regular-expression-to-match-a-include-preprocessing-directive + // This does not match weird includes containing macros and may get some + // things in comments + const std::string include_regex_str = + R"reg(\s*#\s*include\s*[<"]([^>"]+)[>"])reg"; + std::regex include_regex(include_regex_str); + std::string original_file_contents; + { + std::ifstream original_file(filename); + std::stringstream buffer; + buffer << original_file.rdbuf(); + original_file_contents = buffer.str(); + } + auto trim = [](std::string str) { + str.erase(str.begin(), + std::find_if(str.begin(), str.end(), + [](unsigned char c) { return !std::isspace(c); })); + str.erase(std::find_if(str.rbegin(), str.rend(), + [](unsigned char c) { return !std::isspace(c); }) + .base(), + str.end()); + return str; + }; + std::vector includes; + auto begin = + std::sregex_iterator(original_file_contents.begin(), + original_file_contents.end(), include_regex); + auto end = std::sregex_iterator(); + for (auto It = begin; It != end; ++It) { + const auto &match = *It; + if (blacklist.find(trim(match[1].str())) == blacklist.end()) { + includes.push_back(trim(match.str())); + } + //std::cerr << match.str() << "\n"; + //std::cerr << match[1].str() << "\n"; + } + + return includes; +} + +boost::filesystem::path get_tmp_filename() { + const auto path = boost::filesystem::temp_directory_path(); + return path / boost::filesystem::unique_path(); +} diff --git a/tools/module-extractor/include_handling.h b/tools/module-extractor/include_handling.h new file mode 100644 index 0000000000..163aa205e3 --- /dev/null +++ b/tools/module-extractor/include_handling.h @@ -0,0 +1,15 @@ +#ifndef PHASAR_INCLUDE_HANDLING_H +#define PHASAR_INCLUDE_HANDLING_H + +#include +#include +#include +#include + +std::vector +get_includes_to_extract(const std::string &filename, const std::string &outname, + const std::unordered_set &blacklist); + +boost::filesystem::path get_tmp_filename(); + +#endif // PHASAR_INCLUDE_HANDLING_H diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp index 8497ccc518..2d4a9d83d3 100644 --- a/tools/module-extractor/printer.cpp +++ b/tools/module-extractor/printer.cpp @@ -584,7 +584,7 @@ void extractSlices(const std::string &FileIn, const std::string &FileOut, CurrentSlice->Begin.GetSliceLine() > LineNumber) { if (CurrentSlice != Slices.end() && CurrentSlice->Begin.GetSliceLine() == (LineNumber + 1)) { - Output << "\n"; + Output << '\n'; } break; } @@ -597,7 +597,7 @@ void extractSlices(const std::string &FileIn, const std::string &FileOut, // others slices are needed in the same line if (CurrentSlice->Begin.GetSliceLine() < LineNumber && CurrentSlice->End.GetSliceLine() > LineNumber) { - Output << Line << "\n"; + Output << Line << '\n'; break; } if (CurrentSlice->Begin.GetSliceLine() == LineNumber) { @@ -621,7 +621,7 @@ void extractSlices(const std::string &FileIn, const std::string &FileOut, CurrentSlice->End.GetSliceColumn() - CurrentSlice->Begin.GetSliceColumn()); } else { - Output << Line.substr(CurrentSlice->Begin.GetSliceColumn()) << "\n"; + Output << Line.substr(CurrentSlice->Begin.GetSliceColumn()) << '\n'; break; } } else { @@ -646,7 +646,8 @@ bool notOnlyWhitespace(const std::string &Str) { void extractHeaderSlices(const std::string &FileIn, const std::string &FileOut, const std::vector &Slices, - const std::string &FileName) { + const std::string &FileName, + const std::vector &includes) { std::ifstream Input(FileIn); if (!Input.is_open()) { throw std::runtime_error("Could not open input file " + FileIn); @@ -659,8 +660,14 @@ void extractHeaderSlices(const std::string &FileIn, const std::string &FileOut, std::transform(HeaderName.begin(), HeaderName.end(), HeaderName.begin(), [](unsigned char c) { return std::toupper(c); }); HeaderName += "_H"; - Output << "#ifndef " << HeaderName << "\n"; - Output << "#define " << HeaderName << "\n"; + Output << "#ifndef " << HeaderName << '\n'; + Output << "#define " << HeaderName << '\n'; + + Output << "\n// Includes\n"; + for (const auto &Include : includes) { + Output << Include << '\n'; + } + Output << "// End Includes\n"; std::string Line; unsigned int LineNumber = 0; @@ -710,7 +717,7 @@ void extractHeaderSlices(const std::string &FileIn, const std::string &FileOut, } Output << '\n'; } else { - Output << Line.substr(CurrentSlice->Begin.GetSliceColumn()) << "\n"; + Output << Line.substr(CurrentSlice->Begin.GetSliceColumn()) << '\n'; break; } } else { @@ -732,7 +739,7 @@ void extractHeaderSlices(const std::string &FileIn, const std::string &FileOut, LineNumber++; } - Output << "#endif //" << HeaderName << "\n"; + Output << "#endif //" << HeaderName << '\n'; } void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, @@ -770,14 +777,14 @@ void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, // Case: We are in text before the slice if (CurrentSlice == Slices.end() || CurrentSlice->Begin.GetSliceLine() > LineNumber) { - Output << Line << "\n"; + Output << Line << '\n'; break; } // Case: We are in the middle of a slice if (CurrentSlice->Begin.GetSliceLine() < LineNumber && CurrentSlice->End.GetSliceLine() > LineNumber) { - Output << Line << "\n"; + Output << Line << '\n'; break; } @@ -939,7 +946,7 @@ void extractRewrittenFunction(const std::vector &Lines, CurrentSlice->Begin.GetSliceLine() > LineNumber) { if (CurrentSlice != Slices.end() && CurrentSlice->Begin.GetSliceLine() == (LineNumber + 1)) { - Output << "\n"; + Output << '\n'; } break; } @@ -952,7 +959,7 @@ void extractRewrittenFunction(const std::vector &Lines, // others slices are needed in the same line if (CurrentSlice->Begin.GetSliceLine() < LineNumber && CurrentSlice->End.GetSliceLine() > LineNumber) { - Output << Line << "\n"; + Output << Line << '\n'; break; } if (CurrentSlice->Begin.GetSliceLine() == LineNumber) { @@ -976,7 +983,7 @@ void extractRewrittenFunction(const std::vector &Lines, CurrentSlice->End.GetSliceColumn() - CurrentSlice->Begin.GetSliceColumn()); } else { - Output << Line.substr(CurrentSlice->Begin.GetSliceColumn()) << "\n"; + Output << Line.substr(CurrentSlice->Begin.GetSliceColumn()) << '\n'; break; } } else { diff --git a/tools/module-extractor/printer.h b/tools/module-extractor/printer.h index 6589f9b517..a108baf756 100644 --- a/tools/module-extractor/printer.h +++ b/tools/module-extractor/printer.h @@ -200,7 +200,8 @@ class DeclPrinter : public clang::ConstDeclVisitor { void extractHeaderSlices(const std::string &FileIn, const std::string &FileOut, const std::vector &Slices, - const std::string &FileName); + const std::string &FileName, + const std::vector &includes); } // namespace printer diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index b378e7a396..c844939cf4 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -1,5 +1,6 @@ #include "slicer.h" #include "back_mapper.h" +#include "include_handling.h" #include #include @@ -105,7 +106,7 @@ void copy_files( map> &file_lines, map> &file_slices, map> &header_slices, - const string &outPath) { + const string &outPath, const std::unordered_set &blacklist) { for (const auto &file : file_lines) { std::ifstream in(file.first); std::ofstream out( @@ -135,7 +136,11 @@ void copy_files( const std::string filename = file.first.substr(file.first.find_last_of("/") + 1, string::npos); const std::string outname = "out/" + filename + ".h"; - printer::extractHeaderSlices(file.first, outname, file.second, filename); + const std::string outname_includes = "out/" + filename + ".includes.h"; + const auto includes = + get_includes_to_extract(file.first, outname_includes, blacklist); + printer::extractHeaderSlices(file.first, outname, file.second, filename, + includes); } if (true) { @@ -163,7 +168,8 @@ void copy_files( template void process_results(ProjectIRDB &DB, IFDSSolver &solver, - LLVMBasedBackwardsICFG &cg, string outPath) { + LLVMBasedBackwardsICFG &cg, string outPath, + const unordered_set &blacklist) { map> file_slices; map> header_slices; map> slice_instruction; @@ -342,11 +348,12 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, header_slices.emplace(f.first, slices.second); } - copy_files(file_lines, file_slices, header_slices, outPath); + copy_files(file_lines, file_slices, header_slices, outPath, blacklist); } std::string createSlice(string target, const set &entrypoints, - const vector &terms, string outPath) { + const vector &terms, string outPath, + const unordered_set &blacklist) { ProjectIRDB DB({std::move(target)}, IRDBOptions::WPA); initializeLogger(false); // initializeLogger(true); @@ -431,10 +438,36 @@ std::string createSlice(string target, const set &entrypoints, // solver.dumpResults(out); // out.close(); cout << "\n"; - process_results(DB, solver, cg, outPath); + process_results(DB, solver, cg, outPath, blacklist); return ""; } +unordered_set read_blacklist(const string &path) { + if (path == "none") { + return {}; + } + unordered_set blacklist; + + auto trim = [](string str) { + str.erase(str.begin(), + std::find_if(str.begin(), str.end(), + [](unsigned char c) { return !std::isspace(c); })); + str.erase(std::find_if(str.rbegin(), str.rend(), + [](unsigned char c) { return !std::isspace(c); }) + .base(), + str.end()); + return str; + }; + ifstream ifs(path); + string line; + while (getline(ifs, line)) { + line = trim(line); + if (!line.empty()) { + blacklist.insert(line); + } + } + return blacklist; +} int main(int argc, const char **argv) { const rlim_t kStackSize = 512 * 1024 * 1024; // min stack size = 128 MB struct rlimit rl; @@ -449,8 +482,11 @@ int main(int argc, const char **argv) { } } } - if (argc < 5) { + if (argc < 6) { cout << "Please provide the correct params" << endl; + cout << "Target(.ll); Json config; Output Path; Blacklist file for headers " + "to extract or 'none'; entry points ..." + << endl; // TODO USAGE return -1; } @@ -462,13 +498,18 @@ int main(int argc, const char **argv) { auto terms = j.get>(); string outPath = argv[3]; set entrypoints; - for (int i = 4; i < argc; ++i) { + const string blacklist_path = argv[4]; + + const auto blacklist = read_blacklist(blacklist_path); + + for (int i = 5; i < argc; ++i) { entrypoints.insert(argv[i]); cout << argv[i] << endl; } + std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); - createSlice(target, entrypoints, terms, outPath); + createSlice(target, entrypoints, terms, outPath, blacklist); std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); std::cout << "Time difference = " << std::chrono::duration_cast(end - From 39d3fbed61c3fc84923ecb51f63a7e13279cc022 Mon Sep 17 00:00:00 2001 From: jr Date: Fri, 21 Jan 2022 15:44:46 +0100 Subject: [PATCH 32/42] cleanup includes --- tools/module-extractor/include_handling.cpp | 76 +++++++++++++++++++-- tools/module-extractor/include_handling.h | 7 +- tools/module-extractor/slicer.cpp | 5 +- 3 files changed, 78 insertions(+), 10 deletions(-) diff --git a/tools/module-extractor/include_handling.cpp b/tools/module-extractor/include_handling.cpp index a5a08f5bea..bbf90c0e11 100644 --- a/tools/module-extractor/include_handling.cpp +++ b/tools/module-extractor/include_handling.cpp @@ -6,10 +6,9 @@ #include std::vector -get_includes_to_extract(const std::string &filename, const std::string &outname, +get_includes_to_extract(const std::string &filename, const std::unordered_set &blacklist) { - const std::string iwyu_output_file = get_tmp_filename().native(); - const std::string iwyu_toolname = "iwyu"; + // inspired by // https://stackoverflow.com/questions/26492513/write-c-regular-expression-to-match-a-include-preprocessing-directive // This does not match weird includes containing macros and may get some @@ -44,8 +43,8 @@ get_includes_to_extract(const std::string &filename, const std::string &outname, if (blacklist.find(trim(match[1].str())) == blacklist.end()) { includes.push_back(trim(match.str())); } - //std::cerr << match.str() << "\n"; - //std::cerr << match[1].str() << "\n"; + // std::cerr << match.str() << "\n"; + // std::cerr << match[1].str() << "\n"; } return includes; @@ -53,5 +52,70 @@ get_includes_to_extract(const std::string &filename, const std::string &outname, boost::filesystem::path get_tmp_filename() { const auto path = boost::filesystem::temp_directory_path(); - return path / boost::filesystem::unique_path(); + return path / boost::filesystem::unique_path("slice-%%%%-%%%%-%%%%-%%%%"); +} +bool is_iwyu_available() { + static bool is_available = []() { + const bool available = + (WEXITSTATUS(std::system("iwyu --help")) == 0) && + (WEXITSTATUS(std::system("fix_include --help")) == 0); + if (!available) { + std::cout << "iwyu or fix_include tool not found. Skipping header cleanup" + << std::endl; + } + return available; + }; + return is_available; +} +void cleanup_includes(const std::string &original_file, + const std::string &header) { + if (!is_iwyu_available()) { + return; + } + /** + * iwyu expects a compile_commands.json and paths to match, so we use the + * following approach: 1: Rename the original source file to source + * file.slicerback 2: Copy the extracted header to the original source file 3: + * Run iwyu 4: Run fix_include 5: Move the modified source file to the + * extracted header location 6: Cleanup temporary files 7: Undo 1 + */ + + boost::filesystem::path original_path(original_file); + boost::filesystem::path original_backup(original_file + ".slicerback"); + boost::filesystem::path header_path(header); + const std::string iwyu_output_file = get_tmp_filename().native(); + + // 1: (this should not fail) + boost::filesystem::rename(original_path, original_backup); + // 2: (this should not fail) + boost::filesystem::copy_file( + header_path, original_path, + boost::filesystem::copy_options::overwrite_existing); + // 3: (this can fail, for example if we have weird headers) + const std::string iwyu_command = "iwyu -Xiwyu --no_fwd_decls " + + original_path.native() + " 2> " + + iwyu_output_file; + const auto iwyu_return = WEXITSTATUS(std::system(iwyu_command.c_str())); + // iwyu has strange exit codes + // https://github.com/include-what-you-use/include-what-you-use/issues/440 + // https://github.com/include-what-you-use/include-what-you-use/blob/master/iwyu_globals.h#L33 + // https://github.com/include-what-you-use/include-what-you-use/blob/master/iwyu.cc#L3648 + if (iwyu_return == 1) { + std::cerr << "An error occurred running the following command: " + << iwyu_command << std::endl; + // Just cleanup but leave the output behind + } else { + // 4 (this should not fail, but we have no way to check it anyway) + const std::string fix_command = "fix_include --nosafe_headers " + + original_path.native() + " < " + + iwyu_output_file; + std::system(fix_command.c_str()); + // 5 (this should not fail) + boost::filesystem::rename(original_path, header_path); + // 6 (this should not fail) + boost::filesystem::remove(iwyu_output_file); + } + + // 7: (this should not fail) + boost::filesystem::rename(original_backup, original_path); } diff --git a/tools/module-extractor/include_handling.h b/tools/module-extractor/include_handling.h index 163aa205e3..4736ae3aa6 100644 --- a/tools/module-extractor/include_handling.h +++ b/tools/module-extractor/include_handling.h @@ -7,9 +7,14 @@ #include std::vector -get_includes_to_extract(const std::string &filename, const std::string &outname, +get_includes_to_extract(const std::string &filename, const std::unordered_set &blacklist); boost::filesystem::path get_tmp_filename(); +bool is_iwyu_available(); + +void cleanup_includes(const std::string &original_file, + const std::string &header); + #endif // PHASAR_INCLUDE_HANDLING_H diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index c844939cf4..d450ad0c55 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -136,11 +136,10 @@ void copy_files( const std::string filename = file.first.substr(file.first.find_last_of("/") + 1, string::npos); const std::string outname = "out/" + filename + ".h"; - const std::string outname_includes = "out/" + filename + ".includes.h"; - const auto includes = - get_includes_to_extract(file.first, outname_includes, blacklist); + const auto includes = get_includes_to_extract(file.first, blacklist); printer::extractHeaderSlices(file.first, outname, file.second, filename, includes); + cleanup_includes(file.first, outname); } if (true) { From 28f2737d1c38cae1fce99f3849bb6f0dda3a58c6 Mon Sep 17 00:00:00 2001 From: jr Date: Tue, 25 Jan 2022 15:16:27 +0100 Subject: [PATCH 33/42] Update the calls to iwyu to actually use the compile_commands.json --- bootstrap.sh | 6 +- tools/module-extractor/include_handling.cpp | 65 ++++++++++++++++----- tools/module-extractor/include_handling.h | 3 +- tools/module-extractor/slicer.cpp | 19 ++++-- 4 files changed, 67 insertions(+), 26 deletions(-) diff --git a/bootstrap.sh b/bootstrap.sh index cd7975c33e..402074517d 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -115,15 +115,15 @@ fi # installing LLVM tmp_dir=`mktemp -d "llvm-10_build.XXXXXXXX" --tmpdir` ./utils/install-llvm.sh ${NUM_THREADS} ${tmp_dir} ${LLVM_INSTALL_DIR} ${LLVM_RELEASE} -rm -rf ${tmp_dir} +#rm -rf ${tmp_dir} sudo pip3 install wllvm echo "dependencies successfully installed" echo "Building PhASAR..." ${DO_UNIT_TESTS} && echo "with unit tests." -git submodule init -git submodule update +#git submodule init +#git submodule update export CC=${LLVM_INSTALL_DIR}/bin/clang export CXX=${LLVM_INSTALL_DIR}/bin/clang++ diff --git a/tools/module-extractor/include_handling.cpp b/tools/module-extractor/include_handling.cpp index bbf90c0e11..366a601778 100644 --- a/tools/module-extractor/include_handling.cpp +++ b/tools/module-extractor/include_handling.cpp @@ -57,8 +57,8 @@ boost::filesystem::path get_tmp_filename() { bool is_iwyu_available() { static bool is_available = []() { const bool available = - (WEXITSTATUS(std::system("iwyu --help")) == 0) && - (WEXITSTATUS(std::system("fix_include --help")) == 0); + (WEXITSTATUS(std::system("iwyu_tool.py --help")) == 0) && + (WEXITSTATUS(std::system("fix_includes.py --help")) == 0); if (!available) { std::cout << "iwyu or fix_include tool not found. Skipping header cleanup" << std::endl; @@ -68,16 +68,31 @@ bool is_iwyu_available() { return is_available; } void cleanup_includes(const std::string &original_file, - const std::string &header) { + const std::string &header, + const std::string &compile_commands_path) { if (!is_iwyu_available()) { return; } /** * iwyu expects a compile_commands.json and paths to match, so we use the - * following approach: 1: Rename the original source file to source - * file.slicerback 2: Copy the extracted header to the original source file 3: - * Run iwyu 4: Run fix_include 5: Move the modified source file to the - * extracted header location 6: Cleanup temporary files 7: Undo 1 + * following approach: + * + * 1: Rename the original source file to source file.slicerback + * + * 2: Copy the extracted header to the original source file + * + * 3: Run iwyu + * + * 4: Run fix_include (for some reason iwyu does not include absolute paths + * grrr, so this is actually a multi step process. 4.a: copy the file from 2 + * to the tmp dir. (we cant move here as it could be between filessystems) 4.b + * change into the tmp dir 4.c run fix_include 4.d copy the modified source + * file to the extracted header location) + * + * + * 5: Cleanup temporary files + * + * 6: Undo 1 */ boost::filesystem::path original_path(original_file); @@ -92,9 +107,11 @@ void cleanup_includes(const std::string &original_file, header_path, original_path, boost::filesystem::copy_options::overwrite_existing); // 3: (this can fail, for example if we have weird headers) - const std::string iwyu_command = "iwyu -Xiwyu --no_fwd_decls " + - original_path.native() + " 2> " + + const std::string iwyu_command = "iwyu_tool.py -p " + compile_commands_path + + " " + original_path.native() + + " -- -Xiwyu --no_fwd_decls 1> " + iwyu_output_file; + // std::cerr << iwyu_command << std::endl; const auto iwyu_return = WEXITSTATUS(std::system(iwyu_command.c_str())); // iwyu has strange exit codes // https://github.com/include-what-you-use/include-what-you-use/issues/440 @@ -105,17 +122,33 @@ void cleanup_includes(const std::string &original_file, << iwyu_command << std::endl; // Just cleanup but leave the output behind } else { - // 4 (this should not fail, but we have no way to check it anyway) - const std::string fix_command = "fix_include --nosafe_headers " + - original_path.native() + " < " + - iwyu_output_file; + // 4 a + const auto tmpdir = boost::filesystem::temp_directory_path(); + const auto name = original_path.filename(); + const auto tmpname = tmpdir / name; + boost::filesystem::copy_file( + original_path, tmpname, + boost::filesystem::copy_options::overwrite_existing); + // const auto previous_cp = boost::filesystem::current_path(); + // 4 b + // boost::filesystem::current_path(tmpdir); + // 4 c (this should not fail, but we have no way to check it anyway) + const std::string fix_command = "fix_includes.py -p " + tmpdir.native() + + " --nosafe_headers " + tmpname.native() + + " < " + iwyu_output_file; + + // std::cerr << fix_command << std::endl; std::system(fix_command.c_str()); + // boost::filesystem::current_path(previous_cp); + // 5 (this should not fail) + boost::filesystem::copy_file( + tmpname, header_path, + boost::filesystem::copy_options::overwrite_existing); + boost::filesystem::remove(tmpname); // 5 (this should not fail) - boost::filesystem::rename(original_path, header_path); - // 6 (this should not fail) boost::filesystem::remove(iwyu_output_file); } - // 7: (this should not fail) + // 6: (this should not fail) boost::filesystem::rename(original_backup, original_path); } diff --git a/tools/module-extractor/include_handling.h b/tools/module-extractor/include_handling.h index 4736ae3aa6..3b4638acf0 100644 --- a/tools/module-extractor/include_handling.h +++ b/tools/module-extractor/include_handling.h @@ -15,6 +15,7 @@ boost::filesystem::path get_tmp_filename(); bool is_iwyu_available(); void cleanup_includes(const std::string &original_file, - const std::string &header); + const std::string &header, + const std::string &compile_commands_path); #endif // PHASAR_INCLUDE_HANDLING_H diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index d450ad0c55..10d9e29061 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -106,7 +106,8 @@ void copy_files( map> &file_lines, map> &file_slices, map> &header_slices, - const string &outPath, const std::unordered_set &blacklist) { + const string &outPath, const unordered_set &blacklist, + const string &compile_commands_path) { for (const auto &file : file_lines) { std::ifstream in(file.first); std::ofstream out( @@ -139,7 +140,7 @@ void copy_files( const auto includes = get_includes_to_extract(file.first, blacklist); printer::extractHeaderSlices(file.first, outname, file.second, filename, includes); - cleanup_includes(file.first, outname); + cleanup_includes(file.first, outname, compile_commands_path); } if (true) { @@ -168,7 +169,8 @@ void copy_files( template void process_results(ProjectIRDB &DB, IFDSSolver &solver, LLVMBasedBackwardsICFG &cg, string outPath, - const unordered_set &blacklist) { + const unordered_set &blacklist, + const string &compile_commands_dir) { map> file_slices; map> header_slices; map> slice_instruction; @@ -347,13 +349,14 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, header_slices.emplace(f.first, slices.second); } - copy_files(file_lines, file_slices, header_slices, outPath, blacklist); + copy_files(file_lines, file_slices, header_slices, outPath, blacklist, + compile_commands_dir); } std::string createSlice(string target, const set &entrypoints, const vector &terms, string outPath, const unordered_set &blacklist) { - ProjectIRDB DB({std::move(target)}, IRDBOptions::WPA); + ProjectIRDB DB({target}, IRDBOptions::WPA); initializeLogger(false); // initializeLogger(true); LLVMTypeHierarchy th(DB); @@ -437,7 +440,11 @@ std::string createSlice(string target, const set &entrypoints, // solver.dumpResults(out); // out.close(); cout << "\n"; - process_results(DB, solver, cg, outPath, blacklist); + boost::filesystem::path compile_commands_dir(target); + compile_commands_dir = compile_commands_dir.remove_filename(); + const std::string compile_commands_dir_str = compile_commands_dir.native(); + // std::cerr << compile_commands_dir << std::endl; + process_results(DB, solver, cg, outPath, blacklist, compile_commands_dir_str); return ""; } From 949189f760cc54786bf8fc7428ac61b1cb369a94 Mon Sep 17 00:00:00 2001 From: jr Date: Tue, 25 Jan 2022 15:17:33 +0100 Subject: [PATCH 34/42] Revert "Update the calls to iwyu to actually use the compile_commands.json" This reverts commit 28f2737d1c38cae1fce99f3849bb6f0dda3a58c6. --- bootstrap.sh | 6 +- tools/module-extractor/include_handling.cpp | 65 +++++---------------- tools/module-extractor/include_handling.h | 3 +- tools/module-extractor/slicer.cpp | 19 ++---- 4 files changed, 26 insertions(+), 67 deletions(-) diff --git a/bootstrap.sh b/bootstrap.sh index 402074517d..cd7975c33e 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -115,15 +115,15 @@ fi # installing LLVM tmp_dir=`mktemp -d "llvm-10_build.XXXXXXXX" --tmpdir` ./utils/install-llvm.sh ${NUM_THREADS} ${tmp_dir} ${LLVM_INSTALL_DIR} ${LLVM_RELEASE} -#rm -rf ${tmp_dir} +rm -rf ${tmp_dir} sudo pip3 install wllvm echo "dependencies successfully installed" echo "Building PhASAR..." ${DO_UNIT_TESTS} && echo "with unit tests." -#git submodule init -#git submodule update +git submodule init +git submodule update export CC=${LLVM_INSTALL_DIR}/bin/clang export CXX=${LLVM_INSTALL_DIR}/bin/clang++ diff --git a/tools/module-extractor/include_handling.cpp b/tools/module-extractor/include_handling.cpp index 366a601778..bbf90c0e11 100644 --- a/tools/module-extractor/include_handling.cpp +++ b/tools/module-extractor/include_handling.cpp @@ -57,8 +57,8 @@ boost::filesystem::path get_tmp_filename() { bool is_iwyu_available() { static bool is_available = []() { const bool available = - (WEXITSTATUS(std::system("iwyu_tool.py --help")) == 0) && - (WEXITSTATUS(std::system("fix_includes.py --help")) == 0); + (WEXITSTATUS(std::system("iwyu --help")) == 0) && + (WEXITSTATUS(std::system("fix_include --help")) == 0); if (!available) { std::cout << "iwyu or fix_include tool not found. Skipping header cleanup" << std::endl; @@ -68,31 +68,16 @@ bool is_iwyu_available() { return is_available; } void cleanup_includes(const std::string &original_file, - const std::string &header, - const std::string &compile_commands_path) { + const std::string &header) { if (!is_iwyu_available()) { return; } /** * iwyu expects a compile_commands.json and paths to match, so we use the - * following approach: - * - * 1: Rename the original source file to source file.slicerback - * - * 2: Copy the extracted header to the original source file - * - * 3: Run iwyu - * - * 4: Run fix_include (for some reason iwyu does not include absolute paths - * grrr, so this is actually a multi step process. 4.a: copy the file from 2 - * to the tmp dir. (we cant move here as it could be between filessystems) 4.b - * change into the tmp dir 4.c run fix_include 4.d copy the modified source - * file to the extracted header location) - * - * - * 5: Cleanup temporary files - * - * 6: Undo 1 + * following approach: 1: Rename the original source file to source + * file.slicerback 2: Copy the extracted header to the original source file 3: + * Run iwyu 4: Run fix_include 5: Move the modified source file to the + * extracted header location 6: Cleanup temporary files 7: Undo 1 */ boost::filesystem::path original_path(original_file); @@ -107,11 +92,9 @@ void cleanup_includes(const std::string &original_file, header_path, original_path, boost::filesystem::copy_options::overwrite_existing); // 3: (this can fail, for example if we have weird headers) - const std::string iwyu_command = "iwyu_tool.py -p " + compile_commands_path + - " " + original_path.native() + - " -- -Xiwyu --no_fwd_decls 1> " + + const std::string iwyu_command = "iwyu -Xiwyu --no_fwd_decls " + + original_path.native() + " 2> " + iwyu_output_file; - // std::cerr << iwyu_command << std::endl; const auto iwyu_return = WEXITSTATUS(std::system(iwyu_command.c_str())); // iwyu has strange exit codes // https://github.com/include-what-you-use/include-what-you-use/issues/440 @@ -122,33 +105,17 @@ void cleanup_includes(const std::string &original_file, << iwyu_command << std::endl; // Just cleanup but leave the output behind } else { - // 4 a - const auto tmpdir = boost::filesystem::temp_directory_path(); - const auto name = original_path.filename(); - const auto tmpname = tmpdir / name; - boost::filesystem::copy_file( - original_path, tmpname, - boost::filesystem::copy_options::overwrite_existing); - // const auto previous_cp = boost::filesystem::current_path(); - // 4 b - // boost::filesystem::current_path(tmpdir); - // 4 c (this should not fail, but we have no way to check it anyway) - const std::string fix_command = "fix_includes.py -p " + tmpdir.native() + - " --nosafe_headers " + tmpname.native() + - " < " + iwyu_output_file; - - // std::cerr << fix_command << std::endl; + // 4 (this should not fail, but we have no way to check it anyway) + const std::string fix_command = "fix_include --nosafe_headers " + + original_path.native() + " < " + + iwyu_output_file; std::system(fix_command.c_str()); - // boost::filesystem::current_path(previous_cp); - // 5 (this should not fail) - boost::filesystem::copy_file( - tmpname, header_path, - boost::filesystem::copy_options::overwrite_existing); - boost::filesystem::remove(tmpname); // 5 (this should not fail) + boost::filesystem::rename(original_path, header_path); + // 6 (this should not fail) boost::filesystem::remove(iwyu_output_file); } - // 6: (this should not fail) + // 7: (this should not fail) boost::filesystem::rename(original_backup, original_path); } diff --git a/tools/module-extractor/include_handling.h b/tools/module-extractor/include_handling.h index 3b4638acf0..4736ae3aa6 100644 --- a/tools/module-extractor/include_handling.h +++ b/tools/module-extractor/include_handling.h @@ -15,7 +15,6 @@ boost::filesystem::path get_tmp_filename(); bool is_iwyu_available(); void cleanup_includes(const std::string &original_file, - const std::string &header, - const std::string &compile_commands_path); + const std::string &header); #endif // PHASAR_INCLUDE_HANDLING_H diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index 10d9e29061..d450ad0c55 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -106,8 +106,7 @@ void copy_files( map> &file_lines, map> &file_slices, map> &header_slices, - const string &outPath, const unordered_set &blacklist, - const string &compile_commands_path) { + const string &outPath, const std::unordered_set &blacklist) { for (const auto &file : file_lines) { std::ifstream in(file.first); std::ofstream out( @@ -140,7 +139,7 @@ void copy_files( const auto includes = get_includes_to_extract(file.first, blacklist); printer::extractHeaderSlices(file.first, outname, file.second, filename, includes); - cleanup_includes(file.first, outname, compile_commands_path); + cleanup_includes(file.first, outname); } if (true) { @@ -169,8 +168,7 @@ void copy_files( template void process_results(ProjectIRDB &DB, IFDSSolver &solver, LLVMBasedBackwardsICFG &cg, string outPath, - const unordered_set &blacklist, - const string &compile_commands_dir) { + const unordered_set &blacklist) { map> file_slices; map> header_slices; map> slice_instruction; @@ -349,14 +347,13 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, header_slices.emplace(f.first, slices.second); } - copy_files(file_lines, file_slices, header_slices, outPath, blacklist, - compile_commands_dir); + copy_files(file_lines, file_slices, header_slices, outPath, blacklist); } std::string createSlice(string target, const set &entrypoints, const vector &terms, string outPath, const unordered_set &blacklist) { - ProjectIRDB DB({target}, IRDBOptions::WPA); + ProjectIRDB DB({std::move(target)}, IRDBOptions::WPA); initializeLogger(false); // initializeLogger(true); LLVMTypeHierarchy th(DB); @@ -440,11 +437,7 @@ std::string createSlice(string target, const set &entrypoints, // solver.dumpResults(out); // out.close(); cout << "\n"; - boost::filesystem::path compile_commands_dir(target); - compile_commands_dir = compile_commands_dir.remove_filename(); - const std::string compile_commands_dir_str = compile_commands_dir.native(); - // std::cerr << compile_commands_dir << std::endl; - process_results(DB, solver, cg, outPath, blacklist, compile_commands_dir_str); + process_results(DB, solver, cg, outPath, blacklist); return ""; } From dde52bbcc6f8d0f7380643b978158c8d568c46e8 Mon Sep 17 00:00:00 2001 From: jr Date: Tue, 25 Jan 2022 15:17:51 +0100 Subject: [PATCH 35/42] Revert "Revert "Update the calls to iwyu to actually use the compile_commands.json"" This reverts commit 949189f760cc54786bf8fc7428ac61b1cb369a94. --- bootstrap.sh | 6 +- tools/module-extractor/include_handling.cpp | 65 ++++++++++++++++----- tools/module-extractor/include_handling.h | 3 +- tools/module-extractor/slicer.cpp | 19 ++++-- 4 files changed, 67 insertions(+), 26 deletions(-) diff --git a/bootstrap.sh b/bootstrap.sh index cd7975c33e..402074517d 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -115,15 +115,15 @@ fi # installing LLVM tmp_dir=`mktemp -d "llvm-10_build.XXXXXXXX" --tmpdir` ./utils/install-llvm.sh ${NUM_THREADS} ${tmp_dir} ${LLVM_INSTALL_DIR} ${LLVM_RELEASE} -rm -rf ${tmp_dir} +#rm -rf ${tmp_dir} sudo pip3 install wllvm echo "dependencies successfully installed" echo "Building PhASAR..." ${DO_UNIT_TESTS} && echo "with unit tests." -git submodule init -git submodule update +#git submodule init +#git submodule update export CC=${LLVM_INSTALL_DIR}/bin/clang export CXX=${LLVM_INSTALL_DIR}/bin/clang++ diff --git a/tools/module-extractor/include_handling.cpp b/tools/module-extractor/include_handling.cpp index bbf90c0e11..366a601778 100644 --- a/tools/module-extractor/include_handling.cpp +++ b/tools/module-extractor/include_handling.cpp @@ -57,8 +57,8 @@ boost::filesystem::path get_tmp_filename() { bool is_iwyu_available() { static bool is_available = []() { const bool available = - (WEXITSTATUS(std::system("iwyu --help")) == 0) && - (WEXITSTATUS(std::system("fix_include --help")) == 0); + (WEXITSTATUS(std::system("iwyu_tool.py --help")) == 0) && + (WEXITSTATUS(std::system("fix_includes.py --help")) == 0); if (!available) { std::cout << "iwyu or fix_include tool not found. Skipping header cleanup" << std::endl; @@ -68,16 +68,31 @@ bool is_iwyu_available() { return is_available; } void cleanup_includes(const std::string &original_file, - const std::string &header) { + const std::string &header, + const std::string &compile_commands_path) { if (!is_iwyu_available()) { return; } /** * iwyu expects a compile_commands.json and paths to match, so we use the - * following approach: 1: Rename the original source file to source - * file.slicerback 2: Copy the extracted header to the original source file 3: - * Run iwyu 4: Run fix_include 5: Move the modified source file to the - * extracted header location 6: Cleanup temporary files 7: Undo 1 + * following approach: + * + * 1: Rename the original source file to source file.slicerback + * + * 2: Copy the extracted header to the original source file + * + * 3: Run iwyu + * + * 4: Run fix_include (for some reason iwyu does not include absolute paths + * grrr, so this is actually a multi step process. 4.a: copy the file from 2 + * to the tmp dir. (we cant move here as it could be between filessystems) 4.b + * change into the tmp dir 4.c run fix_include 4.d copy the modified source + * file to the extracted header location) + * + * + * 5: Cleanup temporary files + * + * 6: Undo 1 */ boost::filesystem::path original_path(original_file); @@ -92,9 +107,11 @@ void cleanup_includes(const std::string &original_file, header_path, original_path, boost::filesystem::copy_options::overwrite_existing); // 3: (this can fail, for example if we have weird headers) - const std::string iwyu_command = "iwyu -Xiwyu --no_fwd_decls " + - original_path.native() + " 2> " + + const std::string iwyu_command = "iwyu_tool.py -p " + compile_commands_path + + " " + original_path.native() + + " -- -Xiwyu --no_fwd_decls 1> " + iwyu_output_file; + // std::cerr << iwyu_command << std::endl; const auto iwyu_return = WEXITSTATUS(std::system(iwyu_command.c_str())); // iwyu has strange exit codes // https://github.com/include-what-you-use/include-what-you-use/issues/440 @@ -105,17 +122,33 @@ void cleanup_includes(const std::string &original_file, << iwyu_command << std::endl; // Just cleanup but leave the output behind } else { - // 4 (this should not fail, but we have no way to check it anyway) - const std::string fix_command = "fix_include --nosafe_headers " + - original_path.native() + " < " + - iwyu_output_file; + // 4 a + const auto tmpdir = boost::filesystem::temp_directory_path(); + const auto name = original_path.filename(); + const auto tmpname = tmpdir / name; + boost::filesystem::copy_file( + original_path, tmpname, + boost::filesystem::copy_options::overwrite_existing); + // const auto previous_cp = boost::filesystem::current_path(); + // 4 b + // boost::filesystem::current_path(tmpdir); + // 4 c (this should not fail, but we have no way to check it anyway) + const std::string fix_command = "fix_includes.py -p " + tmpdir.native() + + " --nosafe_headers " + tmpname.native() + + " < " + iwyu_output_file; + + // std::cerr << fix_command << std::endl; std::system(fix_command.c_str()); + // boost::filesystem::current_path(previous_cp); + // 5 (this should not fail) + boost::filesystem::copy_file( + tmpname, header_path, + boost::filesystem::copy_options::overwrite_existing); + boost::filesystem::remove(tmpname); // 5 (this should not fail) - boost::filesystem::rename(original_path, header_path); - // 6 (this should not fail) boost::filesystem::remove(iwyu_output_file); } - // 7: (this should not fail) + // 6: (this should not fail) boost::filesystem::rename(original_backup, original_path); } diff --git a/tools/module-extractor/include_handling.h b/tools/module-extractor/include_handling.h index 4736ae3aa6..3b4638acf0 100644 --- a/tools/module-extractor/include_handling.h +++ b/tools/module-extractor/include_handling.h @@ -15,6 +15,7 @@ boost::filesystem::path get_tmp_filename(); bool is_iwyu_available(); void cleanup_includes(const std::string &original_file, - const std::string &header); + const std::string &header, + const std::string &compile_commands_path); #endif // PHASAR_INCLUDE_HANDLING_H diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index d450ad0c55..10d9e29061 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -106,7 +106,8 @@ void copy_files( map> &file_lines, map> &file_slices, map> &header_slices, - const string &outPath, const std::unordered_set &blacklist) { + const string &outPath, const unordered_set &blacklist, + const string &compile_commands_path) { for (const auto &file : file_lines) { std::ifstream in(file.first); std::ofstream out( @@ -139,7 +140,7 @@ void copy_files( const auto includes = get_includes_to_extract(file.first, blacklist); printer::extractHeaderSlices(file.first, outname, file.second, filename, includes); - cleanup_includes(file.first, outname); + cleanup_includes(file.first, outname, compile_commands_path); } if (true) { @@ -168,7 +169,8 @@ void copy_files( template void process_results(ProjectIRDB &DB, IFDSSolver &solver, LLVMBasedBackwardsICFG &cg, string outPath, - const unordered_set &blacklist) { + const unordered_set &blacklist, + const string &compile_commands_dir) { map> file_slices; map> header_slices; map> slice_instruction; @@ -347,13 +349,14 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, header_slices.emplace(f.first, slices.second); } - copy_files(file_lines, file_slices, header_slices, outPath, blacklist); + copy_files(file_lines, file_slices, header_slices, outPath, blacklist, + compile_commands_dir); } std::string createSlice(string target, const set &entrypoints, const vector &terms, string outPath, const unordered_set &blacklist) { - ProjectIRDB DB({std::move(target)}, IRDBOptions::WPA); + ProjectIRDB DB({target}, IRDBOptions::WPA); initializeLogger(false); // initializeLogger(true); LLVMTypeHierarchy th(DB); @@ -437,7 +440,11 @@ std::string createSlice(string target, const set &entrypoints, // solver.dumpResults(out); // out.close(); cout << "\n"; - process_results(DB, solver, cg, outPath, blacklist); + boost::filesystem::path compile_commands_dir(target); + compile_commands_dir = compile_commands_dir.remove_filename(); + const std::string compile_commands_dir_str = compile_commands_dir.native(); + // std::cerr << compile_commands_dir << std::endl; + process_results(DB, solver, cg, outPath, blacklist, compile_commands_dir_str); return ""; } From 016fc28cf940a142275648322729adae2d2f7316 Mon Sep 17 00:00:00 2001 From: jr Date: Tue, 25 Jan 2022 15:19:01 +0100 Subject: [PATCH 36/42] Rollback accidentally comitted file --- bootstrap.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bootstrap.sh b/bootstrap.sh index 402074517d..cd7975c33e 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -115,15 +115,15 @@ fi # installing LLVM tmp_dir=`mktemp -d "llvm-10_build.XXXXXXXX" --tmpdir` ./utils/install-llvm.sh ${NUM_THREADS} ${tmp_dir} ${LLVM_INSTALL_DIR} ${LLVM_RELEASE} -#rm -rf ${tmp_dir} +rm -rf ${tmp_dir} sudo pip3 install wllvm echo "dependencies successfully installed" echo "Building PhASAR..." ${DO_UNIT_TESTS} && echo "with unit tests." -#git submodule init -#git submodule update +git submodule init +git submodule update export CC=${LLVM_INSTALL_DIR}/bin/clang export CXX=${LLVM_INSTALL_DIR}/bin/clang++ From 61bdaaff9dbf5d50aabbef6d711614be8f1bccda Mon Sep 17 00:00:00 2001 From: jr Date: Mon, 31 Jan 2022 13:28:55 +0100 Subject: [PATCH 37/42] Fix a bug with multiple variables in one line and try to finally fix include paths --- tools/module-extractor/back_mapper.cpp | 4 ++++ tools/module-extractor/include_handling.cpp | 5 ++++- tools/module-extractor/printer.cpp | 12 +++++++++--- tools/module-extractor/slicer.cpp | 20 ++++++++++---------- tools/module-extractor/source_utils.cpp | 16 +++++++++++++++- 5 files changed, 42 insertions(+), 15 deletions(-) diff --git a/tools/module-extractor/back_mapper.cpp b/tools/module-extractor/back_mapper.cpp index 8f2aeeaa82..d5decd168c 100644 --- a/tools/module-extractor/back_mapper.cpp +++ b/tools/module-extractor/back_mapper.cpp @@ -209,6 +209,10 @@ add_block(std::string file, const std::set *target_lines) { std::vector Sources; Sources.push_back(file); clang::tooling::ClangTool Tool(*db, Sources); + const auto Adjuster = clang::tooling::getInsertArgumentAdjuster( + "-isystem/usr/local/llvm-10/lib/clang/10.0.1/include", + clang::tooling::ArgumentInsertPosition::BEGIN); + Tool.appendArgumentsAdjuster(Adjuster); std::pair, std::vector> buffer; diff --git a/tools/module-extractor/include_handling.cpp b/tools/module-extractor/include_handling.cpp index 366a601778..56230331bf 100644 --- a/tools/module-extractor/include_handling.cpp +++ b/tools/module-extractor/include_handling.cpp @@ -73,6 +73,9 @@ void cleanup_includes(const std::string &original_file, if (!is_iwyu_available()) { return; } + if (compile_commands_path == "none") { + return; + } /** * iwyu expects a compile_commands.json and paths to match, so we use the * following approach: @@ -117,7 +120,7 @@ void cleanup_includes(const std::string &original_file, // https://github.com/include-what-you-use/include-what-you-use/issues/440 // https://github.com/include-what-you-use/include-what-you-use/blob/master/iwyu_globals.h#L33 // https://github.com/include-what-you-use/include-what-you-use/blob/master/iwyu.cc#L3648 - if (iwyu_return == 1) { + if (iwyu_return != 0) { std::cerr << "An error occurred running the following command: " << iwyu_command << std::endl; // Just cleanup but leave the output behind diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp index 2d4a9d83d3..ec8ab987d7 100644 --- a/tools/module-extractor/printer.cpp +++ b/tools/module-extractor/printer.cpp @@ -142,10 +142,13 @@ DeclPrinter::GetFileSlices(const clang::Decl *Decl, return Result; } void DeclPrinter::VisitVarDecl(const clang::VarDecl *Decl) { + // Decl->dump(); + // Decl->getSourceRange().getEnd().dump(SM); + // Decl->getEndLoc().dump(SM); if (isInSourceFile(Decl, SM)) { // Decl->dump(); - const auto Semicolon = - utils::getSemicolonAfterStmtEndLoc(Decl->getEndLoc(), SM, LO); + const auto Semicolon = utils::getSemicolonAfterStmtEndLoc( + Decl->getSourceRange().getEnd(), SM, LO); assert(Semicolon.isValid()); Slice S(SM.getExpansionRange(Decl->getBeginLoc()).getBegin(), utils::getEndOfToken(Semicolon, SM, LO)); @@ -462,7 +465,9 @@ Slice::Slice(clang::SourceLocation Begin, clang::SourceLocation End, assert(End.isValid()); } FileOffset::FileOffset(unsigned int Line, unsigned int Column) - : Line(Line), Column(Column) {} + : Line(Line), Column(Column) { + assert(Line > 0 && Column > 0); +} std::ostream &operator<<(std::ostream &os, const FileOffset &offset) { os << "[" << offset.Line << ":" << offset.Column << "]"; @@ -471,6 +476,7 @@ std::ostream &operator<<(std::ostream &os, const FileOffset &offset) { FileOffset::FileOffset(const clang::PresumedLoc &Loc) : Line(Loc.getLine()), Column(Loc.getColumn()) { assert(Loc.isValid()); + assert(Line > 0 && Column > 0); } unsigned int FileOffset::GetSliceColumn() const { assert(Column >= 1); diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index 10d9e29061..dfa02b96f8 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -355,6 +355,7 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, std::string createSlice(string target, const set &entrypoints, const vector &terms, string outPath, + string compileCommandsPath, const unordered_set &blacklist) { ProjectIRDB DB({target}, IRDBOptions::WPA); initializeLogger(false); @@ -440,11 +441,7 @@ std::string createSlice(string target, const set &entrypoints, // solver.dumpResults(out); // out.close(); cout << "\n"; - boost::filesystem::path compile_commands_dir(target); - compile_commands_dir = compile_commands_dir.remove_filename(); - const std::string compile_commands_dir_str = compile_commands_dir.native(); - // std::cerr << compile_commands_dir << std::endl; - process_results(DB, solver, cg, outPath, blacklist, compile_commands_dir_str); + process_results(DB, solver, cg, outPath, blacklist, compileCommandsPath); return ""; } @@ -488,9 +485,10 @@ int main(int argc, const char **argv) { } } } - if (argc < 6) { + if (argc < 7) { cout << "Please provide the correct params" << endl; - cout << "Target(.ll); Json config; Output Path; Blacklist file for headers " + cout << "Target(.ll); Json config; Output Path; Path to " + "compile_commands.json or 'none'; Blacklist file for headers " "to extract or 'none'; entry points ..." << endl; // TODO USAGE @@ -504,18 +502,20 @@ int main(int argc, const char **argv) { auto terms = j.get>(); string outPath = argv[3]; set entrypoints; - const string blacklist_path = argv[4]; + const string compile_commands_path = argv[4]; + const string blacklist_path = argv[5]; const auto blacklist = read_blacklist(blacklist_path); - for (int i = 5; i < argc; ++i) { + for (int i = 6; i < argc; ++i) { entrypoints.insert(argv[i]); cout << argv[i] << endl; } std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now(); - createSlice(target, entrypoints, terms, outPath, blacklist); + createSlice(target, entrypoints, terms, outPath, compile_commands_path, + blacklist); std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); std::cout << "Time difference = " << std::chrono::duration_cast(end - diff --git a/tools/module-extractor/source_utils.cpp b/tools/module-extractor/source_utils.cpp index 5ce3dd2884..1db064ea5c 100644 --- a/tools/module-extractor/source_utils.cpp +++ b/tools/module-extractor/source_utils.cpp @@ -13,6 +13,20 @@ findNextTokenSkippingComments(clang::SourceLocation Start, return CurrentToken; } +llvm::Optional findNextToken(clang::SourceLocation Start, + clang::tok::TokenKind Tok, + const clang::SourceManager &SM, + const clang::LangOptions &LangOpts) { + llvm::Optional CurrentToken; + do { + CurrentToken = clang::Lexer::findNextToken(Start, SM, LangOpts); + if (CurrentToken) { + Start = CurrentToken->getLocation(); + } + } while (CurrentToken && !CurrentToken->is(Tok)); + return CurrentToken; +} + // TODO: maybe change handling of macros // Given a Stmt which does not include it's semicolon this method returns the // SourceLocation of the semicolon. @@ -45,7 +59,7 @@ clang::SourceLocation getSemicolonAfterStmtEndLoc( } llvm::Optional NextTok = - findNextTokenSkippingComments(EndLoc, SM, LangOpts); + findNextToken(EndLoc, Kind, SM, LangOpts); // Testing for semicolon again avoids some issues with macros. if (NextTok && NextTok->is(Kind)) From 4a9b281011afe409aa921324a9dbc36eddb56a63 Mon Sep 17 00:00:00 2001 From: jr Date: Wed, 2 Feb 2022 11:37:52 +0100 Subject: [PATCH 38/42] Try to fix bug with semicolon in macros --- tools/module-extractor/printer.cpp | 58 ++++++++++++++++++++++-------- tools/module-extractor/printer.h | 1 + 2 files changed, 44 insertions(+), 15 deletions(-) diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp index ec8ab987d7..73efbe5336 100644 --- a/tools/module-extractor/printer.cpp +++ b/tools/module-extractor/printer.cpp @@ -26,10 +26,16 @@ void DeclPrinter::VisitFunctionDecl(const clang::FunctionDecl *decl) { if (isInSourceFile(decl, SM)) { const auto Semicolon = utils::getSemicolonAfterStmtEndLoc(decl->getEndLoc(), SM, LO); - assert(Semicolon.isValid()); - Slice S(SM.getExpansionRange(decl->getBeginLoc()).getBegin(), - utils::getEndOfToken(Semicolon, SM, LO)); - + Slice S; + if (Semicolon.isValid()) { + S = Slice(SM.getExpansionRange(decl->getBeginLoc()).getBegin(), + utils::getEndOfToken(Semicolon, SM, LO)); + } else { + S = Slice( + SM.getExpansionRange(decl->getBeginLoc()).getBegin(), + utils::getEndOfToken( + SM.getExpansionRange(decl->getEndLoc()).getBegin(), SM, LO)); + } if (!isAnyInWhitelist(decl, TargetLines, SM) && !EXTRACT_FUNCTION_DECLS) { S.NeedsDefine = true; } @@ -77,9 +83,16 @@ void DeclPrinter::VisitFunctionDecl(const clang::FunctionDecl *decl) { } else { const auto Semicolon = utils::getSemicolonAfterStmtEndLoc( FirstDecl->getEndLoc(), SM, LO); - assert(Semicolon.isValid()); - Slice S(SM.getExpansionRange(FirstDecl->getBeginLoc()).getBegin(), - utils::getEndOfToken(Semicolon, SM, LO)); + Slice S; + if (Semicolon.isValid()) { + S = Slice(SM.getExpansionRange(FirstDecl->getBeginLoc()).getBegin(), + utils::getEndOfToken(Semicolon, SM, LO)); + } else { + S = Slice(SM.getExpansionRange(FirstDecl->getBeginLoc()).getBegin(), + utils::getEndOfToken( + SM.getExpansionRange(FirstDecl->getEndLoc()).getEnd(), + SM, LO)); + } S.NeedsDefine = false; HeaderSlices.push_back(S); } @@ -149,9 +162,15 @@ void DeclPrinter::VisitVarDecl(const clang::VarDecl *Decl) { // Decl->dump(); const auto Semicolon = utils::getSemicolonAfterStmtEndLoc( Decl->getSourceRange().getEnd(), SM, LO); - assert(Semicolon.isValid()); - Slice S(SM.getExpansionRange(Decl->getBeginLoc()).getBegin(), - utils::getEndOfToken(Semicolon, SM, LO)); + Slice S; + if (Semicolon.isValid()) { + S = Slice(SM.getExpansionRange(Decl->getBeginLoc()).getBegin(), + utils::getEndOfToken(Semicolon, SM, LO)); + } else { + S = Slice(SM.getExpansionRange(Decl->getBeginLoc()).getBegin(), + utils::getEndOfToken( + SM.getExpansionRange(Decl->getEndLoc()).getEnd(), SM, LO)); + } if (!isAnyInWhitelist(Decl, TargetLines, SM)) { S.NeedsDefine = true; @@ -164,9 +183,15 @@ void DeclPrinter::VisitTypeDecl(const clang::TypeDecl *Decl) { if (isInSourceFile(Decl, SM)) { const auto Semicolon = utils::getSemicolonAfterStmtEndLoc(Decl->getEndLoc(), SM, LO); - assert(Semicolon.isValid()); - Slice S(SM.getExpansionRange(Decl->getBeginLoc()).getBegin(), - utils::getEndOfToken(Semicolon, SM, LO)); + Slice S; + if (Semicolon.isValid()) { + S = Slice(SM.getExpansionRange(Decl->getBeginLoc()).getBegin(), + utils::getEndOfToken(Semicolon, SM, LO)); + } else { + S = Slice(SM.getExpansionRange(Decl->getBeginLoc()).getBegin(), + utils::getEndOfToken( + SM.getExpansionRange(Decl->getEndLoc()).getEnd(), SM, LO)); + } if (!isAnyInWhitelist(Decl, TargetLines, SM) && !EXTRACT_TYPES) { S.NeedsDefine = true; @@ -342,9 +367,11 @@ void StmtPrinterFiltering::PrintStmt(const clang::Stmt *Stmt, bool required) { llvm::isa(Stmt) || llvm::isa(Stmt))) { bool visited = Visit(Stmt); - const auto Semicolon = + auto Semicolon = utils::getSemicolonAfterStmtEndLoc(Stmt->getEndLoc(), SM, LO); - assert(Semicolon.isValid()); + if (!Semicolon.isValid()) { + Semicolon = SM.getExpansionRange(Stmt->getEndLoc()).getEnd(); + } if (visited || required) { if (visited) { @@ -464,6 +491,7 @@ Slice::Slice(clang::SourceLocation Begin, clang::SourceLocation End, assert(Begin.isValid()); assert(End.isValid()); } +Slice::Slice() {} FileOffset::FileOffset(unsigned int Line, unsigned int Column) : Line(Line), Column(Column) { assert(Line > 0 && Column > 0); diff --git a/tools/module-extractor/printer.h b/tools/module-extractor/printer.h index a108baf756..e0b0f68d07 100644 --- a/tools/module-extractor/printer.h +++ b/tools/module-extractor/printer.h @@ -38,6 +38,7 @@ bool isInSourceFile(const T *Decl, const clang::SourceManager &SM) { } struct Slice { + Slice(); Slice(clang::SourceLocation Begin, clang::SourceLocation End, bool NeedsDefine = false); Slice(clang::SourceLocation Begin, clang::SourceLocation End, From e173bbb92c26068793120324a8a0480db3de74c9 Mon Sep 17 00:00:00 2001 From: jr Date: Fri, 11 Feb 2022 19:30:39 +0100 Subject: [PATCH 39/42] Remove unused files --- tools/module-extractor/CMakeLists.txt | 8 - .../module-extractor/SelectiveDeclPrinter.cpp | 1853 ----------- tools/module-extractor/SelectiveDeclPrinter.h | 24 - .../module-extractor/SelectiveStmtPrinter.cpp | 2814 ----------------- tools/module-extractor/SelectiveStmtPrinter.h | 20 - tools/module-extractor/back_mapper.cpp | 1 - 6 files changed, 4720 deletions(-) delete mode 100644 tools/module-extractor/SelectiveDeclPrinter.cpp delete mode 100644 tools/module-extractor/SelectiveDeclPrinter.h delete mode 100644 tools/module-extractor/SelectiveStmtPrinter.cpp delete mode 100644 tools/module-extractor/SelectiveStmtPrinter.h diff --git a/tools/module-extractor/CMakeLists.txt b/tools/module-extractor/CMakeLists.txt index a1925a8541..fcbb95f0cf 100644 --- a/tools/module-extractor/CMakeLists.txt +++ b/tools/module-extractor/CMakeLists.txt @@ -8,10 +8,6 @@ if (PHASAR_IN_TREE) tools/module-extractor/printer.h tools/module-extractor/source_utils.h tools/module-extractor/source_utils.cpp - tools/module-extractor/SelectiveDeclPrinter.cpp - tools/module-extractor/SelectiveDeclPrinter.h - tools/module-extractor/SelectiveStmtPrinter.cpp - tools/module-extractor/SelectiveStmtPrinter.h tools/module-extractor/printer.cpp tools/module-extractor/printer.h tools/module-extractor/include_handling.cpp @@ -27,10 +23,6 @@ else () ../module-extractor/source_utils.cpp ../module-extractor/printer.cpp ../module-extractor/printer.h - ../module-extractor/SelectiveDeclPrinter.cpp - ../module-extractor/SelectiveDeclPrinter.h - ../module-extractor/SelectiveStmtPrinter.cpp - ../module-extractor/SelectiveStmtPrinter.h ../module-extractor/printer.cpp ../module-extractor/printer.h ../module-extractor/include_handling.cpp diff --git a/tools/module-extractor/SelectiveDeclPrinter.cpp b/tools/module-extractor/SelectiveDeclPrinter.cpp deleted file mode 100644 index 9bf43c664f..0000000000 --- a/tools/module-extractor/SelectiveDeclPrinter.cpp +++ /dev/null @@ -1,1853 +0,0 @@ -//===--- DeclPrinter.cpp - Printing implementation for Decl ASTs ----------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This file implements the Decl::print method, which pretty prints the -// AST back out to C/Objective-C/C++/Objective-C++ code. -// -//===----------------------------------------------------------------------===// - -/** - * This file is ripped from llvm 10.0.1 and modified for selective printing - */ - -#include "SelectiveDeclPrinter.h" -#include "SelectiveStmtPrinter.h" -#include "source_utils.h" - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -using namespace clang; - -namespace { -class DeclPrinterFiltering : public DeclVisitor { - const std::set &lines; - raw_ostream &Out; - PrintingPolicy Policy; - const ASTContext &Context; - unsigned Indentation; - bool PrintInstantiation; - -public: -#define PTR(CLASS) typename std::add_pointer::type -#define DISPATCH(NAME, CLASS) \ - static_cast(this)->Visit##NAME( \ - static_cast(D)) - - bool Visit(PTR(Decl) D) { - if (!utils::shouldBeSliced(D, Context.getSourceManager(), lines)) { - return false; - } - switch (D->getKind()) { -#define DECL(DERIVED, BASE) \ - case Decl::DERIVED: \ - DISPATCH(DERIVED##Decl, DERIVED##Decl); \ - return true; -#define ABSTRACT_DECL(DECL) -#include "clang/AST/DeclNodes.inc" - } - llvm_unreachable("Decl that isn't part of DeclNodes.inc!"); - } - - /* //Patched to support filtering - public: - #define PTR(CLASS) typename std::add_pointer::type - #define DISPATCH(NAME, CLASS) \ - return - static_cast(this)->Visit##NAME(static_cast(D)) - - void Visit(PTR(Decl) D) { - //D->dump(); - const auto& sm = Context.getSourceManager(); - const auto begin = utils::getLocationAsWritten(D->getBeginLoc(), sm); - if(!utils::isInTargetFile(begin, sm)) { - return; - } - D->dump(); - const auto end = utils::getLocationAsWritten(D->getEndLoc(), sm); - if(!utils::isAnyInRangeInWhitelist( - utils::getLineFromSourceLocation(begin), - utils::getLineFromSourceLocation(end), - lines)) { - return; - } - switch (D->getKind()) { - #define DECL(DERIVED, BASE) \ - case Decl::DERIVED: DISPATCH(DERIVED##Decl, DERIVED##Decl); - #define ABSTRACT_DECL(DECL) - #include "clang/AST/DeclNodes.inc" - } - llvm_unreachable("Decl that isn't part of DeclNodes.inc!"); - } - #undef PTR - #undef DISPATCH*/ - -private: - raw_ostream &Indent() { return Indent(Indentation); } - raw_ostream &Indent(unsigned Indentation); - void ProcessDeclGroup(SmallVectorImpl &Decls); - - void Print(AccessSpecifier AS); - void PrintConstructorInitializers(CXXConstructorDecl *CDecl, - std::string &Proto); - - /// Print an Objective-C method type in parentheses. - /// - /// \param Quals The Objective-C declaration qualifiers. - /// \param T The type to print. - void PrintObjCMethodType(ASTContext &Ctx, Decl::ObjCDeclQualifier Quals, - QualType T); - - void PrintObjCTypeParams(ObjCTypeParamList *Params); - -public: - DeclPrinterFiltering(const std::set &lines, raw_ostream &Out, - const PrintingPolicy &Policy, const ASTContext &Context, - unsigned Indentation = 0, - bool PrintInstantiation = false) - : lines(lines), Out(Out), Policy(Policy), Context(Context), - Indentation(Indentation), PrintInstantiation(PrintInstantiation) {} - - void VisitDeclContext(DeclContext *DC, bool Indent = true); - - void VisitTranslationUnitDecl(TranslationUnitDecl *D); - void VisitTypedefDecl(TypedefDecl *D); - void VisitTypeAliasDecl(TypeAliasDecl *D); - void VisitEnumDecl(EnumDecl *D); - void VisitRecordDecl(RecordDecl *D); - void VisitEnumConstantDecl(EnumConstantDecl *D); - void VisitEmptyDecl(EmptyDecl *D); - void VisitFunctionDecl(FunctionDecl *D); - void VisitFriendDecl(FriendDecl *D); - void VisitFieldDecl(FieldDecl *D); - void VisitVarDecl(VarDecl *D); - void VisitLabelDecl(LabelDecl *D); - void VisitParmVarDecl(ParmVarDecl *D); - void VisitFileScopeAsmDecl(FileScopeAsmDecl *D); - void VisitImportDecl(ImportDecl *D); - void VisitStaticAssertDecl(StaticAssertDecl *D); - void VisitNamespaceDecl(NamespaceDecl *D); - void VisitUsingDirectiveDecl(UsingDirectiveDecl *D); - void VisitNamespaceAliasDecl(NamespaceAliasDecl *D); - void VisitCXXRecordDecl(CXXRecordDecl *D); - void VisitLinkageSpecDecl(LinkageSpecDecl *D); - void VisitTemplateDecl(const TemplateDecl *D); - void VisitFunctionTemplateDecl(FunctionTemplateDecl *D); - void VisitClassTemplateDecl(ClassTemplateDecl *D); - void VisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl *D); - void VisitClassTemplatePartialSpecializationDecl( - ClassTemplatePartialSpecializationDecl *D); - void VisitObjCMethodDecl(ObjCMethodDecl *D); - void VisitObjCImplementationDecl(ObjCImplementationDecl *D); - void VisitObjCInterfaceDecl(ObjCInterfaceDecl *D); - void VisitObjCProtocolDecl(ObjCProtocolDecl *D); - void VisitObjCCategoryImplDecl(ObjCCategoryImplDecl *D); - void VisitObjCCategoryDecl(ObjCCategoryDecl *D); - void VisitObjCCompatibleAliasDecl(ObjCCompatibleAliasDecl *D); - void VisitObjCPropertyDecl(ObjCPropertyDecl *D); - void VisitObjCPropertyImplDecl(ObjCPropertyImplDecl *D); - void VisitUnresolvedUsingTypenameDecl(UnresolvedUsingTypenameDecl *D); - void VisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl *D); - void VisitUsingDecl(UsingDecl *D); - void VisitUsingShadowDecl(UsingShadowDecl *D); - void VisitOMPThreadPrivateDecl(OMPThreadPrivateDecl *D); - void VisitOMPAllocateDecl(OMPAllocateDecl *D); - void VisitOMPRequiresDecl(OMPRequiresDecl *D); - void VisitOMPDeclareReductionDecl(OMPDeclareReductionDecl *D); - void VisitOMPDeclareMapperDecl(OMPDeclareMapperDecl *D); - void VisitOMPCapturedExprDecl(OMPCapturedExprDecl *D); - - void printTemplateParameters(const TemplateParameterList *Params, - bool OmitTemplateKW = false); - void printTemplateArguments(llvm::ArrayRef Args); - void printTemplateArguments(llvm::ArrayRef Args); - void prettyPrintAttributes(Decl *D); - void prettyPrintPragmas(Decl *D); - void printDeclType(QualType T, StringRef DeclName, bool Pack = false); -}; -} // namespace - -namespace selective_printer { -bool print(const Decl *decl, const std::set &lines, - raw_ostream &Out, const PrintingPolicy &Policy, unsigned Indentation, - bool PrintInstantiation) { - DeclPrinterFiltering Printer(lines, Out, Policy, decl->getASTContext(), - Indentation, PrintInstantiation); - return Printer.Visit(const_cast(decl)); -} - -bool print(const Decl *decl, const std::set &lines, - raw_ostream &Out, unsigned Indentation, bool PrintInstantiation) { - return print(decl, lines, Out, decl->getASTContext().getPrintingPolicy(), - Indentation, PrintInstantiation); -} - -bool printGroup(Decl **Begin, unsigned NumDecls, - const std::set &lines, raw_ostream &Out, - const PrintingPolicy &Policy, unsigned Indentation) { - if (NumDecls == 1) { - return print(*Begin, lines, Out, Policy, Indentation); - } - - Decl **End = Begin + NumDecls; - TagDecl *TD = dyn_cast(*Begin); - if (TD) - ++Begin; - - PrintingPolicy SubPolicy(Policy); - - bool printed = false; - bool isFirst = true; - for (; Begin != End; ++Begin) { - if (isFirst) { - if (TD) - SubPolicy.IncludeTagDefinition = true; - SubPolicy.SuppressSpecifiers = false; - isFirst = false; - } else { - if (!isFirst) - Out << ", "; - SubPolicy.IncludeTagDefinition = false; - SubPolicy.SuppressSpecifiers = true; - } - printed |= print(*Begin, lines, Out, SubPolicy, Indentation); - } - return printed; -} -} // namespace selective_printer - -// TODO JR -// void TemplateParameterList::print(raw_ostream &Out, const ASTContext -// &Context, -// bool OmitTemplateKW) const { -// print(Out, Context, Context.getPrintingPolicy(), OmitTemplateKW); -//} -// -// void TemplateParameterList::print(raw_ostream &Out, const ASTContext -// &Context, -// const PrintingPolicy &Policy, -// bool OmitTemplateKW) const { -// DeclPrinterFiltering Printer(Out, Policy, Context); -// Printer.printTemplateParameters(this, OmitTemplateKW); -//} - -// Renamed to prevent ODR violation -static QualType GetBaseTypeCopy(QualType T) { - // FIXME: This should be on the Type class! - QualType BaseType = T; - while (!BaseType->isSpecifierType()) { - if (const PointerType *PTy = BaseType->getAs()) - BaseType = PTy->getPointeeType(); - else if (const BlockPointerType *BPy = BaseType->getAs()) - BaseType = BPy->getPointeeType(); - else if (const ArrayType *ATy = dyn_cast(BaseType)) - BaseType = ATy->getElementType(); - else if (const FunctionType *FTy = BaseType->getAs()) - BaseType = FTy->getReturnType(); - else if (const VectorType *VTy = BaseType->getAs()) - BaseType = VTy->getElementType(); - else if (const ReferenceType *RTy = BaseType->getAs()) - BaseType = RTy->getPointeeType(); - else if (const AutoType *ATy = BaseType->getAs()) - BaseType = ATy->getDeducedType(); - else if (const ParenType *PTy = BaseType->getAs()) - BaseType = PTy->desugar(); - else - // This must be a syntax error. - break; - } - return BaseType; -} - -// Renamed to prevent ODR violation -static QualType getDeclTypeCopy(Decl *D) { - if (TypedefNameDecl *TDD = dyn_cast(D)) - return TDD->getUnderlyingType(); - if (ValueDecl *VD = dyn_cast(D)) - return VD->getType(); - return QualType(); -} - -// TODO Jr -// LLVM_DUMP_METHOD void DeclContext::dumpDeclContext() const { -// // Get the translation unit -// const DeclContext *DC = this; -// while (!DC->isTranslationUnit()) -// DC = DC->getParent(); -// -// ASTContext &Ctx = cast(DC)->getASTContext(); -// DeclPrinterFiltering Printer(llvm::errs(), Ctx.getPrintingPolicy(), Ctx, 0); -// Printer.VisitDeclContext(const_cast(this), /*Indent=*/false); -//} - -raw_ostream &DeclPrinterFiltering::Indent(unsigned Indentation) { - for (unsigned i = 0; i != Indentation; ++i) - Out << " "; - return Out; -} - -void DeclPrinterFiltering::prettyPrintAttributes(Decl *D) { - if (Policy.PolishForDeclaration) - return; - - if (D->hasAttrs()) { - AttrVec &Attrs = D->getAttrs(); - for (auto *A : Attrs) { - if (A->isInherited() || A->isImplicit()) - continue; - switch (A->getKind()) { -#define ATTR(X) -#define PRAGMA_SPELLING_ATTR(X) case attr::X: -#include - break; - default: - // TODO Jr - A->printPretty(Out, Policy); - break; - } - } - } -} - -void DeclPrinterFiltering::prettyPrintPragmas(Decl *D) { - if (Policy.PolishForDeclaration) - return; - - if (D->hasAttrs()) { - AttrVec &Attrs = D->getAttrs(); - for (auto *A : Attrs) { - switch (A->getKind()) { -#define ATTR(X) -#define PRAGMA_SPELLING_ATTR(X) case attr::X: -#include - // TODO JR - A->printPretty(Out, Policy); - Indent(); - break; - default: - break; - } - } - } -} - -void DeclPrinterFiltering::printDeclType(QualType T, StringRef DeclName, - bool Pack) { - // Normally, a PackExpansionType is written as T[3]... (for instance, as a - // template argument), but if it is the type of a declaration, the ellipsis - // is placed before the name being declared. - if (auto *PET = T->getAs()) { - Pack = true; - T = PET->getPattern(); - } - T.print(Out, Policy, (Pack ? "..." : "") + DeclName, Indentation); -} - -void DeclPrinterFiltering::ProcessDeclGroup(SmallVectorImpl &Decls) { - this->Indent(); - bool printed = selective_printer::printGroup( - Decls.data(), Decls.size(), this->lines, Out, Policy, Indentation); - if (printed) { - Out << ";\n"; - } - Decls.clear(); -} - -void DeclPrinterFiltering::Print(AccessSpecifier AS) { - switch (AS) { - case AS_none: - llvm_unreachable("No access specifier!"); - case AS_public: - Out << "public"; - break; - case AS_protected: - Out << "protected"; - break; - case AS_private: - Out << "private"; - break; - } -} - -void DeclPrinterFiltering::PrintConstructorInitializers( - CXXConstructorDecl *CDecl, std::string &Proto) { - bool HasInitializerList = false; - for (const auto *BMInitializer : CDecl->inits()) { - if (BMInitializer->isInClassMemberInitializer()) - continue; - - if (!HasInitializerList) { - Proto += " : "; - Out << Proto; - Proto.clear(); - HasInitializerList = true; - } else - Out << ", "; - - if (BMInitializer->isAnyMemberInitializer()) { - FieldDecl *FD = BMInitializer->getAnyMember(); - Out << *FD; - } else { - Out << QualType(BMInitializer->getBaseClass(), 0).getAsString(Policy); - } - - Out << "("; - if (!BMInitializer->getInit()) { - // Nothing to print - } else { - Expr *Init = BMInitializer->getInit(); - if (ExprWithCleanups *Tmp = dyn_cast(Init)) - Init = Tmp->getSubExpr(); - - Init = Init->IgnoreParens(); - - Expr *SimpleInit = nullptr; - Expr **Args = nullptr; - unsigned NumArgs = 0; - if (ParenListExpr *ParenList = dyn_cast(Init)) { - Args = ParenList->getExprs(); - NumArgs = ParenList->getNumExprs(); - } else if (CXXConstructExpr *Construct = - dyn_cast(Init)) { - Args = Construct->getArgs(); - NumArgs = Construct->getNumArgs(); - } else - SimpleInit = Init; - - if (SimpleInit) - selective_printer::printPretty(SimpleInit, lines, Out, nullptr, Policy, - &Context, Indentation); - else { - for (unsigned I = 0; I != NumArgs; ++I) { - assert(Args[I] != nullptr && "Expected non-null Expr"); - if (isa(Args[I])) - break; - - if (I) - Out << ", "; - selective_printer::printPretty(Args[I], lines, Out, nullptr, Policy, - &Context, Indentation); - } - } - } - Out << ")"; - if (BMInitializer->isPackExpansion()) - Out << "..."; - } -} - -//---------------------------------------------------------------------------- -// Common C declarations -//---------------------------------------------------------------------------- - -void DeclPrinterFiltering::VisitDeclContext(DeclContext *DC, bool Indent) { - if (Policy.TerseOutput) - return; - - if (Indent) - Indentation += Policy.Indentation; - - SmallVector Decls; - for (DeclContext::decl_iterator D = DC->decls_begin(), DEnd = DC->decls_end(); - D != DEnd; ++D) { - - // Don't print ObjCIvarDecls, as they are printed when visiting the - // containing ObjCInterfaceDecl. - if (isa(*D)) - continue; - - // Skip over implicit declarations in pretty-printing mode. - if (D->isImplicit()) - continue; - - // Don't print implicit specializations, as they are printed when visiting - // corresponding templates. - if (auto FD = dyn_cast(*D)) - if (FD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation && - !isa(DC)) - continue; - - // The next bits of code handle stuff like "struct {int x;} a,b"; we're - // forced to merge the declarations because there's no other way to - // refer to the struct in question. When that struct is named instead, we - // also need to merge to avoid splitting off a stand-alone struct - // declaration that produces the warning ext_no_declarators in some - // contexts. - // - // This limited merging is safe without a bunch of other checks because it - // only merges declarations directly referring to the tag, not typedefs. - // - // Check whether the current declaration should be grouped with a previous - // non-free-standing tag declaration. - QualType CurDeclType = getDeclTypeCopy(*D); - if (!Decls.empty() && !CurDeclType.isNull()) { - QualType BaseType = GetBaseTypeCopy(CurDeclType); - if (!BaseType.isNull() && isa(BaseType) && - cast(BaseType)->getOwnedTagDecl() == Decls[0]) { - Decls.push_back(*D); - continue; - } - } - - // If we have a merged group waiting to be handled, handle it now. - if (!Decls.empty()) - ProcessDeclGroup(Decls); - - // If the current declaration is not a free standing declaration, save it - // so we can merge it with the subsequent declaration(s) using it. - if (isa(*D) && !cast(*D)->isFreeStanding()) { - Decls.push_back(*D); - continue; - } - - if (isa(*D)) { - Indentation -= Policy.Indentation; - this->Indent(); - Print(D->getAccess()); - Out << ":\n"; - Indentation += Policy.Indentation; - continue; - } - - this->Indent(); - bool printed = Visit(*D); - - // FIXME: Need to be able to tell the DeclPrinter when - const char *Terminator = nullptr; - if (isa(*D) || isa(*D) || - isa(*D) || isa(*D) || - isa(*D)) - Terminator = nullptr; - else if (isa(*D) && cast(*D)->hasBody()) - Terminator = nullptr; - else if (auto FD = dyn_cast(*D)) { - if (FD->isThisDeclarationADefinition()) - Terminator = nullptr; - else - Terminator = ";"; - } else if (auto TD = dyn_cast(*D)) { - if (TD->getTemplatedDecl()->isThisDeclarationADefinition()) - Terminator = nullptr; - else - Terminator = ";"; - } else if (isa(*D) || isa(*D) || - isa(*D) || isa(*D) || - isa(*D) || isa(*D) || - isa(*D)) - Terminator = nullptr; - else if (isa(*D)) { - DeclContext::decl_iterator Next = D; - ++Next; - if (Next != DEnd) - Terminator = ","; - } else - Terminator = ";"; - - if (Terminator) { - if (printed || std::strcmp(Terminator, ";") != 0) { - Out << Terminator; - } - } - if (!Policy.TerseOutput && - ((isa(*D) && - cast(*D)->doesThisDeclarationHaveABody()) || - (isa(*D) && - cast(*D) - ->getTemplatedDecl() - ->doesThisDeclarationHaveABody()))) - ; // StmtPrinter already added '\n' after CompoundStmt. - else { - if (printed) { - Out << "\n"; - } - } - - // Declare target attribute is special one, natural spelling for the pragma - // assumes "ending" construct so print it here. - if (D->hasAttr()) - Out << "#pragma omp end declare target\n"; - } - - if (!Decls.empty()) - ProcessDeclGroup(Decls); - - if (Indent) - Indentation -= Policy.Indentation; -} - -void DeclPrinterFiltering::VisitTranslationUnitDecl(TranslationUnitDecl *D) { - VisitDeclContext(D, false); -} - -void DeclPrinterFiltering::VisitTypedefDecl(TypedefDecl *D) { - if (!Policy.SuppressSpecifiers) { - Out << "typedef "; - - if (D->isModulePrivate()) - Out << "__module_private__ "; - } - QualType Ty = D->getTypeSourceInfo()->getType(); - Ty.print(Out, Policy, D->getName(), Indentation); - prettyPrintAttributes(D); -} - -void DeclPrinterFiltering::VisitTypeAliasDecl(TypeAliasDecl *D) { - Out << "using " << *D; - prettyPrintAttributes(D); - Out << " = " << D->getTypeSourceInfo()->getType().getAsString(Policy); -} - -void DeclPrinterFiltering::VisitEnumDecl(EnumDecl *D) { - if (!Policy.SuppressSpecifiers && D->isModulePrivate()) - Out << "__module_private__ "; - Out << "enum"; - if (D->isScoped()) { - if (D->isScopedUsingClassTag()) - Out << " class"; - else - Out << " struct"; - } - - prettyPrintAttributes(D); - - Out << ' ' << *D; - - if (D->isFixed() && D->getASTContext().getLangOpts().CPlusPlus11) - Out << " : " << D->getIntegerType().stream(Policy); - - if (D->isCompleteDefinition()) { - Out << " {\n"; - VisitDeclContext(D); - Indent() << "}"; - } -} - -void DeclPrinterFiltering::VisitRecordDecl(RecordDecl *D) { - if (!Policy.SuppressSpecifiers && D->isModulePrivate()) - Out << "__module_private__ "; - Out << D->getKindName(); - - prettyPrintAttributes(D); - - if (D->getIdentifier()) - Out << ' ' << *D; - - if (D->isCompleteDefinition()) { - Out << " {\n"; - VisitDeclContext(D); - Indent() << "}"; - } -} - -void DeclPrinterFiltering::VisitEnumConstantDecl(EnumConstantDecl *D) { - Out << *D; - prettyPrintAttributes(D); - if (Expr *Init = D->getInitExpr()) { - Out << " = "; - selective_printer::printPretty(Init, lines, Out, nullptr, Policy, &Context, - Indentation, "\n"); - } -} - -// ODR rename -static void printExplicitSpecifierCopy(const std::set &lines, - const ASTContext *Context, - ExplicitSpecifier ES, - llvm::raw_ostream &Out, - PrintingPolicy &Policy, - unsigned Indentation) { - std::string Proto = "explicit"; - llvm::raw_string_ostream EOut(Proto); - if (ES.getExpr()) { - EOut << "("; - selective_printer::printPretty(ES.getExpr(), lines, EOut, nullptr, Policy, - Context, Indentation); - EOut << ")"; - } - EOut << " "; - EOut.flush(); - Out << EOut.str(); -} - -void DeclPrinterFiltering::VisitFunctionDecl(FunctionDecl *D) { - if (!D->getDescribedFunctionTemplate() && - !D->isFunctionTemplateSpecialization()) - prettyPrintPragmas(D); - - if (D->isFunctionTemplateSpecialization()) - Out << "template<> "; - else if (!D->getDescribedFunctionTemplate()) { - for (unsigned I = 0, NumTemplateParams = D->getNumTemplateParameterLists(); - I < NumTemplateParams; ++I) - printTemplateParameters(D->getTemplateParameterList(I)); - } - - CXXConstructorDecl *CDecl = dyn_cast(D); - CXXConversionDecl *ConversionDecl = dyn_cast(D); - CXXDeductionGuideDecl *GuideDecl = dyn_cast(D); - if (!Policy.SuppressSpecifiers) { - switch (D->getStorageClass()) { - case SC_None: - break; - case SC_Extern: - Out << "extern "; - break; - case SC_Static: - Out << "static "; - break; - case SC_PrivateExtern: - Out << "__private_extern__ "; - break; - case SC_Auto: - case SC_Register: - llvm_unreachable("invalid for functions"); - } - - if (D->isInlineSpecified()) - Out << "inline "; - if (D->isVirtualAsWritten()) - Out << "virtual "; - if (D->isModulePrivate()) - Out << "__module_private__ "; - if (D->isConstexprSpecified() && !D->isExplicitlyDefaulted()) - Out << "constexpr "; - if (D->isConsteval()) - Out << "consteval "; - ExplicitSpecifier ExplicitSpec = ExplicitSpecifier::getFromDecl(D); - if (ExplicitSpec.isSpecified()) - printExplicitSpecifierCopy(lines, &Context, ExplicitSpec, Out, Policy, - Indentation); - } - - PrintingPolicy SubPolicy(Policy); - SubPolicy.SuppressSpecifiers = false; - std::string Proto; - - if (Policy.FullyQualifiedName) { - Proto += D->getQualifiedNameAsString(); - } else { - llvm::raw_string_ostream OS(Proto); - if (!Policy.SuppressScope) { - if (const NestedNameSpecifier *NS = D->getQualifier()) { - // TODO jr - NS->print(OS, Policy); - } - } - D->getNameInfo().printName(OS, Policy); - } - - if (GuideDecl) - Proto = GuideDecl->getDeducedTemplate()->getDeclName().getAsString(); - if (D->isFunctionTemplateSpecialization()) { - llvm::raw_string_ostream POut(Proto); - DeclPrinterFiltering TArgPrinter(this->lines, POut, SubPolicy, Context, - Indentation); - const auto *TArgAsWritten = D->getTemplateSpecializationArgsAsWritten(); - if (TArgAsWritten && !Policy.PrintCanonicalTypes) - TArgPrinter.printTemplateArguments(TArgAsWritten->arguments()); - else if (const TemplateArgumentList *TArgs = - D->getTemplateSpecializationArgs()) - TArgPrinter.printTemplateArguments(TArgs->asArray()); - } - - QualType Ty = D->getType(); - while (const ParenType *PT = dyn_cast(Ty)) { - Proto = '(' + Proto + ')'; - Ty = PT->getInnerType(); - } - - if (const FunctionType *AFT = Ty->getAs()) { - const FunctionProtoType *FT = nullptr; - if (D->hasWrittenPrototype()) - FT = dyn_cast(AFT); - - Proto += "("; - if (FT) { - llvm::raw_string_ostream POut(Proto); - DeclPrinterFiltering ParamPrinter(this->lines, POut, SubPolicy, Context, - Indentation); - for (unsigned i = 0, e = D->getNumParams(); i != e; ++i) { - if (i) - POut << ", "; - ParamPrinter.VisitParmVarDecl(D->getParamDecl(i)); - } - - if (FT->isVariadic()) { - if (D->getNumParams()) - POut << ", "; - POut << "..."; - } - } else if (D->doesThisDeclarationHaveABody() && !D->hasPrototype()) { - for (unsigned i = 0, e = D->getNumParams(); i != e; ++i) { - if (i) - Proto += ", "; - Proto += D->getParamDecl(i)->getNameAsString(); - } - } - - Proto += ")"; - - if (FT) { - if (FT->isConst()) - Proto += " const"; - if (FT->isVolatile()) - Proto += " volatile"; - if (FT->isRestrict()) - Proto += " restrict"; - - switch (FT->getRefQualifier()) { - case RQ_None: - break; - case RQ_LValue: - Proto += " &"; - break; - case RQ_RValue: - Proto += " &&"; - break; - } - } - - if (FT && FT->hasDynamicExceptionSpec()) { - Proto += " throw("; - if (FT->getExceptionSpecType() == EST_MSAny) - Proto += "..."; - else - for (unsigned I = 0, N = FT->getNumExceptions(); I != N; ++I) { - if (I) - Proto += ", "; - - Proto += FT->getExceptionType(I).getAsString(SubPolicy); - } - Proto += ")"; - } else if (FT && isNoexceptExceptionSpec(FT->getExceptionSpecType())) { - Proto += " noexcept"; - if (isComputedNoexcept(FT->getExceptionSpecType())) { - Proto += "("; - llvm::raw_string_ostream EOut(Proto); - selective_printer::printPretty(FT->getNoexceptExpr(), lines, EOut, - nullptr, SubPolicy, &Context, - Indentation); - EOut.flush(); - Proto += EOut.str(); - Proto += ")"; - } - } - - if (CDecl) { - if (!Policy.TerseOutput) - PrintConstructorInitializers(CDecl, Proto); - } else if (!ConversionDecl && !isa(D)) { - if (FT && FT->hasTrailingReturn()) { - if (!GuideDecl) - Out << "auto "; - Out << Proto << " -> "; - Proto.clear(); - } - AFT->getReturnType().print(Out, Policy, Proto); - Proto.clear(); - } - Out << Proto; - - if (Expr *TrailingRequiresClause = D->getTrailingRequiresClause()) { - Out << " requires "; - selective_printer::printPretty(TrailingRequiresClause, lines, Out, - nullptr, SubPolicy, &Context, Indentation); - } - } else { - Ty.print(Out, Policy, Proto); - } - - prettyPrintAttributes(D); - - if (D->isPure()) - Out << " = 0"; - else if (D->isDeletedAsWritten()) - Out << " = delete"; - else if (D->isExplicitlyDefaulted()) - Out << " = default"; - else if (D->doesThisDeclarationHaveABody()) { - if (!Policy.TerseOutput) { - if (!D->hasPrototype() && D->getNumParams()) { - // This is a K&R function definition, so we need to print the - // parameters. - Out << '\n'; - DeclPrinterFiltering ParamPrinter(this->lines, Out, SubPolicy, Context, - Indentation); - Indentation += Policy.Indentation; - for (unsigned i = 0, e = D->getNumParams(); i != e; ++i) { - Indent(); - ParamPrinter.VisitParmVarDecl(D->getParamDecl(i)); - Out << ";\n"; - } - Indentation -= Policy.Indentation; - } else - Out << ' '; - - if (D->getBody()) - selective_printer::printPretty(D->getBody(), lines, Out, nullptr, - SubPolicy, &Context, Indentation); - } else { - if (!Policy.TerseOutput && isa(*D)) - Out << " {}"; - } - } -} - -void DeclPrinterFiltering::VisitFriendDecl(FriendDecl *D) { - if (TypeSourceInfo *TSI = D->getFriendType()) { - unsigned NumTPLists = D->getFriendTypeNumTemplateParameterLists(); - for (unsigned i = 0; i < NumTPLists; ++i) - printTemplateParameters(D->getFriendTypeTemplateParameterList(i)); - Out << "friend "; - Out << " " << TSI->getType().getAsString(Policy); - } else if (FunctionDecl *FD = dyn_cast(D->getFriendDecl())) { - Out << "friend "; - VisitFunctionDecl(FD); - } else if (FunctionTemplateDecl *FTD = - dyn_cast(D->getFriendDecl())) { - Out << "friend "; - VisitFunctionTemplateDecl(FTD); - } else if (ClassTemplateDecl *CTD = - dyn_cast(D->getFriendDecl())) { - Out << "friend "; - VisitRedeclarableTemplateDecl(CTD); - } -} - -void DeclPrinterFiltering::VisitFieldDecl(FieldDecl *D) { - // FIXME: add printing of pragma attributes if required. - if (!Policy.SuppressSpecifiers && D->isMutable()) - Out << "mutable "; - if (!Policy.SuppressSpecifiers && D->isModulePrivate()) - Out << "__module_private__ "; - - Out << D->getASTContext() - .getUnqualifiedObjCPointerType(D->getType()) - .stream(Policy, D->getName(), Indentation); - - if (D->isBitField()) { - Out << " : "; - selective_printer::printPretty(D->getBitWidth(), lines, Out, nullptr, - Policy, &Context, Indentation); - } - - Expr *Init = D->getInClassInitializer(); - if (!Policy.SuppressInitializers && Init) { - if (D->getInClassInitStyle() == ICIS_ListInit) - Out << " "; - else - Out << " = "; - selective_printer::printPretty(Init, lines, Out, nullptr, Policy, &Context, - Indentation); - } - prettyPrintAttributes(D); -} - -void DeclPrinterFiltering::VisitLabelDecl(LabelDecl *D) { Out << *D << ":"; } - -void DeclPrinterFiltering::VisitVarDecl(VarDecl *D) { - prettyPrintPragmas(D); - - QualType T = - D->getTypeSourceInfo() - ? D->getTypeSourceInfo()->getType() - : D->getASTContext().getUnqualifiedObjCPointerType(D->getType()); - - if (!Policy.SuppressSpecifiers) { - StorageClass SC = D->getStorageClass(); - if (SC != SC_None) - Out << VarDecl::getStorageClassSpecifierString(SC) << " "; - - switch (D->getTSCSpec()) { - case TSCS_unspecified: - break; - case TSCS___thread: - Out << "__thread "; - break; - case TSCS__Thread_local: - Out << "_Thread_local "; - break; - case TSCS_thread_local: - Out << "thread_local "; - break; - } - - if (D->isModulePrivate()) - Out << "__module_private__ "; - - if (D->isConstexpr()) { - Out << "constexpr "; - T.removeLocalConst(); - } - } - - printDeclType(T, D->getName()); - Expr *Init = D->getInit(); - if (!Policy.SuppressInitializers && Init) { - bool ImplicitInit = false; - if (CXXConstructExpr *Construct = - dyn_cast(Init->IgnoreImplicit())) { - if (D->getInitStyle() == VarDecl::CallInit && - !Construct->isListInitialization()) { - ImplicitInit = Construct->getNumArgs() == 0 || - Construct->getArg(0)->isDefaultArgument(); - } - } - if (!ImplicitInit) { - if ((D->getInitStyle() == VarDecl::CallInit) && !isa(Init)) - Out << "("; - else if (D->getInitStyle() == VarDecl::CInit) { - Out << " = "; - } - PrintingPolicy SubPolicy(Policy); - SubPolicy.SuppressSpecifiers = false; - SubPolicy.IncludeTagDefinition = false; - selective_printer::printPretty(Init, lines, Out, nullptr, SubPolicy, - &Context, Indentation); - if ((D->getInitStyle() == VarDecl::CallInit) && !isa(Init)) - Out << ")"; - } - } - prettyPrintAttributes(D); -} - -void DeclPrinterFiltering::VisitParmVarDecl(ParmVarDecl *D) { VisitVarDecl(D); } - -void DeclPrinterFiltering::VisitFileScopeAsmDecl(FileScopeAsmDecl *D) { - Out << "__asm ("; - selective_printer::printPretty(D->getAsmString(), lines, Out, nullptr, Policy, - &Context, Indentation); - Out << ")"; -} - -void DeclPrinterFiltering::VisitImportDecl(ImportDecl *D) { - Out << "@import " << D->getImportedModule()->getFullModuleName() << ";\n"; -} - -void DeclPrinterFiltering::VisitStaticAssertDecl(StaticAssertDecl *D) { - Out << "static_assert("; - selective_printer::printPretty(D->getAssertExpr(), lines, Out, nullptr, - Policy, &Context, Indentation); - if (StringLiteral *SL = D->getMessage()) { - Out << ", "; - selective_printer::printPretty(SL, lines, Out, nullptr, Policy, &Context, - Indentation); - } - Out << ")"; -} - -//---------------------------------------------------------------------------- -// C++ declarations -//---------------------------------------------------------------------------- -void DeclPrinterFiltering::VisitNamespaceDecl(NamespaceDecl *D) { - if (D->isInline()) - Out << "inline "; - Out << "namespace " << *D << " {\n"; - VisitDeclContext(D); - Indent() << "}"; -} - -void DeclPrinterFiltering::VisitUsingDirectiveDecl(UsingDirectiveDecl *D) { - Out << "using namespace "; - // TODO jr - if (D->getQualifier()) - D->getQualifier()->print(Out, Policy); - Out << *D->getNominatedNamespaceAsWritten(); -} - -void DeclPrinterFiltering::VisitNamespaceAliasDecl(NamespaceAliasDecl *D) { - Out << "namespace " << *D << " = "; - // TODO jr - if (D->getQualifier()) - D->getQualifier()->print(Out, Policy); - Out << *D->getAliasedNamespace(); -} - -void DeclPrinterFiltering::VisitEmptyDecl(EmptyDecl *D) { - prettyPrintAttributes(D); -} - -void DeclPrinterFiltering::VisitCXXRecordDecl(CXXRecordDecl *D) { - // FIXME: add printing of pragma attributes if required. - if (!Policy.SuppressSpecifiers && D->isModulePrivate()) - Out << "__module_private__ "; - Out << D->getKindName(); - - prettyPrintAttributes(D); - - if (D->getIdentifier()) { - Out << ' ' << *D; - - if (auto S = dyn_cast(D)) { - ArrayRef Args = S->getTemplateArgs().asArray(); - if (!Policy.PrintCanonicalTypes) - if (const auto *TSI = S->getTypeAsWritten()) - if (const auto *TST = - dyn_cast(TSI->getType())) - Args = TST->template_arguments(); - printTemplateArguments(Args); - } - } - - if (D->isCompleteDefinition()) { - // Print the base classes - if (D->getNumBases()) { - Out << " : "; - for (CXXRecordDecl::base_class_iterator Base = D->bases_begin(), - BaseEnd = D->bases_end(); - Base != BaseEnd; ++Base) { - if (Base != D->bases_begin()) - Out << ", "; - - if (Base->isVirtual()) - Out << "virtual "; - - AccessSpecifier AS = Base->getAccessSpecifierAsWritten(); - if (AS != AS_none) { - Print(AS); - Out << " "; - } - Out << Base->getType().getAsString(Policy); - - if (Base->isPackExpansion()) - Out << "..."; - } - } - - // Print the class definition - // FIXME: Doesn't print access specifiers, e.g., "public:" - if (Policy.TerseOutput) { - Out << " {}"; - } else { - Out << " {\n"; - VisitDeclContext(D); - Indent() << "}"; - } - } -} - -void DeclPrinterFiltering::VisitLinkageSpecDecl(LinkageSpecDecl *D) { - const char *l; - if (D->getLanguage() == LinkageSpecDecl::lang_c) - l = "C"; - else { - assert(D->getLanguage() == LinkageSpecDecl::lang_cxx && - "unknown language in linkage specification"); - l = "C++"; - } - - Out << "extern \"" << l << "\" "; - if (D->hasBraces()) { - Out << "{\n"; - VisitDeclContext(D); - Indent() << "}"; - } else - Visit(*D->decls_begin()); -} - -void DeclPrinterFiltering::printTemplateParameters( - const TemplateParameterList *Params, bool OmitTemplateKW) { - assert(Params); - - if (!OmitTemplateKW) - Out << "template "; - Out << '<'; - - bool NeedComma = false; - for (const Decl *Param : *Params) { - if (Param->isImplicit()) - continue; - - if (NeedComma) - Out << ", "; - else - NeedComma = true; - - if (auto TTP = dyn_cast(Param)) { - - // TODO jr - if (const TypeConstraint *TC = TTP->getTypeConstraint()) - TC->print(Out, Policy); - else if (TTP->wasDeclaredWithTypename()) - Out << "typename"; - else - Out << "class"; - - if (TTP->isParameterPack()) - Out << " ..."; - else if (!TTP->getName().empty()) - Out << ' '; - - Out << *TTP; - - if (TTP->hasDefaultArgument()) { - Out << " = "; - Out << TTP->getDefaultArgument().getAsString(Policy); - }; - } else if (auto NTTP = dyn_cast(Param)) { - StringRef Name; - if (IdentifierInfo *II = NTTP->getIdentifier()) - Name = II->getName(); - printDeclType(NTTP->getType(), Name, NTTP->isParameterPack()); - - if (NTTP->hasDefaultArgument()) { - Out << " = "; - selective_printer::printPretty(NTTP->getDefaultArgument(), lines, Out, - nullptr, Policy, &Context, Indentation); - } - } else if (auto TTPD = dyn_cast(Param)) { - VisitTemplateDecl(TTPD); - // FIXME: print the default argument, if present. - } - } - - Out << '>'; - if (!OmitTemplateKW) - Out << ' '; -} - -void DeclPrinterFiltering::printTemplateArguments( - ArrayRef Args) { - // TODO JR - Out << "<"; - for (size_t I = 0, E = Args.size(); I < E; ++I) { - if (I) - Out << ", "; - Args[I].print(Policy, Out); - } - Out << ">"; -} - -void DeclPrinterFiltering::printTemplateArguments( - ArrayRef Args) { - // TODO JR - Out << "<"; - for (size_t I = 0, E = Args.size(); I < E; ++I) { - if (I) - Out << ", "; - Args[I].getArgument().print(Policy, Out); - } - Out << ">"; -} - -void DeclPrinterFiltering::VisitTemplateDecl(const TemplateDecl *D) { - printTemplateParameters(D->getTemplateParameters()); - - if (const TemplateTemplateParmDecl *TTP = - dyn_cast(D)) { - Out << "class "; - if (TTP->isParameterPack()) - Out << "..."; - Out << D->getName(); - } else if (auto *TD = D->getTemplatedDecl()) - Visit(TD); - else if (const auto *Concept = dyn_cast(D)) { - Out << "concept " << Concept->getName() << " = "; - selective_printer::printPretty(Concept->getConstraintExpr(), lines, Out, - nullptr, Policy, &Context, Indentation); - Out << ";"; - } -} - -void DeclPrinterFiltering::VisitFunctionTemplateDecl(FunctionTemplateDecl *D) { - prettyPrintPragmas(D->getTemplatedDecl()); - // Print any leading template parameter lists. - if (const FunctionDecl *FD = D->getTemplatedDecl()) { - for (unsigned I = 0, NumTemplateParams = FD->getNumTemplateParameterLists(); - I < NumTemplateParams; ++I) - printTemplateParameters(FD->getTemplateParameterList(I)); - } - VisitRedeclarableTemplateDecl(D); - // Declare target attribute is special one, natural spelling for the pragma - // assumes "ending" construct so print it here. - if (D->getTemplatedDecl()->hasAttr()) - Out << "#pragma omp end declare target\n"; - - // Never print "instantiations" for deduction guides (they don't really - // have them). - if (PrintInstantiation && - !isa(D->getTemplatedDecl())) { - FunctionDecl *PrevDecl = D->getTemplatedDecl(); - const FunctionDecl *Def; - if (PrevDecl->isDefined(Def) && Def != PrevDecl) - return; - for (auto *I : D->specializations()) - if (I->getTemplateSpecializationKind() == TSK_ImplicitInstantiation) { - if (!PrevDecl->isThisDeclarationADefinition()) - Out << ";\n"; - Indent(); - prettyPrintPragmas(I); - Visit(I); - } - } -} - -void DeclPrinterFiltering::VisitClassTemplateDecl(ClassTemplateDecl *D) { - VisitRedeclarableTemplateDecl(D); - - if (PrintInstantiation) { - for (auto *I : D->specializations()) - if (I->getSpecializationKind() == TSK_ImplicitInstantiation) { - if (D->isThisDeclarationADefinition()) - Out << ";"; - Out << "\n"; - Visit(I); - } - } -} - -void DeclPrinterFiltering::VisitClassTemplateSpecializationDecl( - ClassTemplateSpecializationDecl *D) { - Out << "template<> "; - VisitCXXRecordDecl(D); -} - -void DeclPrinterFiltering::VisitClassTemplatePartialSpecializationDecl( - ClassTemplatePartialSpecializationDecl *D) { - printTemplateParameters(D->getTemplateParameters()); - VisitCXXRecordDecl(D); -} - -//---------------------------------------------------------------------------- -// Objective-C declarations -//---------------------------------------------------------------------------- - -void DeclPrinterFiltering::PrintObjCMethodType(ASTContext &Ctx, - Decl::ObjCDeclQualifier Quals, - QualType T) { - Out << '('; - if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_In) - Out << "in "; - if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_Inout) - Out << "inout "; - if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_Out) - Out << "out "; - if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_Bycopy) - Out << "bycopy "; - if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_Byref) - Out << "byref "; - if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_Oneway) - Out << "oneway "; - if (Quals & Decl::ObjCDeclQualifier::OBJC_TQ_CSNullability) { - if (auto nullability = AttributedType::stripOuterNullability(T)) - Out << getNullabilitySpelling(*nullability, true) << ' '; - } - - Out << Ctx.getUnqualifiedObjCPointerType(T).getAsString(Policy); - Out << ')'; -} - -void DeclPrinterFiltering::PrintObjCTypeParams(ObjCTypeParamList *Params) { - Out << "<"; - unsigned First = true; - for (auto *Param : *Params) { - if (First) { - First = false; - } else { - Out << ", "; - } - - switch (Param->getVariance()) { - case ObjCTypeParamVariance::Invariant: - break; - - case ObjCTypeParamVariance::Covariant: - Out << "__covariant "; - break; - - case ObjCTypeParamVariance::Contravariant: - Out << "__contravariant "; - break; - } - - Out << Param->getDeclName().getAsString(); - - if (Param->hasExplicitBound()) { - Out << " : " << Param->getUnderlyingType().getAsString(Policy); - } - } - Out << ">"; -} - -void DeclPrinterFiltering::VisitObjCMethodDecl(ObjCMethodDecl *OMD) { - if (OMD->isInstanceMethod()) - Out << "- "; - else - Out << "+ "; - if (!OMD->getReturnType().isNull()) { - PrintObjCMethodType(OMD->getASTContext(), OMD->getObjCDeclQualifier(), - OMD->getReturnType()); - } - - std::string name = OMD->getSelector().getAsString(); - std::string::size_type pos, lastPos = 0; - for (const auto *PI : OMD->parameters()) { - // FIXME: selector is missing here! - pos = name.find_first_of(':', lastPos); - if (lastPos != 0) - Out << " "; - Out << name.substr(lastPos, pos - lastPos) << ':'; - PrintObjCMethodType(OMD->getASTContext(), PI->getObjCDeclQualifier(), - PI->getType()); - Out << *PI; - lastPos = pos + 1; - } - - if (OMD->param_begin() == OMD->param_end()) - Out << name; - - if (OMD->isVariadic()) - Out << ", ..."; - - prettyPrintAttributes(OMD); - - if (OMD->getBody() && !Policy.TerseOutput) { - Out << ' '; - selective_printer::printPretty(OMD->getBody(), lines, Out, nullptr, Policy, - &Context); - } else if (Policy.PolishForDeclaration) - Out << ';'; -} - -void DeclPrinterFiltering::VisitObjCImplementationDecl( - ObjCImplementationDecl *OID) { - std::string I = OID->getNameAsString(); - ObjCInterfaceDecl *SID = OID->getSuperClass(); - - bool eolnOut = false; - if (SID) - Out << "@implementation " << I << " : " << *SID; - else - Out << "@implementation " << I; - - if (OID->ivar_size() > 0) { - Out << "{\n"; - eolnOut = true; - Indentation += Policy.Indentation; - for (const auto *I : OID->ivars()) { - Indent() << I->getASTContext() - .getUnqualifiedObjCPointerType(I->getType()) - .getAsString(Policy) - << ' ' << *I << ";\n"; - } - Indentation -= Policy.Indentation; - Out << "}\n"; - } else if (SID || (OID->decls_begin() != OID->decls_end())) { - Out << "\n"; - eolnOut = true; - } - VisitDeclContext(OID, false); - if (!eolnOut) - Out << "\n"; - Out << "@end"; -} - -void DeclPrinterFiltering::VisitObjCInterfaceDecl(ObjCInterfaceDecl *OID) { - std::string I = OID->getNameAsString(); - ObjCInterfaceDecl *SID = OID->getSuperClass(); - - if (!OID->isThisDeclarationADefinition()) { - Out << "@class " << I; - - if (auto TypeParams = OID->getTypeParamListAsWritten()) { - PrintObjCTypeParams(TypeParams); - } - - Out << ";"; - return; - } - bool eolnOut = false; - Out << "@interface " << I; - - if (auto TypeParams = OID->getTypeParamListAsWritten()) { - PrintObjCTypeParams(TypeParams); - } - - if (SID) - Out << " : " << QualType(OID->getSuperClassType(), 0).getAsString(Policy); - - // Protocols? - const ObjCList &Protocols = OID->getReferencedProtocols(); - if (!Protocols.empty()) { - for (ObjCList::iterator I = Protocols.begin(), - E = Protocols.end(); - I != E; ++I) - Out << (I == Protocols.begin() ? '<' : ',') << **I; - Out << "> "; - } - - if (OID->ivar_size() > 0) { - Out << "{\n"; - eolnOut = true; - Indentation += Policy.Indentation; - for (const auto *I : OID->ivars()) { - Indent() << I->getASTContext() - .getUnqualifiedObjCPointerType(I->getType()) - .getAsString(Policy) - << ' ' << *I << ";\n"; - } - Indentation -= Policy.Indentation; - Out << "}\n"; - } else if (SID || (OID->decls_begin() != OID->decls_end())) { - Out << "\n"; - eolnOut = true; - } - - VisitDeclContext(OID, false); - if (!eolnOut) - Out << "\n"; - Out << "@end"; - // FIXME: implement the rest... -} - -void DeclPrinterFiltering::VisitObjCProtocolDecl(ObjCProtocolDecl *PID) { - if (!PID->isThisDeclarationADefinition()) { - Out << "@protocol " << *PID << ";\n"; - return; - } - // Protocols? - const ObjCList &Protocols = PID->getReferencedProtocols(); - if (!Protocols.empty()) { - Out << "@protocol " << *PID; - for (ObjCList::iterator I = Protocols.begin(), - E = Protocols.end(); - I != E; ++I) - Out << (I == Protocols.begin() ? '<' : ',') << **I; - Out << ">\n"; - } else - Out << "@protocol " << *PID << '\n'; - VisitDeclContext(PID, false); - Out << "@end"; -} - -void DeclPrinterFiltering::VisitObjCCategoryImplDecl( - ObjCCategoryImplDecl *PID) { - Out << "@implementation " << *PID->getClassInterface() << '(' << *PID - << ")\n"; - - VisitDeclContext(PID, false); - Out << "@end"; - // FIXME: implement the rest... -} - -void DeclPrinterFiltering::VisitObjCCategoryDecl(ObjCCategoryDecl *PID) { - Out << "@interface " << *PID->getClassInterface(); - if (auto TypeParams = PID->getTypeParamList()) { - PrintObjCTypeParams(TypeParams); - } - Out << "(" << *PID << ")\n"; - if (PID->ivar_size() > 0) { - Out << "{\n"; - Indentation += Policy.Indentation; - for (const auto *I : PID->ivars()) - Indent() << I->getASTContext() - .getUnqualifiedObjCPointerType(I->getType()) - .getAsString(Policy) - << ' ' << *I << ";\n"; - Indentation -= Policy.Indentation; - Out << "}\n"; - } - - VisitDeclContext(PID, false); - Out << "@end"; - - // FIXME: implement the rest... -} - -void DeclPrinterFiltering::VisitObjCCompatibleAliasDecl( - ObjCCompatibleAliasDecl *AID) { - Out << "@compatibility_alias " << *AID << ' ' << *AID->getClassInterface() - << ";\n"; -} - -/// PrintObjCPropertyDecl - print a property declaration. -/// -/// Print attributes in the following order: -/// - class -/// - nonatomic | atomic -/// - assign | retain | strong | copy | weak | unsafe_unretained -/// - readwrite | readonly -/// - getter & setter -/// - nullability -void DeclPrinterFiltering::VisitObjCPropertyDecl(ObjCPropertyDecl *PDecl) { - if (PDecl->getPropertyImplementation() == ObjCPropertyDecl::Required) - Out << "@required\n"; - else if (PDecl->getPropertyImplementation() == ObjCPropertyDecl::Optional) - Out << "@optional\n"; - - QualType T = PDecl->getType(); - - Out << "@property"; - if (PDecl->getPropertyAttributes() != ObjCPropertyDecl::OBJC_PR_noattr) { - bool first = true; - Out << "("; - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_class) { - Out << (first ? "" : ", ") << "class"; - first = false; - } - - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_direct) { - Out << (first ? "" : ", ") << "direct"; - first = false; - } - - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_nonatomic) { - Out << (first ? "" : ", ") << "nonatomic"; - first = false; - } - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_atomic) { - Out << (first ? "" : ", ") << "atomic"; - first = false; - } - - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_assign) { - Out << (first ? "" : ", ") << "assign"; - first = false; - } - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_retain) { - Out << (first ? "" : ", ") << "retain"; - first = false; - } - - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_strong) { - Out << (first ? "" : ", ") << "strong"; - first = false; - } - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_copy) { - Out << (first ? "" : ", ") << "copy"; - first = false; - } - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_weak) { - Out << (first ? "" : ", ") << "weak"; - first = false; - } - if (PDecl->getPropertyAttributes() & - ObjCPropertyDecl::OBJC_PR_unsafe_unretained) { - Out << (first ? "" : ", ") << "unsafe_unretained"; - first = false; - } - - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_readwrite) { - Out << (first ? "" : ", ") << "readwrite"; - first = false; - } - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_readonly) { - Out << (first ? "" : ", ") << "readonly"; - first = false; - } - - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_getter) { - Out << (first ? "" : ", ") << "getter = "; - PDecl->getGetterName().print(Out); - first = false; - } - if (PDecl->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_setter) { - Out << (first ? "" : ", ") << "setter = "; - PDecl->getSetterName().print(Out); - first = false; - } - - if (PDecl->getPropertyAttributes() & - ObjCPropertyDecl::OBJC_PR_nullability) { - if (auto nullability = AttributedType::stripOuterNullability(T)) { - if (*nullability == NullabilityKind::Unspecified && - (PDecl->getPropertyAttributes() & - ObjCPropertyDecl::OBJC_PR_null_resettable)) { - Out << (first ? "" : ", ") << "null_resettable"; - } else { - Out << (first ? "" : ", ") - << getNullabilitySpelling(*nullability, true); - } - first = false; - } - } - - (void)first; // Silence dead store warning due to idiomatic code. - Out << ")"; - } - std::string TypeStr = - PDecl->getASTContext().getUnqualifiedObjCPointerType(T).getAsString( - Policy); - Out << ' ' << TypeStr; - if (!StringRef(TypeStr).endswith("*")) - Out << ' '; - Out << *PDecl; - if (Policy.PolishForDeclaration) - Out << ';'; -} - -void DeclPrinterFiltering::VisitObjCPropertyImplDecl( - ObjCPropertyImplDecl *PID) { - if (PID->getPropertyImplementation() == ObjCPropertyImplDecl::Synthesize) - Out << "@synthesize "; - else - Out << "@dynamic "; - Out << *PID->getPropertyDecl(); - if (PID->getPropertyIvarDecl()) - Out << '=' << *PID->getPropertyIvarDecl(); -} - -void DeclPrinterFiltering::VisitUsingDecl(UsingDecl *D) { - if (!D->isAccessDeclaration()) - Out << "using "; - if (D->hasTypename()) - Out << "typename "; - // TODO jr - D->getQualifier()->print(Out, Policy); - - // Use the correct record name when the using declaration is used for - // inheriting constructors. - for (const auto *Shadow : D->shadows()) { - if (const auto *ConstructorShadow = - dyn_cast(Shadow)) { - assert(Shadow->getDeclContext() == ConstructorShadow->getDeclContext()); - Out << *ConstructorShadow->getNominatedBaseClass(); - return; - } - } - Out << *D; -} - -void DeclPrinterFiltering::VisitUnresolvedUsingTypenameDecl( - UnresolvedUsingTypenameDecl *D) { - Out << "using typename "; - // TODO jr - D->getQualifier()->print(Out, Policy); - Out << D->getDeclName(); -} - -void DeclPrinterFiltering::VisitUnresolvedUsingValueDecl( - UnresolvedUsingValueDecl *D) { - if (!D->isAccessDeclaration()) - Out << "using "; - // TODO jr - D->getQualifier()->print(Out, Policy); - Out << D->getDeclName(); -} - -void DeclPrinterFiltering::VisitUsingShadowDecl(UsingShadowDecl *D) { - // ignore -} - -void DeclPrinterFiltering::VisitOMPThreadPrivateDecl(OMPThreadPrivateDecl *D) { - Out << "#pragma omp threadprivate"; - if (!D->varlist_empty()) { - for (OMPThreadPrivateDecl::varlist_iterator I = D->varlist_begin(), - E = D->varlist_end(); - I != E; ++I) { - Out << (I == D->varlist_begin() ? '(' : ','); - NamedDecl *ND = cast(*I)->getDecl(); - ND->printQualifiedName(Out); - } - Out << ")"; - } -} - -void DeclPrinterFiltering::VisitOMPAllocateDecl(OMPAllocateDecl *D) { - Out << "#pragma omp allocate"; - if (!D->varlist_empty()) { - for (OMPAllocateDecl::varlist_iterator I = D->varlist_begin(), - E = D->varlist_end(); - I != E; ++I) { - Out << (I == D->varlist_begin() ? '(' : ','); - NamedDecl *ND = cast(*I)->getDecl(); - ND->printQualifiedName(Out); - } - Out << ")"; - } - if (!D->clauselist_empty()) { - Out << " "; - OMPClausePrinter Printer(Out, Policy); - for (OMPClause *C : D->clauselists()) - Printer.Visit(C); - } -} - -void DeclPrinterFiltering::VisitOMPRequiresDecl(OMPRequiresDecl *D) { - Out << "#pragma omp requires "; - if (!D->clauselist_empty()) { - OMPClausePrinter Printer(Out, Policy); - for (auto I = D->clauselist_begin(), E = D->clauselist_end(); I != E; ++I) - Printer.Visit(*I); - } -} - -void DeclPrinterFiltering::VisitOMPDeclareReductionDecl( - OMPDeclareReductionDecl *D) { - if (!D->isInvalidDecl()) { - Out << "#pragma omp declare reduction ("; - if (D->getDeclName().getNameKind() == DeclarationName::CXXOperatorName) { - const char *OpName = - getOperatorSpelling(D->getDeclName().getCXXOverloadedOperator()); - assert(OpName && "not an overloaded operator"); - Out << OpName; - } else { - assert(D->getDeclName().isIdentifier()); - D->printName(Out); - } - Out << " : "; - D->getType().print(Out, Policy); - Out << " : "; - selective_printer::printPretty(D->getCombiner(), lines, Out, nullptr, - Policy, 0); - Out << ")"; - if (auto *Init = D->getInitializer()) { - Out << " initializer("; - switch (D->getInitializerKind()) { - case OMPDeclareReductionDecl::DirectInit: - Out << "omp_priv("; - break; - case OMPDeclareReductionDecl::CopyInit: - Out << "omp_priv = "; - break; - case OMPDeclareReductionDecl::CallInit: - break; - } - selective_printer::printPretty(Init, lines, Out, nullptr, Policy, 0); - if (D->getInitializerKind() == OMPDeclareReductionDecl::DirectInit) - Out << ")"; - Out << ")"; - } - } -} - -void DeclPrinterFiltering::VisitOMPDeclareMapperDecl(OMPDeclareMapperDecl *D) { - if (!D->isInvalidDecl()) { - Out << "#pragma omp declare mapper ("; - D->printName(Out); - Out << " : "; - D->getType().print(Out, Policy); - Out << " "; - Out << D->getVarName(); - Out << ")"; - if (!D->clauselist_empty()) { - OMPClausePrinter Printer(Out, Policy); - for (auto *C : D->clauselists()) { - Out << " "; - Printer.Visit(C); - } - } - } -} - -void DeclPrinterFiltering::VisitOMPCapturedExprDecl(OMPCapturedExprDecl *D) { - selective_printer::printPretty(D->getInit(), lines, Out, nullptr, Policy, - &Context, Indentation); -} diff --git a/tools/module-extractor/SelectiveDeclPrinter.h b/tools/module-extractor/SelectiveDeclPrinter.h deleted file mode 100644 index b695336026..0000000000 --- a/tools/module-extractor/SelectiveDeclPrinter.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef PHASAR_SELECTIVEDECLPRINTER_H -#define PHASAR_SELECTIVEDECLPRINTER_H - -#include -#include -#include - -#include - -namespace selective_printer { -bool print(const clang::Decl *decl, const std::set &lines, - llvm::raw_ostream &Out, const clang::PrintingPolicy &Policy, - unsigned Indentation = 0, bool PrintInstantiation = false); - -bool print(const clang::Decl *decl, const std::set &lines, - llvm::raw_ostream &Out, unsigned Indentation = 0, - bool PrintInstantiation = false); - -bool printGroup(clang::Decl **Begin, unsigned NumDecls, - const std::set &lines, llvm::raw_ostream &Out, - const clang::PrintingPolicy &Policy, unsigned Indentation = 0); -} // namespace selective_printer - -#endif // PHASAR_SELECTIVEDECLPRINTER_H diff --git a/tools/module-extractor/SelectiveStmtPrinter.cpp b/tools/module-extractor/SelectiveStmtPrinter.cpp deleted file mode 100644 index e0bc804fb8..0000000000 --- a/tools/module-extractor/SelectiveStmtPrinter.cpp +++ /dev/null @@ -1,2814 +0,0 @@ -//===- StmtPrinterFiltering.cpp - Printing implementation for Stmt ASTs -//------------===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This file implements the Stmt::dumpPretty/Stmt::printPretty methods, which -// pretty print the AST back out to C code. -// -//===----------------------------------------------------------------------===// - -/** - * This file is ripped from llvm 10.0.1 and modified for selective printing - */ - -#include "SelectiveStmtPrinter.h" -#include "SelectiveDeclPrinter.h" -#include "source_utils.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -using namespace clang; - -//===----------------------------------------------------------------------===// -// StmtPrinterFiltering Visitor -//===----------------------------------------------------------------------===// - -namespace { - -class StmtPrinterFiltering : public StmtVisitor { - const std::set &lines; - raw_ostream &OS; - unsigned IndentLevel; - PrinterHelper *Helper; - PrintingPolicy Policy; - std::string NL; - const ASTContext *Context; - - // Overwrite to enable filtering -public: -#define PTR(CLASS) typename std::add_pointer::type -#define DISPATCH(NAME, CLASS) \ - return static_cast(this)->Visit##NAME( \ - static_cast(S)) - - void Visit(PTR(Stmt) S) { - if (!utils::shouldBeSliced(S, Context->getSourceManager(), lines)) { - return; - } - - if (Helper && Helper->handledStmt(S, OS)) { - return; - } - // If we have a binary expr, dispatch to the subcode of the binop. A smart - // optimizer (e.g. LLVM) will fold this comparison into the switch stmt - // below. - if (PTR(BinaryOperator) BinOp = dyn_cast(S)) { - switch (BinOp->getOpcode()) { - case BO_PtrMemD: - DISPATCH(BinPtrMemD, BinaryOperator); - case BO_PtrMemI: - DISPATCH(BinPtrMemI, BinaryOperator); - case BO_Mul: - DISPATCH(BinMul, BinaryOperator); - case BO_Div: - DISPATCH(BinDiv, BinaryOperator); - case BO_Rem: - DISPATCH(BinRem, BinaryOperator); - case BO_Add: - DISPATCH(BinAdd, BinaryOperator); - case BO_Sub: - DISPATCH(BinSub, BinaryOperator); - case BO_Shl: - DISPATCH(BinShl, BinaryOperator); - case BO_Shr: - DISPATCH(BinShr, BinaryOperator); - - case BO_LT: - DISPATCH(BinLT, BinaryOperator); - case BO_GT: - DISPATCH(BinGT, BinaryOperator); - case BO_LE: - DISPATCH(BinLE, BinaryOperator); - case BO_GE: - DISPATCH(BinGE, BinaryOperator); - case BO_EQ: - DISPATCH(BinEQ, BinaryOperator); - case BO_NE: - DISPATCH(BinNE, BinaryOperator); - case BO_Cmp: - DISPATCH(BinCmp, BinaryOperator); - - case BO_And: - DISPATCH(BinAnd, BinaryOperator); - case BO_Xor: - DISPATCH(BinXor, BinaryOperator); - case BO_Or: - DISPATCH(BinOr, BinaryOperator); - case BO_LAnd: - DISPATCH(BinLAnd, BinaryOperator); - case BO_LOr: - DISPATCH(BinLOr, BinaryOperator); - case BO_Assign: - DISPATCH(BinAssign, BinaryOperator); - case BO_MulAssign: - DISPATCH(BinMulAssign, CompoundAssignOperator); - case BO_DivAssign: - DISPATCH(BinDivAssign, CompoundAssignOperator); - case BO_RemAssign: - DISPATCH(BinRemAssign, CompoundAssignOperator); - case BO_AddAssign: - DISPATCH(BinAddAssign, CompoundAssignOperator); - case BO_SubAssign: - DISPATCH(BinSubAssign, CompoundAssignOperator); - case BO_ShlAssign: - DISPATCH(BinShlAssign, CompoundAssignOperator); - case BO_ShrAssign: - DISPATCH(BinShrAssign, CompoundAssignOperator); - case BO_AndAssign: - DISPATCH(BinAndAssign, CompoundAssignOperator); - case BO_OrAssign: - DISPATCH(BinOrAssign, CompoundAssignOperator); - case BO_XorAssign: - DISPATCH(BinXorAssign, CompoundAssignOperator); - case BO_Comma: - DISPATCH(BinComma, BinaryOperator); - } - } else if (PTR(UnaryOperator) UnOp = dyn_cast(S)) { - switch (UnOp->getOpcode()) { - case UO_PostInc: - DISPATCH(UnaryPostInc, UnaryOperator); - case UO_PostDec: - DISPATCH(UnaryPostDec, UnaryOperator); - case UO_PreInc: - DISPATCH(UnaryPreInc, UnaryOperator); - case UO_PreDec: - DISPATCH(UnaryPreDec, UnaryOperator); - case UO_AddrOf: - DISPATCH(UnaryAddrOf, UnaryOperator); - case UO_Deref: - DISPATCH(UnaryDeref, UnaryOperator); - case UO_Plus: - DISPATCH(UnaryPlus, UnaryOperator); - case UO_Minus: - DISPATCH(UnaryMinus, UnaryOperator); - case UO_Not: - DISPATCH(UnaryNot, UnaryOperator); - case UO_LNot: - DISPATCH(UnaryLNot, UnaryOperator); - case UO_Real: - DISPATCH(UnaryReal, UnaryOperator); - case UO_Imag: - DISPATCH(UnaryImag, UnaryOperator); - case UO_Extension: - DISPATCH(UnaryExtension, UnaryOperator); - case UO_Coawait: - DISPATCH(UnaryCoawait, UnaryOperator); - } - } - - // Top switch stmt: dispatch to VisitFooStmt for each FooStmt. - switch (S->getStmtClass()) { - default: - llvm_unreachable("Unknown stmt kind!"); -#define ABSTRACT_STMT(STMT) -#define STMT(CLASS, PARENT) \ - case Stmt::CLASS##Class: \ - DISPATCH(CLASS, CLASS); -#include "clang/AST/StmtNodes.inc" - } - } - -public: - StmtPrinterFiltering(const std::set &lines, raw_ostream &os, - PrinterHelper *helper, const PrintingPolicy &Policy, - unsigned Indentation = 0, StringRef NL = "\n", - const ASTContext *Context = nullptr) - : lines(lines), OS(os), IndentLevel(Indentation), Helper(helper), - Policy(Policy), NL(NL), Context(Context) {} - - void PrintStmt(Stmt *S, bool required = false) { - PrintStmt(S, Policy.Indentation, required); - } - - void PrintStmt(Stmt *S, int SubIndent, bool required = false) { - bool used = utils::shouldBeSliced(S, Context->getSourceManager(), lines); - if (!used) { - if (required) { - OS << "{}"; - } - return; - } - IndentLevel += SubIndent; - if (S && isa(S)) { - // If this is an expr used in a stmt context, indent and newline it. - Indent(); - Visit(S); - OS << ";" << NL; - } else if (S) { - Visit(S); - } else { - Indent() << "<<>>" << NL; - } - IndentLevel -= SubIndent; - } - - void PrintInitStmt(Stmt *S, unsigned PrefixWidth) { - // FIXME: Cope better with odd prefix widths. - IndentLevel += (PrefixWidth + 1) / 2; - if (auto *DS = dyn_cast(S)) - PrintRawDeclStmt(DS); - else - PrintExpr(cast(S)); - OS << "; "; - IndentLevel -= (PrefixWidth + 1) / 2; - } - - void PrintControlledStmt(Stmt *S) { - if (auto *CS = dyn_cast(S)) { - OS << " "; - PrintRawCompoundStmt(CS, true); - OS << NL; - } else { - OS << NL; - PrintStmt(S, true); - } - } - - void PrintRawCompoundStmt(CompoundStmt *S, bool required = false); - void PrintRawDecl(Decl *D); - void PrintRawDeclStmt(const DeclStmt *S); - void PrintRawIfStmt(IfStmt *If); - void PrintRawCXXCatchStmt(CXXCatchStmt *Catch); - void PrintCallArgs(CallExpr *E); - void PrintRawSEHExceptHandler(SEHExceptStmt *S); - void PrintRawSEHFinallyStmt(SEHFinallyStmt *S); - void PrintOMPExecutableDirective(OMPExecutableDirective *S, - bool ForceNoStmt = false); - - void PrintExpr(Expr *E) { - if (E) - Visit(E); - else - OS << ""; - } - - raw_ostream &Indent(int Delta = 0) { - for (int i = 0, e = IndentLevel + Delta; i < e; ++i) - OS << " "; - return OS; - } - - // void Visit(Stmt *S) { - // if (Helper && Helper->handledStmt(S, OS)) - // return; - // else - // StmtVisitor::Visit(S); - // } - - void VisitStmt(Stmt *Node) LLVM_ATTRIBUTE_UNUSED { - Indent() << "<>" << NL; - } - - void VisitExpr(Expr *Node) LLVM_ATTRIBUTE_UNUSED { - OS << "<>"; - } - - void VisitCXXNamedCastExpr(CXXNamedCastExpr *Node); - -#define ABSTRACT_STMT(CLASS) -#define STMT(CLASS, PARENT) void Visit##CLASS(CLASS *Node); -#include "clang/AST/StmtNodes.inc" -}; - -} // namespace - -//===----------------------------------------------------------------------===// -// Stmt printing methods. -//===----------------------------------------------------------------------===// - -/// PrintRawCompoundStmt - Print a compound stmt without indenting the {, and -/// with no newline after the }. -void StmtPrinterFiltering::PrintRawCompoundStmt(CompoundStmt *Node, - bool required) { - if (required && - !utils::shouldBeSliced(Node, Context->getSourceManager(), lines)) { - OS << "{}"; - return; - } - OS << "{" << NL; - for (auto *I : Node->body()) - PrintStmt(I); - - Indent() << "}"; -} - -void StmtPrinterFiltering::PrintRawDecl(Decl *D) { - selective_printer::print(D, lines, OS, Policy, IndentLevel); -} - -void StmtPrinterFiltering::PrintRawDeclStmt(const DeclStmt *S) { - SmallVector Decls(S->decls()); - selective_printer::printGroup(Decls.data(), Decls.size(), lines, OS, Policy, - IndentLevel); -} - -void StmtPrinterFiltering::VisitNullStmt(NullStmt *Node) { - Indent() << ";" << NL; -} - -void StmtPrinterFiltering::VisitDeclStmt(DeclStmt *Node) { - Indent(); - PrintRawDeclStmt(Node); - OS << ";" << NL; -} - -void StmtPrinterFiltering::VisitCompoundStmt(CompoundStmt *Node) { - Indent(); - PrintRawCompoundStmt(Node); - OS << "" << NL; -} - -void StmtPrinterFiltering::VisitCaseStmt(CaseStmt *Node) { - Indent(-1) << "case "; - // Node->dump(); - // Node->getLHS()->dump(); - PrintExpr(Node->getLHS()); - - if (Node->getRHS()) { - OS << " ... "; - PrintExpr(Node->getRHS()); - } - OS << ":" << NL; - - PrintStmt(Node->getSubStmt(), 0); -} - -void StmtPrinterFiltering::VisitDefaultStmt(DefaultStmt *Node) { - Indent(-1) << "default:" << NL; - PrintStmt(Node->getSubStmt(), 0); -} - -void StmtPrinterFiltering::VisitLabelStmt(LabelStmt *Node) { - Indent(-1) << Node->getName() << ":" << NL; - PrintStmt(Node->getSubStmt(), 0); -} - -void StmtPrinterFiltering::VisitAttributedStmt(AttributedStmt *Node) { - for (const auto *Attr : Node->getAttrs()) { - // TODO Jr - Attr->printPretty(OS, Policy); - } - - PrintStmt(Node->getSubStmt(), 0); -} - -void StmtPrinterFiltering::PrintRawIfStmt(IfStmt *If) { - OS << "if ("; - if (If->getInit()) - PrintInitStmt(If->getInit(), 4); - if (const DeclStmt *DS = If->getConditionVariableDeclStmt()) - PrintRawDeclStmt(DS); - else - PrintExpr(If->getCond()); - OS << ')'; - - if (auto *CS = dyn_cast(If->getThen())) { - OS << ' '; - PrintRawCompoundStmt(CS); - OS << (If->getElse() ? " " : NL); - } else { - OS << NL; - PrintStmt(If->getThen(), true); - if (If->getElse()) - Indent(); - } - - if (Stmt *Else = If->getElse()) { - OS << "else"; - - if (auto *CS = dyn_cast(Else)) { - OS << ' '; - PrintRawCompoundStmt(CS); - OS << NL; - } else if (auto *ElseIf = dyn_cast(Else)) { - OS << ' '; - PrintRawIfStmt(ElseIf); - } else { - OS << NL; - PrintStmt(If->getElse(), true); - } - } -} - -void StmtPrinterFiltering::VisitIfStmt(IfStmt *If) { - Indent(); - PrintRawIfStmt(If); -} - -void StmtPrinterFiltering::VisitSwitchStmt(SwitchStmt *Node) { - Indent() << "switch ("; - if (Node->getInit()) - PrintInitStmt(Node->getInit(), 8); - if (const DeclStmt *DS = Node->getConditionVariableDeclStmt()) - PrintRawDeclStmt(DS); - else - PrintExpr(Node->getCond()); - OS << ")"; - PrintControlledStmt(Node->getBody()); -} - -void StmtPrinterFiltering::VisitWhileStmt(WhileStmt *Node) { - Indent() << "while ("; - if (const DeclStmt *DS = Node->getConditionVariableDeclStmt()) - PrintRawDeclStmt(DS); - else - PrintExpr(Node->getCond()); - OS << ")" << NL; - PrintStmt(Node->getBody(), true); -} - -void StmtPrinterFiltering::VisitDoStmt(DoStmt *Node) { - Indent() << "do "; - if (auto *CS = dyn_cast(Node->getBody())) { - PrintRawCompoundStmt(CS); - OS << " "; - } else { - OS << NL; - PrintStmt(Node->getBody(), true); - Indent(); - } - - OS << "while ("; - PrintExpr(Node->getCond()); - OS << ");" << NL; -} - -void StmtPrinterFiltering::VisitForStmt(ForStmt *Node) { - Indent() << "for ("; - if (Node->getInit()) - PrintInitStmt(Node->getInit(), 5); - else - OS << (Node->getCond() ? "; " : ";"); - if (Node->getCond()) - PrintExpr(Node->getCond()); - OS << ";"; - if (Node->getInc()) { - OS << " "; - PrintExpr(Node->getInc()); - } - OS << ")"; - PrintControlledStmt(Node->getBody()); -} - -void StmtPrinterFiltering::VisitObjCForCollectionStmt( - ObjCForCollectionStmt *Node) { - Indent() << "for ("; - if (auto *DS = dyn_cast(Node->getElement())) - PrintRawDeclStmt(DS); - else - PrintExpr(cast(Node->getElement())); - OS << " in "; - PrintExpr(Node->getCollection()); - OS << ")"; - PrintControlledStmt(Node->getBody()); -} - -void StmtPrinterFiltering::VisitCXXForRangeStmt(CXXForRangeStmt *Node) { - Indent() << "for ("; - if (Node->getInit()) - PrintInitStmt(Node->getInit(), 5); - PrintingPolicy SubPolicy(Policy); - SubPolicy.SuppressInitializers = true; - selective_printer::print(Node->getLoopVariable(), lines, OS, SubPolicy, - IndentLevel); - OS << " : "; - PrintExpr(Node->getRangeInit()); - OS << ")"; - PrintControlledStmt(Node->getBody()); -} - -void StmtPrinterFiltering::VisitMSDependentExistsStmt( - MSDependentExistsStmt *Node) { - Indent(); - if (Node->isIfExists()) - OS << "__if_exists ("; - else - OS << "__if_not_exists ("; - - if (NestedNameSpecifier *Qualifier = - Node->getQualifierLoc().getNestedNameSpecifier()) - Qualifier->print(OS, Policy); - - OS << Node->getNameInfo() << ") "; - - PrintRawCompoundStmt(Node->getSubStmt()); -} - -void StmtPrinterFiltering::VisitGotoStmt(GotoStmt *Node) { - Indent() << "goto " << Node->getLabel()->getName() << ";"; - if (Policy.IncludeNewlines) - OS << NL; -} - -void StmtPrinterFiltering::VisitIndirectGotoStmt(IndirectGotoStmt *Node) { - Indent() << "goto *"; - PrintExpr(Node->getTarget()); - OS << ";"; - if (Policy.IncludeNewlines) - OS << NL; -} - -void StmtPrinterFiltering::VisitContinueStmt(ContinueStmt *Node) { - Indent() << "continue;"; - if (Policy.IncludeNewlines) - OS << NL; -} - -void StmtPrinterFiltering::VisitBreakStmt(BreakStmt *Node) { - Indent() << "break;"; - if (Policy.IncludeNewlines) - OS << NL; -} - -void StmtPrinterFiltering::VisitReturnStmt(ReturnStmt *Node) { - Indent() << "return"; - if (Node->getRetValue()) { - OS << " "; - PrintExpr(Node->getRetValue()); - } - OS << ";"; - if (Policy.IncludeNewlines) - OS << NL; -} - -void StmtPrinterFiltering::VisitGCCAsmStmt(GCCAsmStmt *Node) { - Indent() << "asm "; - - if (Node->isVolatile()) - OS << "volatile "; - - if (Node->isAsmGoto()) - OS << "goto "; - - OS << "("; - VisitStringLiteral(Node->getAsmString()); - - // Outputs - if (Node->getNumOutputs() != 0 || Node->getNumInputs() != 0 || - Node->getNumClobbers() != 0 || Node->getNumLabels() != 0) - OS << " : "; - - for (unsigned i = 0, e = Node->getNumOutputs(); i != e; ++i) { - if (i != 0) - OS << ", "; - - if (!Node->getOutputName(i).empty()) { - OS << '['; - OS << Node->getOutputName(i); - OS << "] "; - } - - VisitStringLiteral(Node->getOutputConstraintLiteral(i)); - OS << " ("; - Visit(Node->getOutputExpr(i)); - OS << ")"; - } - - // Inputs - if (Node->getNumInputs() != 0 || Node->getNumClobbers() != 0 || - Node->getNumLabels() != 0) - OS << " : "; - - for (unsigned i = 0, e = Node->getNumInputs(); i != e; ++i) { - if (i != 0) - OS << ", "; - - if (!Node->getInputName(i).empty()) { - OS << '['; - OS << Node->getInputName(i); - OS << "] "; - } - - VisitStringLiteral(Node->getInputConstraintLiteral(i)); - OS << " ("; - Visit(Node->getInputExpr(i)); - OS << ")"; - } - - // Clobbers - if (Node->getNumClobbers() != 0 || Node->getNumLabels()) - OS << " : "; - - for (unsigned i = 0, e = Node->getNumClobbers(); i != e; ++i) { - if (i != 0) - OS << ", "; - - VisitStringLiteral(Node->getClobberStringLiteral(i)); - } - - // Labels - if (Node->getNumLabels() != 0) - OS << " : "; - - for (unsigned i = 0, e = Node->getNumLabels(); i != e; ++i) { - if (i != 0) - OS << ", "; - OS << Node->getLabelName(i); - } - - OS << ");"; - if (Policy.IncludeNewlines) - OS << NL; -} - -void StmtPrinterFiltering::VisitMSAsmStmt(MSAsmStmt *Node) { - // FIXME: Implement MS style inline asm statement printer. - Indent() << "__asm "; - if (Node->hasBraces()) - OS << "{" << NL; - OS << Node->getAsmString() << NL; - if (Node->hasBraces()) - Indent() << "}" << NL; -} - -void StmtPrinterFiltering::VisitCapturedStmt(CapturedStmt *Node) { - PrintStmt(Node->getCapturedDecl()->getBody()); -} - -void StmtPrinterFiltering::VisitObjCAtTryStmt(ObjCAtTryStmt *Node) { - Indent() << "@try"; - if (auto *TS = dyn_cast(Node->getTryBody())) { - PrintRawCompoundStmt(TS); - OS << NL; - } - - for (unsigned I = 0, N = Node->getNumCatchStmts(); I != N; ++I) { - ObjCAtCatchStmt *catchStmt = Node->getCatchStmt(I); - Indent() << "@catch("; - if (catchStmt->getCatchParamDecl()) { - if (Decl *DS = catchStmt->getCatchParamDecl()) - PrintRawDecl(DS); - } - OS << ")"; - if (auto *CS = dyn_cast(catchStmt->getCatchBody())) { - PrintRawCompoundStmt(CS); - OS << NL; - } - } - - if (auto *FS = static_cast(Node->getFinallyStmt())) { - Indent() << "@finally"; - PrintRawCompoundStmt(dyn_cast(FS->getFinallyBody())); - OS << NL; - } -} - -void StmtPrinterFiltering::VisitObjCAtFinallyStmt(ObjCAtFinallyStmt *Node) {} - -void StmtPrinterFiltering::VisitObjCAtCatchStmt(ObjCAtCatchStmt *Node) { - Indent() << "@catch (...) { /* todo */ } " << NL; -} - -void StmtPrinterFiltering::VisitObjCAtThrowStmt(ObjCAtThrowStmt *Node) { - Indent() << "@throw"; - if (Node->getThrowExpr()) { - OS << " "; - PrintExpr(Node->getThrowExpr()); - } - OS << ";" << NL; -} - -void StmtPrinterFiltering::VisitObjCAvailabilityCheckExpr( - ObjCAvailabilityCheckExpr *Node) { - OS << "@available(...)"; -} - -void StmtPrinterFiltering::VisitObjCAtSynchronizedStmt( - ObjCAtSynchronizedStmt *Node) { - Indent() << "@synchronized ("; - PrintExpr(Node->getSynchExpr()); - OS << ")"; - PrintRawCompoundStmt(Node->getSynchBody()); - OS << NL; -} - -void StmtPrinterFiltering::VisitObjCAutoreleasePoolStmt( - ObjCAutoreleasePoolStmt *Node) { - Indent() << "@autoreleasepool"; - PrintRawCompoundStmt(dyn_cast(Node->getSubStmt())); - OS << NL; -} - -void StmtPrinterFiltering::PrintRawCXXCatchStmt(CXXCatchStmt *Node) { - OS << "catch ("; - if (Decl *ExDecl = Node->getExceptionDecl()) - PrintRawDecl(ExDecl); - else - OS << "..."; - OS << ") "; - PrintRawCompoundStmt(cast(Node->getHandlerBlock())); -} - -void StmtPrinterFiltering::VisitCXXCatchStmt(CXXCatchStmt *Node) { - Indent(); - PrintRawCXXCatchStmt(Node); - OS << NL; -} - -void StmtPrinterFiltering::VisitCXXTryStmt(CXXTryStmt *Node) { - Indent() << "try "; - PrintRawCompoundStmt(Node->getTryBlock()); - for (unsigned i = 0, e = Node->getNumHandlers(); i < e; ++i) { - OS << " "; - PrintRawCXXCatchStmt(Node->getHandler(i)); - } - OS << NL; -} - -void StmtPrinterFiltering::VisitSEHTryStmt(SEHTryStmt *Node) { - Indent() << (Node->getIsCXXTry() ? "try " : "__try "); - PrintRawCompoundStmt(Node->getTryBlock()); - SEHExceptStmt *E = Node->getExceptHandler(); - SEHFinallyStmt *F = Node->getFinallyHandler(); - if (E) - PrintRawSEHExceptHandler(E); - else { - assert(F && "Must have a finally block..."); - PrintRawSEHFinallyStmt(F); - } - OS << NL; -} - -void StmtPrinterFiltering::PrintRawSEHFinallyStmt(SEHFinallyStmt *Node) { - OS << "__finally "; - PrintRawCompoundStmt(Node->getBlock()); - OS << NL; -} - -void StmtPrinterFiltering::PrintRawSEHExceptHandler(SEHExceptStmt *Node) { - OS << "__except ("; - VisitExpr(Node->getFilterExpr()); - OS << ")" << NL; - PrintRawCompoundStmt(Node->getBlock()); - OS << NL; -} - -void StmtPrinterFiltering::VisitSEHExceptStmt(SEHExceptStmt *Node) { - Indent(); - PrintRawSEHExceptHandler(Node); - OS << NL; -} - -void StmtPrinterFiltering::VisitSEHFinallyStmt(SEHFinallyStmt *Node) { - Indent(); - PrintRawSEHFinallyStmt(Node); - OS << NL; -} - -void StmtPrinterFiltering::VisitSEHLeaveStmt(SEHLeaveStmt *Node) { - Indent() << "__leave;"; - if (Policy.IncludeNewlines) - OS << NL; -} - -//===----------------------------------------------------------------------===// -// OpenMP directives printing methods -//===----------------------------------------------------------------------===// - -void StmtPrinterFiltering::PrintOMPExecutableDirective( - OMPExecutableDirective *S, bool ForceNoStmt) { - OMPClausePrinter Printer(OS, Policy); - ArrayRef Clauses = S->clauses(); - for (auto *Clause : Clauses) - if (Clause && !Clause->isImplicit()) { - OS << ' '; - Printer.Visit(Clause); - } - OS << NL; - if (!ForceNoStmt && S->hasAssociatedStmt()) - PrintStmt(S->getInnermostCapturedStmt()->getCapturedStmt()); -} - -void StmtPrinterFiltering::VisitOMPParallelDirective( - OMPParallelDirective *Node) { - Indent() << "#pragma omp parallel"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPSimdDirective(OMPSimdDirective *Node) { - Indent() << "#pragma omp simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPForDirective(OMPForDirective *Node) { - Indent() << "#pragma omp for"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPForSimdDirective(OMPForSimdDirective *Node) { - Indent() << "#pragma omp for simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPSectionsDirective( - OMPSectionsDirective *Node) { - Indent() << "#pragma omp sections"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPSectionDirective(OMPSectionDirective *Node) { - Indent() << "#pragma omp section"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPSingleDirective(OMPSingleDirective *Node) { - Indent() << "#pragma omp single"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPMasterDirective(OMPMasterDirective *Node) { - Indent() << "#pragma omp master"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPCriticalDirective( - OMPCriticalDirective *Node) { - Indent() << "#pragma omp critical"; - if (Node->getDirectiveName().getName()) { - OS << " ("; - Node->getDirectiveName().printName(OS, Policy); - OS << ")"; - } - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPParallelForDirective( - OMPParallelForDirective *Node) { - Indent() << "#pragma omp parallel for"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPParallelForSimdDirective( - OMPParallelForSimdDirective *Node) { - Indent() << "#pragma omp parallel for simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPParallelMasterDirective( - OMPParallelMasterDirective *Node) { - Indent() << "#pragma omp parallel master"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPParallelSectionsDirective( - OMPParallelSectionsDirective *Node) { - Indent() << "#pragma omp parallel sections"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTaskDirective(OMPTaskDirective *Node) { - Indent() << "#pragma omp task"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTaskyieldDirective( - OMPTaskyieldDirective *Node) { - Indent() << "#pragma omp taskyield"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPBarrierDirective(OMPBarrierDirective *Node) { - Indent() << "#pragma omp barrier"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTaskwaitDirective( - OMPTaskwaitDirective *Node) { - Indent() << "#pragma omp taskwait"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTaskgroupDirective( - OMPTaskgroupDirective *Node) { - Indent() << "#pragma omp taskgroup"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPFlushDirective(OMPFlushDirective *Node) { - Indent() << "#pragma omp flush"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPOrderedDirective(OMPOrderedDirective *Node) { - Indent() << "#pragma omp ordered"; - PrintOMPExecutableDirective(Node, Node->hasClausesOfKind()); -} - -void StmtPrinterFiltering::VisitOMPAtomicDirective(OMPAtomicDirective *Node) { - Indent() << "#pragma omp atomic"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTargetDirective(OMPTargetDirective *Node) { - Indent() << "#pragma omp target"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTargetDataDirective( - OMPTargetDataDirective *Node) { - Indent() << "#pragma omp target data"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTargetEnterDataDirective( - OMPTargetEnterDataDirective *Node) { - Indent() << "#pragma omp target enter data"; - PrintOMPExecutableDirective(Node, /*ForceNoStmt=*/true); -} - -void StmtPrinterFiltering::VisitOMPTargetExitDataDirective( - OMPTargetExitDataDirective *Node) { - Indent() << "#pragma omp target exit data"; - PrintOMPExecutableDirective(Node, /*ForceNoStmt=*/true); -} - -void StmtPrinterFiltering::VisitOMPTargetParallelDirective( - OMPTargetParallelDirective *Node) { - Indent() << "#pragma omp target parallel"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTargetParallelForDirective( - OMPTargetParallelForDirective *Node) { - Indent() << "#pragma omp target parallel for"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTeamsDirective(OMPTeamsDirective *Node) { - Indent() << "#pragma omp teams"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPCancellationPointDirective( - OMPCancellationPointDirective *Node) { - Indent() << "#pragma omp cancellation point " - << getOpenMPDirectiveName(Node->getCancelRegion()); - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPCancelDirective(OMPCancelDirective *Node) { - Indent() << "#pragma omp cancel " - << getOpenMPDirectiveName(Node->getCancelRegion()); - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTaskLoopDirective( - OMPTaskLoopDirective *Node) { - Indent() << "#pragma omp taskloop"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTaskLoopSimdDirective( - OMPTaskLoopSimdDirective *Node) { - Indent() << "#pragma omp taskloop simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPMasterTaskLoopDirective( - OMPMasterTaskLoopDirective *Node) { - Indent() << "#pragma omp master taskloop"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPMasterTaskLoopSimdDirective( - OMPMasterTaskLoopSimdDirective *Node) { - Indent() << "#pragma omp master taskloop simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPParallelMasterTaskLoopDirective( - OMPParallelMasterTaskLoopDirective *Node) { - Indent() << "#pragma omp parallel master taskloop"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPParallelMasterTaskLoopSimdDirective( - OMPParallelMasterTaskLoopSimdDirective *Node) { - Indent() << "#pragma omp parallel master taskloop simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPDistributeDirective( - OMPDistributeDirective *Node) { - Indent() << "#pragma omp distribute"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTargetUpdateDirective( - OMPTargetUpdateDirective *Node) { - Indent() << "#pragma omp target update"; - PrintOMPExecutableDirective(Node, /*ForceNoStmt=*/true); -} - -void StmtPrinterFiltering::VisitOMPDistributeParallelForDirective( - OMPDistributeParallelForDirective *Node) { - Indent() << "#pragma omp distribute parallel for"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPDistributeParallelForSimdDirective( - OMPDistributeParallelForSimdDirective *Node) { - Indent() << "#pragma omp distribute parallel for simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPDistributeSimdDirective( - OMPDistributeSimdDirective *Node) { - Indent() << "#pragma omp distribute simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTargetParallelForSimdDirective( - OMPTargetParallelForSimdDirective *Node) { - Indent() << "#pragma omp target parallel for simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTargetSimdDirective( - OMPTargetSimdDirective *Node) { - Indent() << "#pragma omp target simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTeamsDistributeDirective( - OMPTeamsDistributeDirective *Node) { - Indent() << "#pragma omp teams distribute"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTeamsDistributeSimdDirective( - OMPTeamsDistributeSimdDirective *Node) { - Indent() << "#pragma omp teams distribute simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTeamsDistributeParallelForSimdDirective( - OMPTeamsDistributeParallelForSimdDirective *Node) { - Indent() << "#pragma omp teams distribute parallel for simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTeamsDistributeParallelForDirective( - OMPTeamsDistributeParallelForDirective *Node) { - Indent() << "#pragma omp teams distribute parallel for"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTargetTeamsDirective( - OMPTargetTeamsDirective *Node) { - Indent() << "#pragma omp target teams"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTargetTeamsDistributeDirective( - OMPTargetTeamsDistributeDirective *Node) { - Indent() << "#pragma omp target teams distribute"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTargetTeamsDistributeParallelForDirective( - OMPTargetTeamsDistributeParallelForDirective *Node) { - Indent() << "#pragma omp target teams distribute parallel for"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering:: - VisitOMPTargetTeamsDistributeParallelForSimdDirective( - OMPTargetTeamsDistributeParallelForSimdDirective *Node) { - Indent() << "#pragma omp target teams distribute parallel for simd"; - PrintOMPExecutableDirective(Node); -} - -void StmtPrinterFiltering::VisitOMPTargetTeamsDistributeSimdDirective( - OMPTargetTeamsDistributeSimdDirective *Node) { - Indent() << "#pragma omp target teams distribute simd"; - PrintOMPExecutableDirective(Node); -} - -//===----------------------------------------------------------------------===// -// Expr printing methods. -//===----------------------------------------------------------------------===// - -void StmtPrinterFiltering::VisitSourceLocExpr(SourceLocExpr *Node) { - OS << Node->getBuiltinStr() << "()"; -} - -void StmtPrinterFiltering::VisitConstantExpr(ConstantExpr *Node) { - PrintExpr(Node->getSubExpr()); -} - -void StmtPrinterFiltering::VisitDeclRefExpr(DeclRefExpr *Node) { - if (const auto *OCED = dyn_cast(Node->getDecl())) { - selective_printer::printPretty(OCED->getInit()->IgnoreImpCasts(), lines, OS, - nullptr, Policy, Context); - return; - } - if (NestedNameSpecifier *Qualifier = Node->getQualifier()) - Qualifier->print(OS, Policy); - if (Node->hasTemplateKeyword()) - OS << "template "; - OS << Node->getNameInfo(); - if (Node->hasExplicitTemplateArgs()) - printTemplateArgumentList(OS, Node->template_arguments(), Policy); -} - -void StmtPrinterFiltering::VisitDependentScopeDeclRefExpr( - DependentScopeDeclRefExpr *Node) { - if (NestedNameSpecifier *Qualifier = Node->getQualifier()) - Qualifier->print(OS, Policy); - if (Node->hasTemplateKeyword()) - OS << "template "; - OS << Node->getNameInfo(); - if (Node->hasExplicitTemplateArgs()) - printTemplateArgumentList(OS, Node->template_arguments(), Policy); -} - -void StmtPrinterFiltering::VisitUnresolvedLookupExpr( - UnresolvedLookupExpr *Node) { - if (Node->getQualifier()) - Node->getQualifier()->print(OS, Policy); - if (Node->hasTemplateKeyword()) - OS << "template "; - OS << Node->getNameInfo(); - if (Node->hasExplicitTemplateArgs()) - printTemplateArgumentList(OS, Node->template_arguments(), Policy); -} - -// ODR rename -static bool isImplicitSelfCopy(const Expr *E) { - if (const auto *DRE = dyn_cast(E)) { - if (const auto *PD = dyn_cast(DRE->getDecl())) { - if (PD->getParameterKind() == ImplicitParamDecl::ObjCSelf && - DRE->getBeginLoc().isInvalid()) - return true; - } - } - return false; -} - -void StmtPrinterFiltering::VisitObjCIvarRefExpr(ObjCIvarRefExpr *Node) { - if (Node->getBase()) { - if (!Policy.SuppressImplicitBase || - !isImplicitSelfCopy(Node->getBase()->IgnoreImpCasts())) { - PrintExpr(Node->getBase()); - OS << (Node->isArrow() ? "->" : "."); - } - } - OS << *Node->getDecl(); -} - -void StmtPrinterFiltering::VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *Node) { - if (Node->isSuperReceiver()) - OS << "super."; - else if (Node->isObjectReceiver() && Node->getBase()) { - PrintExpr(Node->getBase()); - OS << "."; - } else if (Node->isClassReceiver() && Node->getClassReceiver()) { - OS << Node->getClassReceiver()->getName() << "."; - } - - if (Node->isImplicitProperty()) { - if (const auto *Getter = Node->getImplicitPropertyGetter()) - Getter->getSelector().print(OS); - else - OS << SelectorTable::getPropertyNameFromSetterSelector( - Node->getImplicitPropertySetter()->getSelector()); - } else - OS << Node->getExplicitProperty()->getName(); -} - -void StmtPrinterFiltering::VisitObjCSubscriptRefExpr( - ObjCSubscriptRefExpr *Node) { - PrintExpr(Node->getBaseExpr()); - OS << "["; - PrintExpr(Node->getKeyExpr()); - OS << "]"; -} - -void StmtPrinterFiltering::VisitPredefinedExpr(PredefinedExpr *Node) { - OS << PredefinedExpr::getIdentKindName(Node->getIdentKind()); -} - -void StmtPrinterFiltering::VisitCharacterLiteral(CharacterLiteral *Node) { - unsigned value = Node->getValue(); - - switch (Node->getKind()) { - case CharacterLiteral::Ascii: - break; // no prefix. - case CharacterLiteral::Wide: - OS << 'L'; - break; - case CharacterLiteral::UTF8: - OS << "u8"; - break; - case CharacterLiteral::UTF16: - OS << 'u'; - break; - case CharacterLiteral::UTF32: - OS << 'U'; - break; - } - - switch (value) { - case '\\': - OS << "'\\\\'"; - break; - case '\'': - OS << "'\\''"; - break; - case '\a': - // TODO: K&R: the meaning of '\\a' is different in traditional C - OS << "'\\a'"; - break; - case '\b': - OS << "'\\b'"; - break; - // Nonstandard escape sequence. - /*case '\e': - OS << "'\\e'"; - break;*/ - case '\f': - OS << "'\\f'"; - break; - case '\n': - OS << "'\\n'"; - break; - case '\r': - OS << "'\\r'"; - break; - case '\t': - OS << "'\\t'"; - break; - case '\v': - OS << "'\\v'"; - break; - default: - // A character literal might be sign-extended, which - // would result in an invalid \U escape sequence. - // FIXME: multicharacter literals such as '\xFF\xFF\xFF\xFF' - // are not correctly handled. - if ((value & ~0xFFu) == ~0xFFu && - Node->getKind() == CharacterLiteral::Ascii) - value &= 0xFFu; - if (value < 256 && isPrintable((unsigned char)value)) - OS << "'" << (char)value << "'"; - else if (value < 256) - OS << "'\\x" << llvm::format("%02x", value) << "'"; - else if (value <= 0xFFFF) - OS << "'\\u" << llvm::format("%04x", value) << "'"; - else - OS << "'\\U" << llvm::format("%08x", value) << "'"; - } -} - -/// Prints the given expression using the original source text. Returns true on -/// success, false otherwise. -// Renamed to prevent ODR violation -static bool printExprAsWrittenCopy(raw_ostream &OS, Expr *E, - const ASTContext *Context) { - if (!Context) - return false; - bool Invalid = false; - StringRef Source = Lexer::getSourceText( - CharSourceRange::getTokenRange(E->getSourceRange()), - Context->getSourceManager(), Context->getLangOpts(), &Invalid); - if (!Invalid) { - OS << Source; - return true; - } - return false; -} - -void StmtPrinterFiltering::VisitIntegerLiteral(IntegerLiteral *Node) { - if (Policy.ConstantsAsWritten && printExprAsWrittenCopy(OS, Node, Context)) - return; - bool isSigned = Node->getType()->isSignedIntegerType(); - OS << Node->getValue().toString(10, isSigned); - - // Emit suffixes. Integer literals are always a builtin integer type. - switch (Node->getType()->castAs()->getKind()) { - default: - llvm_unreachable("Unexpected type for integer literal!"); - case BuiltinType::Char_S: - case BuiltinType::Char_U: - OS << "i8"; - break; - case BuiltinType::UChar: - OS << "Ui8"; - break; - case BuiltinType::Short: - OS << "i16"; - break; - case BuiltinType::UShort: - OS << "Ui16"; - break; - case BuiltinType::Int: - break; // no suffix. - case BuiltinType::UInt: - OS << 'U'; - break; - case BuiltinType::Long: - OS << 'L'; - break; - case BuiltinType::ULong: - OS << "UL"; - break; - case BuiltinType::LongLong: - OS << "LL"; - break; - case BuiltinType::ULongLong: - OS << "ULL"; - break; - } -} - -void StmtPrinterFiltering::VisitFixedPointLiteral(FixedPointLiteral *Node) { - if (Policy.ConstantsAsWritten && printExprAsWrittenCopy(OS, Node, Context)) - return; - OS << Node->getValueAsString(/*Radix=*/10); - - switch (Node->getType()->castAs()->getKind()) { - default: - llvm_unreachable("Unexpected type for fixed point literal!"); - case BuiltinType::ShortFract: - OS << "hr"; - break; - case BuiltinType::ShortAccum: - OS << "hk"; - break; - case BuiltinType::UShortFract: - OS << "uhr"; - break; - case BuiltinType::UShortAccum: - OS << "uhk"; - break; - case BuiltinType::Fract: - OS << "r"; - break; - case BuiltinType::Accum: - OS << "k"; - break; - case BuiltinType::UFract: - OS << "ur"; - break; - case BuiltinType::UAccum: - OS << "uk"; - break; - case BuiltinType::LongFract: - OS << "lr"; - break; - case BuiltinType::LongAccum: - OS << "lk"; - break; - case BuiltinType::ULongFract: - OS << "ulr"; - break; - case BuiltinType::ULongAccum: - OS << "ulk"; - break; - } -} - -// Renamed to prevent ODR violation -static void PrintFloatingLiteralCopy(raw_ostream &OS, FloatingLiteral *Node, - bool PrintSuffix) { - SmallString<16> Str; - Node->getValue().toString(Str); - OS << Str; - if (Str.find_first_not_of("-0123456789") == StringRef::npos) - OS << '.'; // Trailing dot in order to separate from ints. - - if (!PrintSuffix) - return; - - // Emit suffixes. Float literals are always a builtin float type. - switch (Node->getType()->castAs()->getKind()) { - default: - llvm_unreachable("Unexpected type for float literal!"); - case BuiltinType::Half: - break; // FIXME: suffix? - case BuiltinType::Double: - break; // no suffix. - case BuiltinType::Float16: - OS << "F16"; - break; - case BuiltinType::Float: - OS << 'F'; - break; - case BuiltinType::LongDouble: - OS << 'L'; - break; - case BuiltinType::Float128: - OS << 'Q'; - break; - } -} - -void StmtPrinterFiltering::VisitFloatingLiteral(FloatingLiteral *Node) { - if (Policy.ConstantsAsWritten && printExprAsWrittenCopy(OS, Node, Context)) - return; - PrintFloatingLiteralCopy(OS, Node, /*PrintSuffix=*/true); -} - -void StmtPrinterFiltering::VisitImaginaryLiteral(ImaginaryLiteral *Node) { - PrintExpr(Node->getSubExpr()); - OS << "i"; -} - -void StmtPrinterFiltering::VisitStringLiteral(StringLiteral *Str) { - Str->outputString(OS); -} - -void StmtPrinterFiltering::VisitParenExpr(ParenExpr *Node) { - OS << "("; - PrintExpr(Node->getSubExpr()); - OS << ")"; -} - -void StmtPrinterFiltering::VisitUnaryOperator(UnaryOperator *Node) { - if (!Node->isPostfix()) { - OS << UnaryOperator::getOpcodeStr(Node->getOpcode()); - - // Print a space if this is an "identifier operator" like __real, or if - // it might be concatenated incorrectly like '+'. - switch (Node->getOpcode()) { - default: - break; - case UO_Real: - case UO_Imag: - case UO_Extension: - OS << ' '; - break; - case UO_Plus: - case UO_Minus: - if (isa(Node->getSubExpr())) - OS << ' '; - break; - } - } - PrintExpr(Node->getSubExpr()); - - if (Node->isPostfix()) - OS << UnaryOperator::getOpcodeStr(Node->getOpcode()); -} - -void StmtPrinterFiltering::VisitOffsetOfExpr(OffsetOfExpr *Node) { - OS << "__builtin_offsetof("; - Node->getTypeSourceInfo()->getType().print(OS, Policy); - OS << ", "; - bool PrintedSomething = false; - for (unsigned i = 0, n = Node->getNumComponents(); i < n; ++i) { - OffsetOfNode ON = Node->getComponent(i); - if (ON.getKind() == OffsetOfNode::Array) { - // Array node - OS << "["; - PrintExpr(Node->getIndexExpr(ON.getArrayExprIndex())); - OS << "]"; - PrintedSomething = true; - continue; - } - - // Skip implicit base indirections. - if (ON.getKind() == OffsetOfNode::Base) - continue; - - // Field or identifier node. - IdentifierInfo *Id = ON.getFieldName(); - if (!Id) - continue; - - if (PrintedSomething) - OS << "."; - else - PrintedSomething = true; - OS << Id->getName(); - } - OS << ")"; -} - -void StmtPrinterFiltering::VisitUnaryExprOrTypeTraitExpr( - UnaryExprOrTypeTraitExpr *Node) { - switch (Node->getKind()) { - case UETT_SizeOf: - OS << "sizeof"; - break; - case UETT_AlignOf: - if (Policy.Alignof) - OS << "alignof"; - else if (Policy.UnderscoreAlignof) - OS << "_Alignof"; - else - OS << "__alignof"; - break; - case UETT_PreferredAlignOf: - OS << "__alignof"; - break; - case UETT_VecStep: - OS << "vec_step"; - break; - case UETT_OpenMPRequiredSimdAlign: - OS << "__builtin_omp_required_simd_align"; - break; - } - if (Node->isArgumentType()) { - OS << '('; - Node->getArgumentType().print(OS, Policy); - OS << ')'; - } else { - OS << " "; - PrintExpr(Node->getArgumentExpr()); - } -} - -void StmtPrinterFiltering::VisitGenericSelectionExpr( - GenericSelectionExpr *Node) { - OS << "_Generic("; - PrintExpr(Node->getControllingExpr()); - for (const GenericSelectionExpr::Association Assoc : Node->associations()) { - OS << ", "; - QualType T = Assoc.getType(); - if (T.isNull()) - OS << "default"; - else - T.print(OS, Policy); - OS << ": "; - PrintExpr(Assoc.getAssociationExpr()); - } - OS << ")"; -} - -void StmtPrinterFiltering::VisitArraySubscriptExpr(ArraySubscriptExpr *Node) { - PrintExpr(Node->getLHS()); - OS << "["; - PrintExpr(Node->getRHS()); - OS << "]"; -} - -void StmtPrinterFiltering::VisitOMPArraySectionExpr(OMPArraySectionExpr *Node) { - PrintExpr(Node->getBase()); - OS << "["; - if (Node->getLowerBound()) - PrintExpr(Node->getLowerBound()); - if (Node->getColonLoc().isValid()) { - OS << ":"; - if (Node->getLength()) - PrintExpr(Node->getLength()); - } - OS << "]"; -} - -void StmtPrinterFiltering::PrintCallArgs(CallExpr *Call) { - for (unsigned i = 0, e = Call->getNumArgs(); i != e; ++i) { - if (isa(Call->getArg(i))) { - // Don't print any defaulted arguments - break; - } - - if (i) - OS << ", "; - PrintExpr(Call->getArg(i)); - } -} - -void StmtPrinterFiltering::VisitCallExpr(CallExpr *Call) { - PrintExpr(Call->getCallee()); - OS << "("; - PrintCallArgs(Call); - OS << ")"; -} - -// Renamed to prevent ODR violation -static bool isImplicitThisCopy(const Expr *E) { - if (const auto *TE = dyn_cast(E)) - return TE->isImplicit(); - return false; -} - -void StmtPrinterFiltering::VisitMemberExpr(MemberExpr *Node) { - if (!Policy.SuppressImplicitBase || !isImplicitThisCopy(Node->getBase())) { - PrintExpr(Node->getBase()); - - auto *ParentMember = dyn_cast(Node->getBase()); - FieldDecl *ParentDecl = - ParentMember ? dyn_cast(ParentMember->getMemberDecl()) - : nullptr; - - if (!ParentDecl || !ParentDecl->isAnonymousStructOrUnion()) - OS << (Node->isArrow() ? "->" : "."); - } - - if (auto *FD = dyn_cast(Node->getMemberDecl())) - if (FD->isAnonymousStructOrUnion()) - return; - - if (NestedNameSpecifier *Qualifier = Node->getQualifier()) - Qualifier->print(OS, Policy); - if (Node->hasTemplateKeyword()) - OS << "template "; - OS << Node->getMemberNameInfo(); - if (Node->hasExplicitTemplateArgs()) - printTemplateArgumentList(OS, Node->template_arguments(), Policy); -} - -void StmtPrinterFiltering::VisitObjCIsaExpr(ObjCIsaExpr *Node) { - PrintExpr(Node->getBase()); - OS << (Node->isArrow() ? "->isa" : ".isa"); -} - -void StmtPrinterFiltering::VisitExtVectorElementExpr( - ExtVectorElementExpr *Node) { - PrintExpr(Node->getBase()); - OS << "."; - OS << Node->getAccessor().getName(); -} - -void StmtPrinterFiltering::VisitCStyleCastExpr(CStyleCastExpr *Node) { - OS << '('; - Node->getTypeAsWritten().print(OS, Policy); - OS << ')'; - PrintExpr(Node->getSubExpr()); -} - -void StmtPrinterFiltering::VisitCompoundLiteralExpr(CompoundLiteralExpr *Node) { - OS << '('; - Node->getType().print(OS, Policy); - OS << ')'; - PrintExpr(Node->getInitializer()); -} - -void StmtPrinterFiltering::VisitImplicitCastExpr(ImplicitCastExpr *Node) { - // No need to print anything, simply forward to the subexpression. - PrintExpr(Node->getSubExpr()); -} - -void StmtPrinterFiltering::VisitBinaryOperator(BinaryOperator *Node) { - PrintExpr(Node->getLHS()); - OS << " " << BinaryOperator::getOpcodeStr(Node->getOpcode()) << " "; - PrintExpr(Node->getRHS()); -} - -void StmtPrinterFiltering::VisitCompoundAssignOperator( - CompoundAssignOperator *Node) { - PrintExpr(Node->getLHS()); - OS << " " << BinaryOperator::getOpcodeStr(Node->getOpcode()) << " "; - PrintExpr(Node->getRHS()); -} - -void StmtPrinterFiltering::VisitConditionalOperator(ConditionalOperator *Node) { - PrintExpr(Node->getCond()); - OS << " ? "; - PrintExpr(Node->getLHS()); - OS << " : "; - PrintExpr(Node->getRHS()); -} - -// GNU extensions. - -void StmtPrinterFiltering::VisitBinaryConditionalOperator( - BinaryConditionalOperator *Node) { - PrintExpr(Node->getCommon()); - OS << " ?: "; - PrintExpr(Node->getFalseExpr()); -} - -void StmtPrinterFiltering::VisitAddrLabelExpr(AddrLabelExpr *Node) { - OS << "&&" << Node->getLabel()->getName(); -} - -void StmtPrinterFiltering::VisitStmtExpr(StmtExpr *E) { - OS << "("; - PrintRawCompoundStmt(E->getSubStmt()); - OS << ")"; -} - -void StmtPrinterFiltering::VisitChooseExpr(ChooseExpr *Node) { - OS << "__builtin_choose_expr("; - PrintExpr(Node->getCond()); - OS << ", "; - PrintExpr(Node->getLHS()); - OS << ", "; - PrintExpr(Node->getRHS()); - OS << ")"; -} - -void StmtPrinterFiltering::VisitGNUNullExpr(GNUNullExpr *) { OS << "__null"; } - -void StmtPrinterFiltering::VisitShuffleVectorExpr(ShuffleVectorExpr *Node) { - OS << "__builtin_shufflevector("; - for (unsigned i = 0, e = Node->getNumSubExprs(); i != e; ++i) { - if (i) - OS << ", "; - PrintExpr(Node->getExpr(i)); - } - OS << ")"; -} - -void StmtPrinterFiltering::VisitConvertVectorExpr(ConvertVectorExpr *Node) { - OS << "__builtin_convertvector("; - PrintExpr(Node->getSrcExpr()); - OS << ", "; - Node->getType().print(OS, Policy); - OS << ")"; -} - -void StmtPrinterFiltering::VisitInitListExpr(InitListExpr *Node) { - if (Node->getSyntacticForm()) { - Visit(Node->getSyntacticForm()); - return; - } - - OS << "{"; - for (unsigned i = 0, e = Node->getNumInits(); i != e; ++i) { - if (i) - OS << ", "; - if (Node->getInit(i)) - PrintExpr(Node->getInit(i)); - else - OS << "{}"; - } - OS << "}"; -} - -void StmtPrinterFiltering::VisitArrayInitLoopExpr(ArrayInitLoopExpr *Node) { - // There's no way to express this expression in any of our supported - // languages, so just emit something terse and (hopefully) clear. - OS << "{"; - PrintExpr(Node->getSubExpr()); - OS << "}"; -} - -void StmtPrinterFiltering::VisitArrayInitIndexExpr(ArrayInitIndexExpr *Node) { - OS << "*"; -} - -void StmtPrinterFiltering::VisitParenListExpr(ParenListExpr *Node) { - OS << "("; - for (unsigned i = 0, e = Node->getNumExprs(); i != e; ++i) { - if (i) - OS << ", "; - PrintExpr(Node->getExpr(i)); - } - OS << ")"; -} - -void StmtPrinterFiltering::VisitDesignatedInitExpr(DesignatedInitExpr *Node) { - bool NeedsEquals = true; - for (const DesignatedInitExpr::Designator &D : Node->designators()) { - if (D.isFieldDesignator()) { - if (D.getDotLoc().isInvalid()) { - if (IdentifierInfo *II = D.getFieldName()) { - OS << II->getName() << ":"; - NeedsEquals = false; - } - } else { - OS << "." << D.getFieldName()->getName(); - } - } else { - OS << "["; - if (D.isArrayDesignator()) { - PrintExpr(Node->getArrayIndex(D)); - } else { - PrintExpr(Node->getArrayRangeStart(D)); - OS << " ... "; - PrintExpr(Node->getArrayRangeEnd(D)); - } - OS << "]"; - } - } - - if (NeedsEquals) - OS << " = "; - else - OS << " "; - PrintExpr(Node->getInit()); -} - -void StmtPrinterFiltering::VisitDesignatedInitUpdateExpr( - DesignatedInitUpdateExpr *Node) { - OS << "{"; - OS << "/*base*/"; - PrintExpr(Node->getBase()); - OS << ", "; - - OS << "/*updater*/"; - PrintExpr(Node->getUpdater()); - OS << "}"; -} - -void StmtPrinterFiltering::VisitNoInitExpr(NoInitExpr *Node) { - OS << "/*no init*/"; -} - -void StmtPrinterFiltering::VisitImplicitValueInitExpr( - ImplicitValueInitExpr *Node) { - if (Node->getType()->getAsCXXRecordDecl()) { - OS << "/*implicit*/"; - Node->getType().print(OS, Policy); - OS << "()"; - } else { - OS << "/*implicit*/("; - Node->getType().print(OS, Policy); - OS << ')'; - if (Node->getType()->isRecordType()) - OS << "{}"; - else - OS << 0; - } -} - -void StmtPrinterFiltering::VisitVAArgExpr(VAArgExpr *Node) { - OS << "__builtin_va_arg("; - PrintExpr(Node->getSubExpr()); - OS << ", "; - Node->getType().print(OS, Policy); - OS << ")"; -} - -void StmtPrinterFiltering::VisitPseudoObjectExpr(PseudoObjectExpr *Node) { - PrintExpr(Node->getSyntacticForm()); -} - -void StmtPrinterFiltering::VisitAtomicExpr(AtomicExpr *Node) { - const char *Name = nullptr; - switch (Node->getOp()) { -#define BUILTIN(ID, TYPE, ATTRS) -#define ATOMIC_BUILTIN(ID, TYPE, ATTRS) \ - case AtomicExpr::AO##ID: \ - Name = #ID "("; \ - break; -#include "clang/Basic/Builtins.def" - } - OS << Name; - - // AtomicExpr stores its subexpressions in a permuted order. - PrintExpr(Node->getPtr()); - if (Node->getOp() != AtomicExpr::AO__c11_atomic_load && - Node->getOp() != AtomicExpr::AO__atomic_load_n && - Node->getOp() != AtomicExpr::AO__opencl_atomic_load) { - OS << ", "; - PrintExpr(Node->getVal1()); - } - if (Node->getOp() == AtomicExpr::AO__atomic_exchange || Node->isCmpXChg()) { - OS << ", "; - PrintExpr(Node->getVal2()); - } - if (Node->getOp() == AtomicExpr::AO__atomic_compare_exchange || - Node->getOp() == AtomicExpr::AO__atomic_compare_exchange_n) { - OS << ", "; - PrintExpr(Node->getWeak()); - } - if (Node->getOp() != AtomicExpr::AO__c11_atomic_init && - Node->getOp() != AtomicExpr::AO__opencl_atomic_init) { - OS << ", "; - PrintExpr(Node->getOrder()); - } - if (Node->isCmpXChg()) { - OS << ", "; - PrintExpr(Node->getOrderFail()); - } - OS << ")"; -} - -// C++ -void StmtPrinterFiltering::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *Node) { - OverloadedOperatorKind Kind = Node->getOperator(); - if (Kind == OO_PlusPlus || Kind == OO_MinusMinus) { - if (Node->getNumArgs() == 1) { - OS << getOperatorSpelling(Kind) << ' '; - PrintExpr(Node->getArg(0)); - } else { - PrintExpr(Node->getArg(0)); - OS << ' ' << getOperatorSpelling(Kind); - } - } else if (Kind == OO_Arrow) { - PrintExpr(Node->getArg(0)); - } else if (Kind == OO_Call) { - PrintExpr(Node->getArg(0)); - OS << '('; - for (unsigned ArgIdx = 1; ArgIdx < Node->getNumArgs(); ++ArgIdx) { - if (ArgIdx > 1) - OS << ", "; - if (!isa(Node->getArg(ArgIdx))) - PrintExpr(Node->getArg(ArgIdx)); - } - OS << ')'; - } else if (Kind == OO_Subscript) { - PrintExpr(Node->getArg(0)); - OS << '['; - PrintExpr(Node->getArg(1)); - OS << ']'; - } else if (Node->getNumArgs() == 1) { - OS << getOperatorSpelling(Kind) << ' '; - PrintExpr(Node->getArg(0)); - } else if (Node->getNumArgs() == 2) { - PrintExpr(Node->getArg(0)); - OS << ' ' << getOperatorSpelling(Kind) << ' '; - PrintExpr(Node->getArg(1)); - } else { - llvm_unreachable("unknown overloaded operator"); - } -} - -void StmtPrinterFiltering::VisitCXXMemberCallExpr(CXXMemberCallExpr *Node) { - // If we have a conversion operator call only print the argument. - CXXMethodDecl *MD = Node->getMethodDecl(); - if (MD && isa(MD)) { - PrintExpr(Node->getImplicitObjectArgument()); - return; - } - VisitCallExpr(cast(Node)); -} - -void StmtPrinterFiltering::VisitCUDAKernelCallExpr(CUDAKernelCallExpr *Node) { - PrintExpr(Node->getCallee()); - OS << "<<<"; - PrintCallArgs(Node->getConfig()); - OS << ">>>("; - PrintCallArgs(Node); - OS << ")"; -} - -void StmtPrinterFiltering::VisitCXXRewrittenBinaryOperator( - CXXRewrittenBinaryOperator *Node) { - CXXRewrittenBinaryOperator::DecomposedForm Decomposed = - Node->getDecomposedForm(); - PrintExpr(const_cast(Decomposed.LHS)); - OS << ' ' << BinaryOperator::getOpcodeStr(Decomposed.Opcode) << ' '; - PrintExpr(const_cast(Decomposed.RHS)); -} - -void StmtPrinterFiltering::VisitCXXNamedCastExpr(CXXNamedCastExpr *Node) { - OS << Node->getCastName() << '<'; - Node->getTypeAsWritten().print(OS, Policy); - OS << ">("; - PrintExpr(Node->getSubExpr()); - OS << ")"; -} - -void StmtPrinterFiltering::VisitCXXStaticCastExpr(CXXStaticCastExpr *Node) { - VisitCXXNamedCastExpr(Node); -} - -void StmtPrinterFiltering::VisitCXXDynamicCastExpr(CXXDynamicCastExpr *Node) { - VisitCXXNamedCastExpr(Node); -} - -void StmtPrinterFiltering::VisitCXXReinterpretCastExpr( - CXXReinterpretCastExpr *Node) { - VisitCXXNamedCastExpr(Node); -} - -void StmtPrinterFiltering::VisitCXXConstCastExpr(CXXConstCastExpr *Node) { - VisitCXXNamedCastExpr(Node); -} - -void StmtPrinterFiltering::VisitBuiltinBitCastExpr(BuiltinBitCastExpr *Node) { - OS << "__builtin_bit_cast("; - Node->getTypeInfoAsWritten()->getType().print(OS, Policy); - OS << ", "; - PrintExpr(Node->getSubExpr()); - OS << ")"; -} - -void StmtPrinterFiltering::VisitCXXTypeidExpr(CXXTypeidExpr *Node) { - OS << "typeid("; - if (Node->isTypeOperand()) { - Node->getTypeOperandSourceInfo()->getType().print(OS, Policy); - } else { - PrintExpr(Node->getExprOperand()); - } - OS << ")"; -} - -void StmtPrinterFiltering::VisitCXXUuidofExpr(CXXUuidofExpr *Node) { - OS << "__uuidof("; - if (Node->isTypeOperand()) { - Node->getTypeOperandSourceInfo()->getType().print(OS, Policy); - } else { - PrintExpr(Node->getExprOperand()); - } - OS << ")"; -} - -void StmtPrinterFiltering::VisitMSPropertyRefExpr(MSPropertyRefExpr *Node) { - PrintExpr(Node->getBaseExpr()); - if (Node->isArrow()) - OS << "->"; - else - OS << "."; - if (NestedNameSpecifier *Qualifier = - Node->getQualifierLoc().getNestedNameSpecifier()) - Qualifier->print(OS, Policy); - OS << Node->getPropertyDecl()->getDeclName(); -} - -void StmtPrinterFiltering::VisitMSPropertySubscriptExpr( - MSPropertySubscriptExpr *Node) { - PrintExpr(Node->getBase()); - OS << "["; - PrintExpr(Node->getIdx()); - OS << "]"; -} - -void StmtPrinterFiltering::VisitUserDefinedLiteral(UserDefinedLiteral *Node) { - switch (Node->getLiteralOperatorKind()) { - case UserDefinedLiteral::LOK_Raw: - OS << cast(Node->getArg(0)->IgnoreImpCasts())->getString(); - break; - case UserDefinedLiteral::LOK_Template: { - const auto *DRE = cast(Node->getCallee()->IgnoreImpCasts()); - const TemplateArgumentList *Args = - cast(DRE->getDecl())->getTemplateSpecializationArgs(); - assert(Args); - - if (Args->size() != 1) { - OS << "operator\"\"" << Node->getUDSuffix()->getName(); - printTemplateArgumentList(OS, Args->asArray(), Policy); - OS << "()"; - return; - } - - const TemplateArgument &Pack = Args->get(0); - for (const auto &P : Pack.pack_elements()) { - char C = (char)P.getAsIntegral().getZExtValue(); - OS << C; - } - break; - } - case UserDefinedLiteral::LOK_Integer: { - // Print integer literal without suffix. - const auto *Int = cast(Node->getCookedLiteral()); - OS << Int->getValue().toString(10, /*isSigned*/ false); - break; - } - case UserDefinedLiteral::LOK_Floating: { - // Print floating literal without suffix. - auto *Float = cast(Node->getCookedLiteral()); - PrintFloatingLiteralCopy(OS, Float, /*PrintSuffix=*/false); - break; - } - case UserDefinedLiteral::LOK_String: - case UserDefinedLiteral::LOK_Character: - PrintExpr(Node->getCookedLiteral()); - break; - } - OS << Node->getUDSuffix()->getName(); -} - -void StmtPrinterFiltering::VisitCXXBoolLiteralExpr(CXXBoolLiteralExpr *Node) { - OS << (Node->getValue() ? "true" : "false"); -} - -void StmtPrinterFiltering::VisitCXXNullPtrLiteralExpr( - CXXNullPtrLiteralExpr *Node) { - OS << "nullptr"; -} - -void StmtPrinterFiltering::VisitCXXThisExpr(CXXThisExpr *Node) { OS << "this"; } - -void StmtPrinterFiltering::VisitCXXThrowExpr(CXXThrowExpr *Node) { - if (!Node->getSubExpr()) - OS << "throw"; - else { - OS << "throw "; - PrintExpr(Node->getSubExpr()); - } -} - -void StmtPrinterFiltering::VisitCXXDefaultArgExpr(CXXDefaultArgExpr *Node) { - // Nothing to print: we picked up the default argument. -} - -void StmtPrinterFiltering::VisitCXXDefaultInitExpr(CXXDefaultInitExpr *Node) { - // Nothing to print: we picked up the default initializer. -} - -void StmtPrinterFiltering::VisitCXXFunctionalCastExpr( - CXXFunctionalCastExpr *Node) { - Node->getType().print(OS, Policy); - // If there are no parens, this is list-initialization, and the braces are - // part of the syntax of the inner construct. - if (Node->getLParenLoc().isValid()) - OS << "("; - PrintExpr(Node->getSubExpr()); - if (Node->getLParenLoc().isValid()) - OS << ")"; -} - -void StmtPrinterFiltering::VisitCXXBindTemporaryExpr( - CXXBindTemporaryExpr *Node) { - PrintExpr(Node->getSubExpr()); -} - -void StmtPrinterFiltering::VisitCXXTemporaryObjectExpr( - CXXTemporaryObjectExpr *Node) { - Node->getType().print(OS, Policy); - if (Node->isStdInitListInitialization()) - /* Nothing to do; braces are part of creating the std::initializer_list. */; - else if (Node->isListInitialization()) - OS << "{"; - else - OS << "("; - for (CXXTemporaryObjectExpr::arg_iterator Arg = Node->arg_begin(), - ArgEnd = Node->arg_end(); - Arg != ArgEnd; ++Arg) { - if ((*Arg)->isDefaultArgument()) - break; - if (Arg != Node->arg_begin()) - OS << ", "; - PrintExpr(*Arg); - } - if (Node->isStdInitListInitialization()) - /* See above. */; - else if (Node->isListInitialization()) - OS << "}"; - else - OS << ")"; -} - -void StmtPrinterFiltering::VisitLambdaExpr(LambdaExpr *Node) { - OS << '['; - bool NeedComma = false; - switch (Node->getCaptureDefault()) { - case LCD_None: - break; - - case LCD_ByCopy: - OS << '='; - NeedComma = true; - break; - - case LCD_ByRef: - OS << '&'; - NeedComma = true; - break; - } - for (LambdaExpr::capture_iterator C = Node->explicit_capture_begin(), - CEnd = Node->explicit_capture_end(); - C != CEnd; ++C) { - if (C->capturesVLAType()) - continue; - - if (NeedComma) - OS << ", "; - NeedComma = true; - - switch (C->getCaptureKind()) { - case LCK_This: - OS << "this"; - break; - - case LCK_StarThis: - OS << "*this"; - break; - - case LCK_ByRef: - if (Node->getCaptureDefault() != LCD_ByRef || Node->isInitCapture(C)) - OS << '&'; - OS << C->getCapturedVar()->getName(); - break; - - case LCK_ByCopy: - OS << C->getCapturedVar()->getName(); - break; - - case LCK_VLAType: - llvm_unreachable("VLA type in explicit captures."); - } - - if (C->isPackExpansion()) - OS << "..."; - - if (Node->isInitCapture(C)) - PrintExpr(C->getCapturedVar()->getInit()); - } - OS << ']'; - - if (!Node->getExplicitTemplateParameters().empty()) { - Node->getTemplateParameterList()->print( - OS, Node->getLambdaClass()->getASTContext(), - /*OmitTemplateKW*/ true); - } - - if (Node->hasExplicitParameters()) { - OS << '('; - CXXMethodDecl *Method = Node->getCallOperator(); - NeedComma = false; - for (const auto *P : Method->parameters()) { - if (NeedComma) { - OS << ", "; - } else { - NeedComma = true; - } - std::string ParamStr = P->getNameAsString(); - P->getOriginalType().print(OS, Policy, ParamStr); - } - if (Method->isVariadic()) { - if (NeedComma) - OS << ", "; - OS << "..."; - } - OS << ')'; - - if (Node->isMutable()) - OS << " mutable"; - - auto *Proto = Method->getType()->castAs(); - Proto->printExceptionSpecification(OS, Policy); - - // FIXME: Attributes - - // Print the trailing return type if it was specified in the source. - if (Node->hasExplicitResultType()) { - OS << " -> "; - Proto->getReturnType().print(OS, Policy); - } - } - - // Print the body. - OS << ' '; - if (Policy.TerseOutput) - OS << "{}"; - else - PrintRawCompoundStmt(Node->getBody()); -} - -void StmtPrinterFiltering::VisitCXXScalarValueInitExpr( - CXXScalarValueInitExpr *Node) { - if (TypeSourceInfo *TSInfo = Node->getTypeSourceInfo()) - TSInfo->getType().print(OS, Policy); - else - Node->getType().print(OS, Policy); - OS << "()"; -} - -void StmtPrinterFiltering::VisitCXXNewExpr(CXXNewExpr *E) { - if (E->isGlobalNew()) - OS << "::"; - OS << "new "; - unsigned NumPlace = E->getNumPlacementArgs(); - if (NumPlace > 0 && !isa(E->getPlacementArg(0))) { - OS << "("; - PrintExpr(E->getPlacementArg(0)); - for (unsigned i = 1; i < NumPlace; ++i) { - if (isa(E->getPlacementArg(i))) - break; - OS << ", "; - PrintExpr(E->getPlacementArg(i)); - } - OS << ") "; - } - if (E->isParenTypeId()) - OS << "("; - std::string TypeS; - if (Optional Size = E->getArraySize()) { - llvm::raw_string_ostream s(TypeS); - s << '['; - if (*Size) - selective_printer::printPretty(*Size, lines, s, Helper, Policy, Context); - s << ']'; - } - E->getAllocatedType().print(OS, Policy, TypeS); - if (E->isParenTypeId()) - OS << ")"; - - CXXNewExpr::InitializationStyle InitStyle = E->getInitializationStyle(); - if (InitStyle) { - if (InitStyle == CXXNewExpr::CallInit) - OS << "("; - PrintExpr(E->getInitializer()); - if (InitStyle == CXXNewExpr::CallInit) - OS << ")"; - } -} - -void StmtPrinterFiltering::VisitCXXDeleteExpr(CXXDeleteExpr *E) { - if (E->isGlobalDelete()) - OS << "::"; - OS << "delete "; - if (E->isArrayForm()) - OS << "[] "; - PrintExpr(E->getArgument()); -} - -void StmtPrinterFiltering::VisitCXXPseudoDestructorExpr( - CXXPseudoDestructorExpr *E) { - PrintExpr(E->getBase()); - if (E->isArrow()) - OS << "->"; - else - OS << '.'; - if (E->getQualifier()) - E->getQualifier()->print(OS, Policy); - OS << "~"; - - if (IdentifierInfo *II = E->getDestroyedTypeIdentifier()) - OS << II->getName(); - else - E->getDestroyedType().print(OS, Policy); -} - -void StmtPrinterFiltering::VisitCXXConstructExpr(CXXConstructExpr *E) { - if (E->isListInitialization() && !E->isStdInitListInitialization()) - OS << "{"; - - for (unsigned i = 0, e = E->getNumArgs(); i != e; ++i) { - if (isa(E->getArg(i))) { - // Don't print any defaulted arguments - break; - } - - if (i) - OS << ", "; - PrintExpr(E->getArg(i)); - } - - if (E->isListInitialization() && !E->isStdInitListInitialization()) - OS << "}"; -} - -void StmtPrinterFiltering::VisitCXXInheritedCtorInitExpr( - CXXInheritedCtorInitExpr *E) { - // Parens are printed by the surrounding context. - OS << ""; -} - -void StmtPrinterFiltering::VisitCXXStdInitializerListExpr( - CXXStdInitializerListExpr *E) { - PrintExpr(E->getSubExpr()); -} - -void StmtPrinterFiltering::VisitExprWithCleanups(ExprWithCleanups *E) { - // Just forward to the subexpression. - PrintExpr(E->getSubExpr()); -} - -void StmtPrinterFiltering::VisitCXXUnresolvedConstructExpr( - CXXUnresolvedConstructExpr *Node) { - Node->getTypeAsWritten().print(OS, Policy); - OS << "("; - for (CXXUnresolvedConstructExpr::arg_iterator Arg = Node->arg_begin(), - ArgEnd = Node->arg_end(); - Arg != ArgEnd; ++Arg) { - if (Arg != Node->arg_begin()) - OS << ", "; - PrintExpr(*Arg); - } - OS << ")"; -} - -void StmtPrinterFiltering::VisitCXXDependentScopeMemberExpr( - CXXDependentScopeMemberExpr *Node) { - if (!Node->isImplicitAccess()) { - PrintExpr(Node->getBase()); - OS << (Node->isArrow() ? "->" : "."); - } - if (NestedNameSpecifier *Qualifier = Node->getQualifier()) - Qualifier->print(OS, Policy); - if (Node->hasTemplateKeyword()) - OS << "template "; - OS << Node->getMemberNameInfo(); - if (Node->hasExplicitTemplateArgs()) - printTemplateArgumentList(OS, Node->template_arguments(), Policy); -} - -void StmtPrinterFiltering::VisitUnresolvedMemberExpr( - UnresolvedMemberExpr *Node) { - if (!Node->isImplicitAccess()) { - PrintExpr(Node->getBase()); - OS << (Node->isArrow() ? "->" : "."); - } - if (NestedNameSpecifier *Qualifier = Node->getQualifier()) - Qualifier->print(OS, Policy); - if (Node->hasTemplateKeyword()) - OS << "template "; - OS << Node->getMemberNameInfo(); - if (Node->hasExplicitTemplateArgs()) - printTemplateArgumentList(OS, Node->template_arguments(), Policy); -} - -// Renamed to prevent ODR violation -static const char *getTypeTraitNameCopy(TypeTrait TT) { - switch (TT) { -#define TYPE_TRAIT_1(Spelling, Name, Key) \ - case clang::UTT_##Name: \ - return #Spelling; -#define TYPE_TRAIT_2(Spelling, Name, Key) \ - case clang::BTT_##Name: \ - return #Spelling; -#define TYPE_TRAIT_N(Spelling, Name, Key) \ - case clang::TT_##Name: \ - return #Spelling; -#include "clang/Basic/TokenKinds.def" - } - llvm_unreachable("Type trait not covered by switch"); -} - -// Renamed to prevent ODR violation -static const char *getTypeTraitNameCopy(ArrayTypeTrait ATT) { - switch (ATT) { - case ATT_ArrayRank: - return "__array_rank"; - case ATT_ArrayExtent: - return "__array_extent"; - } - llvm_unreachable("Array type trait not covered by switch"); -} - -// Renamed to prevent ODR violation -static const char *getExpressionTraitNameCopy(ExpressionTrait ET) { - switch (ET) { - case ET_IsLValueExpr: - return "__is_lvalue_expr"; - case ET_IsRValueExpr: - return "__is_rvalue_expr"; - } - llvm_unreachable("Expression type trait not covered by switch"); -} - -void StmtPrinterFiltering::VisitTypeTraitExpr(TypeTraitExpr *E) { - OS << getTypeTraitNameCopy(E->getTrait()) << "("; - for (unsigned I = 0, N = E->getNumArgs(); I != N; ++I) { - if (I > 0) - OS << ", "; - E->getArg(I)->getType().print(OS, Policy); - } - OS << ")"; -} - -void StmtPrinterFiltering::VisitArrayTypeTraitExpr(ArrayTypeTraitExpr *E) { - OS << getTypeTraitNameCopy(E->getTrait()) << '('; - E->getQueriedType().print(OS, Policy); - OS << ')'; -} - -void StmtPrinterFiltering::VisitExpressionTraitExpr(ExpressionTraitExpr *E) { - OS << getExpressionTraitNameCopy(E->getTrait()) << '('; - PrintExpr(E->getQueriedExpression()); - OS << ')'; -} - -void StmtPrinterFiltering::VisitCXXNoexceptExpr(CXXNoexceptExpr *E) { - OS << "noexcept("; - PrintExpr(E->getOperand()); - OS << ")"; -} - -void StmtPrinterFiltering::VisitPackExpansionExpr(PackExpansionExpr *E) { - PrintExpr(E->getPattern()); - OS << "..."; -} - -void StmtPrinterFiltering::VisitSizeOfPackExpr(SizeOfPackExpr *E) { - OS << "sizeof...(" << *E->getPack() << ")"; -} - -void StmtPrinterFiltering::VisitSubstNonTypeTemplateParmPackExpr( - SubstNonTypeTemplateParmPackExpr *Node) { - OS << *Node->getParameterPack(); -} - -void StmtPrinterFiltering::VisitSubstNonTypeTemplateParmExpr( - SubstNonTypeTemplateParmExpr *Node) { - Visit(Node->getReplacement()); -} - -void StmtPrinterFiltering::VisitFunctionParmPackExpr(FunctionParmPackExpr *E) { - OS << *E->getParameterPack(); -} - -void StmtPrinterFiltering::VisitMaterializeTemporaryExpr( - MaterializeTemporaryExpr *Node) { - PrintExpr(Node->getSubExpr()); -} - -void StmtPrinterFiltering::VisitCXXFoldExpr(CXXFoldExpr *E) { - OS << "("; - if (E->getLHS()) { - PrintExpr(E->getLHS()); - OS << " " << BinaryOperator::getOpcodeStr(E->getOperator()) << " "; - } - OS << "..."; - if (E->getRHS()) { - OS << " " << BinaryOperator::getOpcodeStr(E->getOperator()) << " "; - PrintExpr(E->getRHS()); - } - OS << ")"; -} - -void StmtPrinterFiltering::VisitConceptSpecializationExpr( - ConceptSpecializationExpr *E) { - NestedNameSpecifierLoc NNS = E->getNestedNameSpecifierLoc(); - if (NNS) - NNS.getNestedNameSpecifier()->print(OS, Policy); - if (E->getTemplateKWLoc().isValid()) - OS << "template "; - OS << E->getFoundDecl()->getName(); - printTemplateArgumentList(OS, E->getTemplateArgsAsWritten()->arguments(), - Policy); -} - -void StmtPrinterFiltering::VisitRequiresExpr(RequiresExpr *E) { - OS << "requires "; - auto LocalParameters = E->getLocalParameters(); - if (!LocalParameters.empty()) { - OS << "("; - for (ParmVarDecl *LocalParam : LocalParameters) { - PrintRawDecl(LocalParam); - if (LocalParam != LocalParameters.back()) - OS << ", "; - } - - OS << ") "; - } - OS << "{ "; - auto Requirements = E->getRequirements(); - for (concepts::Requirement *Req : Requirements) { - if (auto *TypeReq = dyn_cast(Req)) { - if (TypeReq->isSubstitutionFailure()) - OS << "<>"; - else - TypeReq->getType()->getType().print(OS, Policy); - } else if (auto *ExprReq = dyn_cast(Req)) { - if (ExprReq->isCompound()) - OS << "{ "; - if (ExprReq->isExprSubstitutionFailure()) - OS << "<>"; - else - PrintExpr(ExprReq->getExpr()); - if (ExprReq->isCompound()) { - OS << " }"; - if (ExprReq->getNoexceptLoc().isValid()) - OS << " noexcept"; - const auto &RetReq = ExprReq->getReturnTypeRequirement(); - if (!RetReq.isEmpty()) { - OS << " -> "; - if (RetReq.isSubstitutionFailure()) - OS << "<>"; - else if (RetReq.isTypeConstraint()) - RetReq.getTypeConstraint()->print(OS, Policy); - } - } - } else { - auto *NestedReq = cast(Req); - OS << "requires "; - if (NestedReq->isSubstitutionFailure()) - OS << "<>"; - else - PrintExpr(NestedReq->getConstraintExpr()); - } - OS << "; "; - } - OS << "}"; -} - -// C++ Coroutines TS - -void StmtPrinterFiltering::VisitCoroutineBodyStmt(CoroutineBodyStmt *S) { - Visit(S->getBody()); -} - -void StmtPrinterFiltering::VisitCoreturnStmt(CoreturnStmt *S) { - OS << "co_return"; - if (S->getOperand()) { - OS << " "; - Visit(S->getOperand()); - } - OS << ";"; -} - -void StmtPrinterFiltering::VisitCoawaitExpr(CoawaitExpr *S) { - OS << "co_await "; - PrintExpr(S->getOperand()); -} - -void StmtPrinterFiltering::VisitDependentCoawaitExpr(DependentCoawaitExpr *S) { - OS << "co_await "; - PrintExpr(S->getOperand()); -} - -void StmtPrinterFiltering::VisitCoyieldExpr(CoyieldExpr *S) { - OS << "co_yield "; - PrintExpr(S->getOperand()); -} - -// Obj-C - -void StmtPrinterFiltering::VisitObjCStringLiteral(ObjCStringLiteral *Node) { - OS << "@"; - VisitStringLiteral(Node->getString()); -} - -void StmtPrinterFiltering::VisitObjCBoxedExpr(ObjCBoxedExpr *E) { - OS << "@"; - Visit(E->getSubExpr()); -} - -void StmtPrinterFiltering::VisitObjCArrayLiteral(ObjCArrayLiteral *E) { - OS << "@[ "; - ObjCArrayLiteral::child_range Ch = E->children(); - for (auto I = Ch.begin(), E = Ch.end(); I != E; ++I) { - if (I != Ch.begin()) - OS << ", "; - Visit(*I); - } - OS << " ]"; -} - -void StmtPrinterFiltering::VisitObjCDictionaryLiteral( - ObjCDictionaryLiteral *E) { - OS << "@{ "; - for (unsigned I = 0, N = E->getNumElements(); I != N; ++I) { - if (I > 0) - OS << ", "; - - ObjCDictionaryElement Element = E->getKeyValueElement(I); - Visit(Element.Key); - OS << " : "; - Visit(Element.Value); - if (Element.isPackExpansion()) - OS << "..."; - } - OS << " }"; -} - -void StmtPrinterFiltering::VisitObjCEncodeExpr(ObjCEncodeExpr *Node) { - OS << "@encode("; - Node->getEncodedType().print(OS, Policy); - OS << ')'; -} - -void StmtPrinterFiltering::VisitObjCSelectorExpr(ObjCSelectorExpr *Node) { - OS << "@selector("; - Node->getSelector().print(OS); - OS << ')'; -} - -void StmtPrinterFiltering::VisitObjCProtocolExpr(ObjCProtocolExpr *Node) { - OS << "@protocol(" << *Node->getProtocol() << ')'; -} - -void StmtPrinterFiltering::VisitObjCMessageExpr(ObjCMessageExpr *Mess) { - OS << "["; - switch (Mess->getReceiverKind()) { - case ObjCMessageExpr::Instance: - PrintExpr(Mess->getInstanceReceiver()); - break; - - case ObjCMessageExpr::Class: - Mess->getClassReceiver().print(OS, Policy); - break; - - case ObjCMessageExpr::SuperInstance: - case ObjCMessageExpr::SuperClass: - OS << "Super"; - break; - } - - OS << ' '; - Selector selector = Mess->getSelector(); - if (selector.isUnarySelector()) { - OS << selector.getNameForSlot(0); - } else { - for (unsigned i = 0, e = Mess->getNumArgs(); i != e; ++i) { - if (i < selector.getNumArgs()) { - if (i > 0) - OS << ' '; - if (selector.getIdentifierInfoForSlot(i)) - OS << selector.getIdentifierInfoForSlot(i)->getName() << ':'; - else - OS << ":"; - } else - OS << ", "; // Handle variadic methods. - - PrintExpr(Mess->getArg(i)); - } - } - OS << "]"; -} - -void StmtPrinterFiltering::VisitObjCBoolLiteralExpr(ObjCBoolLiteralExpr *Node) { - OS << (Node->getValue() ? "__objc_yes" : "__objc_no"); -} - -void StmtPrinterFiltering::VisitObjCIndirectCopyRestoreExpr( - ObjCIndirectCopyRestoreExpr *E) { - PrintExpr(E->getSubExpr()); -} - -void StmtPrinterFiltering::VisitObjCBridgedCastExpr(ObjCBridgedCastExpr *E) { - OS << '(' << E->getBridgeKindName(); - E->getType().print(OS, Policy); - OS << ')'; - PrintExpr(E->getSubExpr()); -} - -void StmtPrinterFiltering::VisitBlockExpr(BlockExpr *Node) { - BlockDecl *BD = Node->getBlockDecl(); - OS << "^"; - - const FunctionType *AFT = Node->getFunctionType(); - - if (isa(AFT)) { - OS << "()"; - } else if (!BD->param_empty() || cast(AFT)->isVariadic()) { - OS << '('; - for (BlockDecl::param_iterator AI = BD->param_begin(), E = BD->param_end(); - AI != E; ++AI) { - if (AI != BD->param_begin()) - OS << ", "; - std::string ParamStr = (*AI)->getNameAsString(); - (*AI)->getType().print(OS, Policy, ParamStr); - } - - const auto *FT = cast(AFT); - if (FT->isVariadic()) { - if (!BD->param_empty()) - OS << ", "; - OS << "..."; - } - OS << ')'; - } - OS << "{ }"; -} - -void StmtPrinterFiltering::VisitOpaqueValueExpr(OpaqueValueExpr *Node) { - PrintExpr(Node->getSourceExpr()); -} - -void StmtPrinterFiltering::VisitTypoExpr(TypoExpr *Node) { - // TODO: Print something reasonable for a TypoExpr, if necessary. - llvm_unreachable("Cannot print TypoExpr nodes"); -} - -void StmtPrinterFiltering::VisitAsTypeExpr(AsTypeExpr *Node) { - OS << "__builtin_astype("; - PrintExpr(Node->getSrcExpr()); - OS << ", "; - Node->getType().print(OS, Policy); - OS << ")"; -} - -//===----------------------------------------------------------------------===// -// Stmt method implementations -//===----------------------------------------------------------------------===// - -namespace selective_printer { -void printPretty(const Stmt *stmt, const std::set &lines, - raw_ostream &Out, PrinterHelper *Helper, - const PrintingPolicy &Policy, const clang::ASTContext *Context, - unsigned Indentation, StringRef NL) { - StmtPrinterFiltering P(lines, Out, Helper, Policy, Indentation, NL, Context); - P.Visit(const_cast(stmt)); -} - -} // namespace selective_printer diff --git a/tools/module-extractor/SelectiveStmtPrinter.h b/tools/module-extractor/SelectiveStmtPrinter.h deleted file mode 100644 index dbfd2ebe21..0000000000 --- a/tools/module-extractor/SelectiveStmtPrinter.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef PHASAR_SELECTIVESTMTPRINTER_H -#define PHASAR_SELECTIVESTMTPRINTER_H - -#include -#include -#include -#include - -#include - -namespace selective_printer { -void printPretty(const clang::Stmt *stmt, const std::set &lines, - llvm::raw_ostream &Out, clang::PrinterHelper *Helper, - const clang::PrintingPolicy &Policy, - const clang::ASTContext *Context, unsigned Indentation = 0, - llvm::StringRef NL = "\n"); - -} // namespace selective_printer - -#endif // PHASAR_SELECTIVESTMTPRINTER_H diff --git a/tools/module-extractor/back_mapper.cpp b/tools/module-extractor/back_mapper.cpp index d5decd168c..fc3ac982b6 100644 --- a/tools/module-extractor/back_mapper.cpp +++ b/tools/module-extractor/back_mapper.cpp @@ -1,5 +1,4 @@ #include "back_mapper.h" -#include "SelectiveDeclPrinter.h" #include "printer.h" #include From 80366f26e1b73ea82d76bb7ea9382250664217bc Mon Sep 17 00:00:00 2001 From: jr Date: Mon, 14 Feb 2022 12:14:03 +0100 Subject: [PATCH 40/42] Slice all slices into one file --- tools/module-extractor/printer.cpp | 6 +++--- tools/module-extractor/printer.h | 4 ++-- tools/module-extractor/slicer.cpp | 32 ++++++++++++++++++++++++++---- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp index 73efbe5336..ae616698d6 100644 --- a/tools/module-extractor/printer.cpp +++ b/tools/module-extractor/printer.cpp @@ -776,7 +776,7 @@ void extractHeaderSlices(const std::string &FileIn, const std::string &FileOut, Output << "#endif //" << HeaderName << '\n'; } -void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, +void extractSlicesDefine(const std::string &FileIn, std::ofstream &Output, const std::vector &Slices) { assert(std::is_sorted(Slices.begin(), Slices.end(), [](const FileSlice &a, const FileSlice &b) { @@ -786,9 +786,9 @@ void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, if (!Input.is_open()) { throw std::runtime_error("Could not open input file " + FileIn); } - std::ofstream Output(FileOut); + if (!Output.is_open()) { - throw std::runtime_error("Could not open output file " + FileOut); + throw std::runtime_error("Could not write to output file "); } std::vector Lines; diff --git a/tools/module-extractor/printer.h b/tools/module-extractor/printer.h index e0b0f68d07..1c6967d9e1 100644 --- a/tools/module-extractor/printer.h +++ b/tools/module-extractor/printer.h @@ -115,10 +115,10 @@ void extractSlices(const std::string &FileIn, const std::string &FileOut, /** * * @param FileIn - * @param FileOut + * @param Output * @param Slices Slices to put into define code */ -void extractSlicesDefine(const std::string &FileIn, const std::string &FileOut, +void extractSlicesDefine(const std::string &FileIn, std::ofstream &Output, const std::vector &Slices); void extractRewrittenFunction(const std::vector &Lines, diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index dfa02b96f8..12ba7b6f71 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -108,6 +108,10 @@ void copy_files( map> &header_slices, const string &outPath, const unordered_set &blacklist, const string &compile_commands_path) { + + /** + * Slicing based on lines + */ for (const auto &file : file_lines) { std::ifstream in(file.first); std::ofstream out( @@ -124,15 +128,21 @@ void copy_files( } out.close(); } + + /** + * Slicing based on source information + */ for (const auto &file : file_slices) { std::string outname = "out" + file.first.substr(file.first.find_last_of("/"), string::npos) + ".slice"; - printer::extractSlicesDefine(file.first, outname, file.second); - // llvm::errs() << outname; - // std::ofstream out(outname, std::ios_base::out | std::ios_base::trunc); - // out << file.second << endl; + std::ofstream Output(outname, std::ios_base::trunc | std::ios_base::out); + printer::extractSlicesDefine(file.first, Output, file.second); } + + /** + * Slicing of headers based on source information + */ for (const auto &file : header_slices) { const std::string filename = file.first.substr(file.first.find_last_of("/") + 1, string::npos); @@ -143,6 +153,20 @@ void copy_files( cleanup_includes(file.first, outname, compile_commands_path); } + /** + * Slicing into one file based on source information + */ + { + const std::string outname = "out/" + outPath + ".c.slice"; + std::ofstream Output(outname, std::ios_base::ate | std::ios_base::out); + for (const auto &file : file_slices) { + printer::extractSlicesDefine(file.first, Output, file.second); + } + } + + /** + * Slicing into one file based on lines + */ if (true) { std::ofstream out("out/" + outPath + ".c"); for (const auto &file : file_lines) { From 44a1ac08ad9f2d9a227e6659dbe4345a2d04e8d6 Mon Sep 17 00:00:00 2001 From: jr Date: Tue, 15 Feb 2022 15:06:23 +0100 Subject: [PATCH 41/42] Cleanup unused code and add comments --- tools/module-extractor/back_mapper.cpp | 153 +-------------- tools/module-extractor/back_mapper.h | 6 +- tools/module-extractor/include_handling.cpp | 29 ++- tools/module-extractor/include_handling.h | 15 ++ tools/module-extractor/printer.cpp | 207 +++----------------- tools/module-extractor/printer.h | 112 +++++++---- tools/module-extractor/slicer.cpp | 17 +- tools/module-extractor/source_utils.cpp | 20 +- tools/module-extractor/source_utils.h | 115 +++-------- 9 files changed, 188 insertions(+), 486 deletions(-) diff --git a/tools/module-extractor/back_mapper.cpp b/tools/module-extractor/back_mapper.cpp index fc3ac982b6..a03be6cb94 100644 --- a/tools/module-extractor/back_mapper.cpp +++ b/tools/module-extractor/back_mapper.cpp @@ -4,147 +4,16 @@ #include #include #include -#include #include #include #include +#include #include #include -#include - -/** - * Notes JR: - * General Idea: Walk over the AST and store the source locations of interesting - * constructs Hereby some special handling is needed, for example for compound - * statements Another problem is that the clang AST is not consistent in the - * handling of semicolons At the same time, extract the debug lines (and maybe - * later columns for finer slicing) from the the LLVM IR Merge the extracted - * source locations, e.g. nodes that are completely embedded in others Match the - * source locations from the IR with the ones from the AST -> Extract if match. - * For extracting we can use precise column + line information from the AST. - * - * Questions: - * What needs special handling? Semicolons, Compound Statements, what else? - * Data structure for storing and merging the source code ranges? (Overlapping - * intervals problem) - * Presumed, expansion, or spelling loc? - */ namespace { -/* -class RewriteSourceVisitor - : public clang::RecursiveASTVisitor { -public: - RewriteSourceVisitor(clang::ASTContext &context, - std::set *target_lines, - std::shared_ptr> resultingLines) - : context(context), target_lines(target_lines), - resulting_lines(std::move(resultingLines)), candidate_lines(), - sm(context.getSourceManager()) {} - - bool VisitTranslationUnitDecl(clang::TranslationUnitDecl *D) { - selective_printer::print(D, *target_lines, llvm::errs()); - return false; - } - -// [[maybe_unused]] bool VisitFunctionDecl(clang::FunctionDecl *F) { -// // if (sm.isInMainFile(F->getBeginLoc())) { -// // F->getBeginLoc().dump(sm); -// // F->getEndLoc().dump(sm); -// // if (F->hasBody()) { -// // { -// // std::string buffer; -// // llvm::raw_string_ostream RSO(buffer); -// // F->print(RSO, context.getPrintingPolicy()); -// // llvm::errs() << RSO.str() << "\n"; -// // } -// // } -// // } -// F->getBeginLoc().dump(sm); -// F->getEndLoc().dump(sm); -// F->getLocation().dump(sm); -// // F->getloc -// selective_printer::print(F, *target_lines, llvm::errs()); -// return true; -// } -// -// [[maybe_unused]] bool VisitStmt(clang::Stmt *S) { -// auto es = -// context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); -// auto es4 = -// context.getSourceManager().getExpansionLineNumber(S->getEndLoc()); -// if (es == es4 && target_lines->find(es) != target_lines->end()) { -// for (auto &l : candidate_lines) { -// resulting_lines->insert(l); -// } -// } -// if (context.getSourceManager().isInMainFile(S->getBeginLoc())) { -// // S->dumpPretty(context); -// } -// if (llvm::isa(S)) { -// // S->dump(); -// } -// return true; -// } -// -// [[maybe_unused]] bool VisitCompoundStmt(clang::CompoundStmt *C) { -// if (context.getSourceManager().isInMainFile(C->getBeginLoc())) { -// // C->dumpColor(); -// // C->getLBracLoc().dump(context.getSourceManager()); -// // C->getRBracLoc().dump(context.getSourceManager()); -// } -// -// return true; -// } -// -// [[maybe_unused]] bool VisitReturnStmt(clang::ReturnStmt *R) { -// if (sm.isInMainFile(R->getBeginLoc())) { -// // R->getBeginLoc().dump(sm); -// // R->getEndLoc().dump(sm); -// // R->dumpPretty(context); -// // clang::Lexer::getLocForEndOfToken(R->getEndLoc(), 0, sm, -// // context.getLangOpts()) -// // .dump(sm); -// // auto PLoc = sm.getPresumedLoc(R->getBeginLoc()); -// // llvm::errs() << PLoc.getFilename() << ':' << PLoc.getLine() << -':' -// // << PLoc.getColumn() << "\n"; -// // sm.getExpansionLoc(R->getBeginLoc()).dump(sm); -// // sm.getSpellingLoc(R->getBeginLoc()).dump(sm); -// } -// return true; -// } -// -// [[maybe_unused]] bool VisitDefaultStmt(clang::DefaultStmt *S) { -// auto line = -// context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); -// candidate_lines.insert(line); -// return true; -// } -// -// [[maybe_unused]] bool VisitCaseStmt(clang::CaseStmt *S) { -// auto line = -// context.getSourceManager().getExpansionLineNumber(S->getBeginLoc()); -// candidate_lines.insert(line); -// return true; -// } -// -// [[maybe_unused]] bool VisitBreakStmt(clang::BreakStmt *S) { -// candidate_lines.clear(); -// return true; -// } - -private: - clang::ASTContext &context; - std::set *target_lines; - std::shared_ptr> resulting_lines; - std::set candidate_lines; - clang::SourceManager &sm; -}; -*/ - class RewriteSourceConsumer : public clang::ASTConsumer { public: RewriteSourceConsumer(const std::set *target_lines, @@ -155,29 +24,17 @@ class RewriteSourceConsumer : public clang::ASTConsumer { // Traversing the translation unit decl via a RecursiveASTVisitor // will visit all nodes in the AST. // llvm::dbgs << Context.getTranslationUnitDecl(); - { - // llvm::raw_string_ostream out(output); - // selective_printer::print(Context.getTranslationUnitDecl(), - // *target_lines, - // out); - output = printer::DeclPrinter::GetFileSlices( - Context.getTranslationUnitDecl(), *target_lines, Context); - } - // RewriteSourceVisitor Visitor(Context, target_lines, resulting_lines); - // Visitor.TraverseDecl(Context.getTranslationUnitDecl()); + output = printer::DeclPrinterFiltering::GetFileSlices( + Context.getTranslationUnitDecl(), *target_lines, Context); } private: - // A RecursiveASTVisitor implementation. - const std::set *target_lines; std::pair, std::vector> &output; }; -class RewriteSourceAction -// : public clang::ASTFrontendAction -{ +class RewriteSourceAction { public: RewriteSourceAction(const std::set *target_lines, std::pair, @@ -208,6 +65,8 @@ add_block(std::string file, const std::set *target_lines) { std::vector Sources; Sources.push_back(file); clang::tooling::ClangTool Tool(*db, Sources); + // Add an include that clang tooling seems to have trouble finding in some + // cases const auto Adjuster = clang::tooling::getInsertArgumentAdjuster( "-isystem/usr/local/llvm-10/lib/clang/10.0.1/include", clang::tooling::ArgumentInsertPosition::BEGIN); diff --git a/tools/module-extractor/back_mapper.h b/tools/module-extractor/back_mapper.h index 9ac30f28d8..68a2061d0a 100644 --- a/tools/module-extractor/back_mapper.h +++ b/tools/module-extractor/back_mapper.h @@ -6,12 +6,8 @@ #include #include -namespace clang { -class SourceLocation; -}; - /** - * + * Get the slices for the file 'file' and the given target_lines * @param file * @param target_lines * @return The first vector are the file slices, the second the slices for the diff --git a/tools/module-extractor/include_handling.cpp b/tools/module-extractor/include_handling.cpp index 56230331bf..5ac40c3a3d 100644 --- a/tools/module-extractor/include_handling.cpp +++ b/tools/module-extractor/include_handling.cpp @@ -8,7 +8,6 @@ std::vector get_includes_to_extract(const std::string &filename, const std::unordered_set &blacklist) { - // inspired by // https://stackoverflow.com/questions/26492513/write-c-regular-expression-to-match-a-include-preprocessing-directive // This does not match weird includes containing macros and may get some @@ -43,10 +42,7 @@ get_includes_to_extract(const std::string &filename, if (blacklist.find(trim(match[1].str())) == blacklist.end()) { includes.push_back(trim(match.str())); } - // std::cerr << match.str() << "\n"; - // std::cerr << match[1].str() << "\n"; } - return includes; } @@ -86,12 +82,16 @@ void cleanup_includes(const std::string &original_file, * * 3: Run iwyu * - * 4: Run fix_include (for some reason iwyu does not include absolute paths - * grrr, so this is actually a multi step process. 4.a: copy the file from 2 - * to the tmp dir. (we cant move here as it could be between filessystems) 4.b - * change into the tmp dir 4.c run fix_include 4.d copy the modified source - * file to the extracted header location) + * 4: Run fix_include (for some reason iwyu does not include absolute paths, + * so this is actually a multi step process.) + * + * + * 4.a: copy the file from 2 to the tmp dir. (we cant move here as it could be + * between filessystems) * + * 4.b: run fix_include + * + * 4.c copy the modified source file to the extracted header location * * 5: Cleanup temporary files * @@ -132,21 +132,18 @@ void cleanup_includes(const std::string &original_file, boost::filesystem::copy_file( original_path, tmpname, boost::filesystem::copy_options::overwrite_existing); - // const auto previous_cp = boost::filesystem::current_path(); - // 4 b - // boost::filesystem::current_path(tmpdir); - // 4 c (this should not fail, but we have no way to check it anyway) + + // 4 b (this should not fail, but we have no way to check it anyway) const std::string fix_command = "fix_includes.py -p " + tmpdir.native() + " --nosafe_headers " + tmpname.native() + " < " + iwyu_output_file; - // std::cerr << fix_command << std::endl; std::system(fix_command.c_str()); - // boost::filesystem::current_path(previous_cp); - // 5 (this should not fail) + // 4.c (this should not fail) boost::filesystem::copy_file( tmpname, header_path, boost::filesystem::copy_options::overwrite_existing); + // 5 (this should not fail) boost::filesystem::remove(tmpname); // 5 (this should not fail) boost::filesystem::remove(iwyu_output_file); diff --git a/tools/module-extractor/include_handling.h b/tools/module-extractor/include_handling.h index 3b4638acf0..f7db3dbae6 100644 --- a/tools/module-extractor/include_handling.h +++ b/tools/module-extractor/include_handling.h @@ -6,12 +6,27 @@ #include #include +/** + * Returns all includes found in a file, which are not blacklisted + * Based on a regex search + * @param filename The file to search for includes + * @param blacklist set containing includes not to extract + * @return Found includes + */ std::vector get_includes_to_extract(const std::string &filename, const std::unordered_set &blacklist); +/** + * + * @return Returns the path to a file suitable for temporary files + */ boost::filesystem::path get_tmp_filename(); +/** + * + * @return rue if iwyu_tool.py and fix_includes.py can be successfully called + */ bool is_iwyu_available(); void cleanup_includes(const std::string &original_file, diff --git a/tools/module-extractor/printer.cpp b/tools/module-extractor/printer.cpp index ae616698d6..137f7daca8 100644 --- a/tools/module-extractor/printer.cpp +++ b/tools/module-extractor/printer.cpp @@ -15,13 +15,18 @@ #include // Config +// Should types get sliced #define EXTRACT_TYPES (true) +// Should functions decls get sliced #define EXTRACT_FUNCTION_DECLS (true) +// How many slices should be removed from a function, before a copy of the +// function gets generated that only contains the code to keep #define MIN_FILTERED_FOR_EXTRA_FUNCTION (3) +// Should types get sliced into headers #define EXTRACT_TYPES_INTO_HEADER (true) namespace printer { -void DeclPrinter::VisitFunctionDecl(const clang::FunctionDecl *decl) { +void DeclPrinterFiltering::VisitFunctionDecl(const clang::FunctionDecl *decl) { if (!decl->doesThisDeclarationHaveABody()) { if (isInSourceFile(decl, SM)) { const auto Semicolon = @@ -107,41 +112,39 @@ void DeclPrinter::VisitFunctionDecl(const clang::FunctionDecl *decl) { } } } -void DeclPrinter::VisitDecl(const clang::Decl *decl) { - if (!decl->isImplicit()) { - // TODO - // llvm_unreachable("Hit unsupported decl"); - } +void DeclPrinterFiltering::VisitDecl(const clang::Decl *decl) { + // decl->dump(); } -void DeclPrinter::VisitTranslationUnitDecl( +void DeclPrinterFiltering::VisitTranslationUnitDecl( const clang::TranslationUnitDecl *decl) { - // decl->dump(); for (const auto &D : decl->decls()) { Visit(D); } } -DeclPrinter::DeclPrinter(const std::set &Target, - const clang::ASTContext &CTX, - const clang::SourceManager &SM, - const clang::LangOptions &LO) +DeclPrinterFiltering::DeclPrinterFiltering(const std::set &Target, + const clang::ASTContext &CTX, + const clang::SourceManager &SM, + const clang::LangOptions &LO) : TargetLines(Target), CTX(CTX), SM(SM), LO(LO) {} -std::pair, std::vector> DeclPrinter::GetSlices( - const clang::Decl *Decl, const std::set &TargetLines, - const clang::ASTContext &CTX, const clang::SourceManager &SM, - const clang::LangOptions &LO) { - DeclPrinter Visitor(TargetLines, CTX, SM, LO); +std::pair, std::vector> +DeclPrinterFiltering::GetSlices(const clang::Decl *Decl, + const std::set &TargetLines, + const clang::ASTContext &CTX, + const clang::SourceManager &SM, + const clang::LangOptions &LO) { + DeclPrinterFiltering Visitor(TargetLines, CTX, SM, LO); Visitor.Visit(Decl); return {Visitor.Slices, Visitor.HeaderSlices}; } std::pair, std::vector> -DeclPrinter::GetFileSlices(const clang::Decl *Decl, - const std::set &TargetLines, - const clang::ASTContext &CTX) { +DeclPrinterFiltering::GetFileSlices(const clang::Decl *Decl, + const std::set &TargetLines, + const clang::ASTContext &CTX) { const auto &SM = CTX.getSourceManager(); - const auto Slices = - DeclPrinter::GetSlices(Decl, TargetLines, CTX, SM, CTX.getLangOpts()); + const auto Slices = DeclPrinterFiltering::GetSlices(Decl, TargetLines, CTX, + SM, CTX.getLangOpts()); std::pair, std::vector> Result; Result.first.reserve(Slices.first.size()); @@ -154,12 +157,8 @@ DeclPrinter::GetFileSlices(const clang::Decl *Decl, } return Result; } -void DeclPrinter::VisitVarDecl(const clang::VarDecl *Decl) { - // Decl->dump(); - // Decl->getSourceRange().getEnd().dump(SM); - // Decl->getEndLoc().dump(SM); +void DeclPrinterFiltering::VisitVarDecl(const clang::VarDecl *Decl) { if (isInSourceFile(Decl, SM)) { - // Decl->dump(); const auto Semicolon = utils::getSemicolonAfterStmtEndLoc( Decl->getSourceRange().getEnd(), SM, LO); Slice S; @@ -174,12 +173,11 @@ void DeclPrinter::VisitVarDecl(const clang::VarDecl *Decl) { if (!isAnyInWhitelist(Decl, TargetLines, SM)) { S.NeedsDefine = true; - // Decl->dump(); } Slices.push_back(S); } } -void DeclPrinter::VisitTypeDecl(const clang::TypeDecl *Decl) { +void DeclPrinterFiltering::VisitTypeDecl(const clang::TypeDecl *Decl) { if (isInSourceFile(Decl, SM)) { const auto Semicolon = utils::getSemicolonAfterStmtEndLoc(Decl->getEndLoc(), SM, LO); @@ -236,42 +234,13 @@ bool StmtPrinterFiltering::VisitCompoundStmt(const clang::CompoundStmt *Stmt) { return true; } StmtPrinterFiltering::StmtPrinterFiltering( - const std::set &TargetLines, const clang::ASTContext &CTX, - const clang::SourceManager &SM, const clang::LangOptions &LO) - : TargetLines(TargetLines), CTX(CTX), SM(SM), LO(LO) {} + const std::set &TargetLines, const clang::SourceManager &SM, + const clang::LangOptions &LO) + : TargetLines(TargetLines), SM(SM), LO(LO) {} bool StmtPrinterFiltering::VisitWhileStmt(const clang::WhileStmt *Stmt) { if (isAnyInWhitelist(Stmt, TargetLines, SM)) { - - // Stmt->getBeginLoc().dump(SM); - // // // Stmt->getBeginLoc()).dump(SM); - // // SM.getExpansionLoc(Stmt->getBeginLoc()).dump(SM); - // // Stmt->getEndLoc().dump(SM); - // // //Stmt->getEndLoc()).dump(SM); - // // SM.getExpansionLoc(Stmt->getEndLoc()).dump(SM); - // Stmt->getBody()->getBeginLoc().dump(SM); - // SM.getExpansionLoc(Stmt->getBody()->getBeginLoc()).dump(SM); - // utils::findPreviousTokenStart(SM.getFileLoc(Stmt->getBody()->getBeginLoc()), - // SM, LO) - // .dump(SM); - // - // utils::getEndOfToken( - // utils::findPreviousTokenStart( - // SM.getFileLoc(Stmt->getBody()->getBeginLoc()), SM, LO), - // SM, LO) - // .dump(SM); - // SM.getSpellingLoc( - // utils::getEndOfToken(utils::findPreviousTokenStart( - // Stmt->getBody()->getBeginLoc(), SM, - // LO), - // SM, LO)) - // .dump(SM); - Slices.emplace_back(Slice::generateFromStartAndNext( Stmt->getBeginLoc(), Stmt->getBody()->getBeginLoc(), SM, LO)); - // SM.getSpellingLoc(Stmt->getBeginLoc()), - // utils::getEndOfToken(utils::findPreviousTokenStart( - // Stmt->getBody()->getBeginLoc(), SM, LO), - // SM, LO)); PrintStmt(Stmt->getBody(), true); return true; } @@ -334,26 +303,11 @@ bool StmtPrinterFiltering::VisitSwitchStmt(const clang::SwitchStmt *Stmt) { return false; } -// bool StmtPrinterFiltering::VisitReturnStmt(const clang::ReturnStmt *Stmt) { -// if (isAnyInWhitelist(Stmt, TargetLines, SM)) { -// Slices.emplace_back( -// SM.getExpansionRange(Stmt->getBeginLoc()).getBegin(), -// utils::getEndOfToken(SM.getExpansionRange(Stmt->getEndLoc()).getEnd(), -// SM, LO)); -// const auto Semicolon = -// utils::getSemicolonAfterStmtEndLoc(Stmt->getEndLoc(), SM, LO); -// assert(Semicolon.isValid()); -// Slices.emplace_back(SM.getExpansionRange(Stmt->getEndLoc()).getBegin(), -// utils::getEndOfToken(Semicolon, SM, LO)); -// return true; -// } -// return false; -// } std::vector StmtPrinterFiltering::GetSlices( const clang::Stmt *Stmt, const std::set &TargetLines, const clang::ASTContext &CTX, const clang::SourceManager &SM, const clang::LangOptions &LO, unsigned *filtered) { - StmtPrinterFiltering Visitor(TargetLines, CTX, SM, LO); + StmtPrinterFiltering Visitor(TargetLines, SM, LO); Visitor.Visit(Stmt); if (filtered != nullptr) { *filtered = Visitor.Filtered; @@ -459,13 +413,6 @@ bool StmtPrinterFiltering::VisitDefaultStmt(const clang::DefaultStmt *Stmt) { return false; } -// bool StmtPrinterFiltering::VisitSwitchCase(const clang::SwitchCase *Stmt) { -// if(isAnyInWhitelist(Stmt, TargetLines, SM)) { -// //Slices.emplace_back(Slice::generateFromStartAndNext(Stmt->getBeginLoc(), -// Stmt.g)) return true; -// } -// return false; -// } printer::Slice::Slice(clang::SourceLocation Begin, clang::SourceLocation End, bool NeedsDefine) @@ -492,10 +439,6 @@ Slice::Slice(clang::SourceLocation Begin, clang::SourceLocation End, assert(End.isValid()); } Slice::Slice() {} -FileOffset::FileOffset(unsigned int Line, unsigned int Column) - : Line(Line), Column(Column) { - assert(Line > 0 && Column > 0); -} std::ostream &operator<<(std::ostream &os, const FileOffset &offset) { os << "[" << offset.Line << ":" << offset.Column << "]"; @@ -575,10 +518,7 @@ void mergeSlices(std::vector &Slices) { void mergeAndSplitSlices(std::vector &Slices) { assert(!Slices.empty()); - std::vector Keep; std::vector Tmp; - std::copy_if(Slices.begin(), Slices.end(), std::back_inserter(Keep), - [](const auto &Slice) { return !Slice.NeedsDefine; }); std::copy_if(Slices.begin(), Slices.end(), std::back_inserter(Tmp), [](const auto &Slice) { return Slice.NeedsDefine; }); Slices.clear(); @@ -587,92 +527,9 @@ void mergeAndSplitSlices(std::vector &Slices) { if (!Slices.empty()) { mergeSlices(Slices); } - if (!Keep.empty()) { - mergeSlices(Keep); - } } -void extractSlices(const std::string &FileIn, const std::string &FileOut, - const std::vector &Slices) { - assert(std::is_sorted(Slices.begin(), Slices.end(), - [](const FileSlice &a, const FileSlice &b) { - return a.Begin < b.Begin; - })); - std::ifstream Input(FileIn); - if (!Input.is_open()) { - throw std::runtime_error("Could not open input file " + FileIn); - } - std::ofstream Output(FileOut); - if (!Output.is_open()) { - throw std::runtime_error("Could not open output file " + FileOut); - } - - std::string Line; - unsigned int LineNumber = 0; - auto PreviousSlice = Slices.end(); - auto CurrentSlice = Slices.begin(); - while (std::getline(Input, Line)) { - while (true) { - // Case: We are in text befor the slice - if (CurrentSlice == Slices.end() || - CurrentSlice->Begin.GetSliceLine() > LineNumber) { - if (CurrentSlice != Slices.end() && - CurrentSlice->Begin.GetSliceLine() == (LineNumber + 1)) { - Output << '\n'; - } - break; - } - // Handle the following cases: - // We are in a completely sliced line, excluding the end or begin: Copy - // the complete line - // We are in the first line: Pad from the previous slice with spaces - // and add the text - // We are in the last line: Add text, check if - // others slices are needed in the same line - if (CurrentSlice->Begin.GetSliceLine() < LineNumber && - CurrentSlice->End.GetSliceLine() > LineNumber) { - Output << Line << '\n'; - break; - } - if (CurrentSlice->Begin.GetSliceLine() == LineNumber) { - if (PreviousSlice != Slices.end() && - PreviousSlice->End.GetSliceLine() == LineNumber) { - // We need to pad only after the last slice - for (unsigned int I = 0; I < CurrentSlice->Begin.GetSliceColumn() - - PreviousSlice->End.GetSliceColumn(); - I++) { - Output << ' '; - } - } else { - for (unsigned int I = 0; I < CurrentSlice->Begin.GetSliceColumn(); - I++) { - Output << ' '; - } - } - // Copy our slice - if (CurrentSlice->End.GetSliceLine() == LineNumber) { - Output << Line.substr(CurrentSlice->Begin.GetSliceColumn(), - CurrentSlice->End.GetSliceColumn() - - CurrentSlice->Begin.GetSliceColumn()); - } else { - Output << Line.substr(CurrentSlice->Begin.GetSliceColumn()) << '\n'; - break; - } - } else { - // Handle end case - Output << Line.substr(0, CurrentSlice->End.GetSliceColumn()); - } - PreviousSlice = CurrentSlice; - CurrentSlice++; - if (CurrentSlice == Slices.end()) { - Output << '\n'; - break; - } - } - LineNumber++; - } -} bool notOnlyWhitespace(const std::string &Str) { return std::any_of(Str.begin(), Str.end(), [](unsigned char c) { return !isspace(c); }); @@ -709,7 +566,7 @@ void extractHeaderSlices(const std::string &FileIn, const std::string &FileOut, auto CurrentSlice = Slices.begin(); while (std::getline(Input, Line)) { while (true) { - // Case: We are in text befor the slice + // Case: We are in text before the slice if (CurrentSlice == Slices.end() || CurrentSlice->Begin.GetSliceLine() > LineNumber) { break; diff --git a/tools/module-extractor/printer.h b/tools/module-extractor/printer.h index 1c6967d9e1..6160bba21d 100644 --- a/tools/module-extractor/printer.h +++ b/tools/module-extractor/printer.h @@ -1,7 +1,3 @@ -// -// Created by jr on 12.11.21. -// - #ifndef PHASAR_PRINTER_H #define PHASAR_PRINTER_H @@ -19,6 +15,15 @@ namespace printer { +/** + * Checks if any of the lines contained in Lines is between the Begin and End + * Location of Decl (inclusive) + * @tparam T + * @param Decl + * @param Lines + * @param SM + * @return + */ template bool isAnyInWhitelist(const T *Decl, const std::set &Lines, const clang::SourceManager &SM) { @@ -28,15 +33,22 @@ bool isAnyInWhitelist(const T *Decl, const std::set &Lines, return Lines.lower_bound(Begin) != Lines.upper_bound(End); } +/** + * Check if Decl is in the main source file + * @tparam T + * @param Decl + * @param SM + * @return + */ template bool isInSourceFile(const T *Decl, const clang::SourceManager &SM) { - if (SM.getFileID(SM.getSpellingLoc(Decl->getBeginLoc())) != - SM.getMainFileID()) { - return false; - } - return true; + return SM.getFileID(SM.getSpellingLoc(Decl->getBeginLoc())) == + SM.getMainFileID(); } +/** + * A generated slice, based on clang SourceLocations + */ struct Slice { Slice(); Slice(clang::SourceLocation Begin, clang::SourceLocation End, @@ -53,11 +65,14 @@ struct Slice { false; // True if the Slice should be commented out. If it is a header // slice, true means that it is a function definition where we need // to cut away the body. - std::vector Keep; + std::vector Keep; // Slices that we need to extract a function if we + // rewrite it completely }; +/** + * An offset into a file (line and column based) + */ struct FileOffset { - FileOffset(unsigned int Line, unsigned int Column); FileOffset(const clang::PresumedLoc &Loc); friend std::ostream &operator<<(std::ostream &os, const FileOffset &offset); @@ -86,6 +101,7 @@ struct FileOffset { }; /** + * A File based slice * End is just one character after the target slice */ struct FileSlice { @@ -100,19 +116,19 @@ struct FileSlice { std::vector Keep; }; +/** + * Merge adjacent slices together (inplace) + * @param Slices + */ void mergeSlices(std::vector &Slices); -void mergeAndSplitSlices(std::vector &Slices); /** - * Currently unused - * @param FileIn - * @param FileOut - * @param Slices Slices to slices + * Merge adjacent slices together if they need a define (inplace) + * @param Slices */ -void extractSlices(const std::string &FileIn, const std::string &FileOut, - const std::vector &Slices); +void mergeAndSplitSlices(std::vector &Slices); -/** +/** Extract code from FileIn bases on Slices and write it to Output * * @param FileIn * @param Output @@ -121,10 +137,35 @@ void extractSlices(const std::string &FileIn, const std::string &FileOut, void extractSlicesDefine(const std::string &FileIn, std::ofstream &Output, const std::vector &Slices); +/** Extract a function that got rewritten by the slicer + * + * @param Lines Lines of the file to slice + * @param Slices Slices of the rewritten function + * @param Output + */ void extractRewrittenFunction(const std::vector &Lines, const std::vector &Slices, std::ofstream &Output); +/** + * Create a header for a a sliced file + * @param FileIn The original source file + * @param FileOut The header file to write to + * @param Slices Slices containing information about types that may need to be + * copied + * @param FileName Name of the original source file (used for creating include + * guards) + * @param includes Includes that need to be copied + */ +void extractHeaderSlices(const std::string &FileIn, const std::string &FileOut, + const std::vector &Slices, + const std::string &FileName, + const std::vector &includes); + +/** + * StmtVisitor, walking over the AST and collecting the source locations of + * slices to extract + */ class StmtPrinterFiltering : public clang::ConstStmtVisitor { public: @@ -134,9 +175,7 @@ class StmtPrinterFiltering bool VisitForStmt(const clang::ForStmt *Stmt); bool VisitDoStmt(const clang::DoStmt *Stmt); bool VisitSwitchStmt(const clang::SwitchStmt *Stmt); - // bool VisitReturnStmt(const clang::ReturnStmt *Stmt); bool VisitIfStmt(const clang::IfStmt *Stmt); - // bool VisitSwitchCase(const clang::SwitchCase *Stmt); bool VisitCaseStmt(const clang::CaseStmt *Stmt); bool VisitDefaultStmt(const clang::DefaultStmt *Stmt); static std::vector @@ -146,7 +185,6 @@ class StmtPrinterFiltering private: StmtPrinterFiltering(const std::set &TargetLines, - const clang::ASTContext &CTX, const clang::SourceManager &SM, const clang::LangOptions &LO); @@ -155,11 +193,16 @@ class StmtPrinterFiltering unsigned int Filtered = 0; std::vector Slices; const std::set &TargetLines; - const clang::ASTContext &CTX; const clang::SourceManager &SM; const clang::LangOptions &LO; }; -class DeclPrinter : public clang::ConstDeclVisitor { + +/** + * DeclVisitor, walking over the AST and collecting the source locations of + * Slices to extract + */ +class DeclPrinterFiltering + : public clang::ConstDeclVisitor { public: void VisitFunctionDecl(const clang::FunctionDecl *decl); void VisitVarDecl(const clang::VarDecl *decl); @@ -181,6 +224,14 @@ class DeclPrinter : public clang::ConstDeclVisitor { const clang::ASTContext &CTX, const clang::SourceManager &SM, const clang::LangOptions &LO); + /** + * + * @param Decl + * @param TargetLines + * @param CTX + * @return * @return First are the file slices, then the ones required for + * the header + */ static std::pair, std::vector> GetFileSlices(const clang::Decl *Decl, @@ -188,9 +239,10 @@ class DeclPrinter : public clang::ConstDeclVisitor { const clang::ASTContext &CTX); private: - DeclPrinter(const std::set &Target, - const clang::ASTContext &CTX, const clang::SourceManager &SM, - const clang::LangOptions &LO); + DeclPrinterFiltering(const std::set &Target, + const clang::ASTContext &CTX, + const clang::SourceManager &SM, + const clang::LangOptions &LO); std::vector Slices; std::vector HeaderSlices; const std::set &TargetLines; @@ -198,12 +250,6 @@ class DeclPrinter : public clang::ConstDeclVisitor { const clang::SourceManager &SM; const clang::LangOptions &LO; }; - -void extractHeaderSlices(const std::string &FileIn, const std::string &FileOut, - const std::vector &Slices, - const std::string &FileName, - const std::vector &includes); - } // namespace printer #endif // PHASAR_PRINTER_H diff --git a/tools/module-extractor/slicer.cpp b/tools/module-extractor/slicer.cpp index 12ba7b6f71..796ef63859 100644 --- a/tools/module-extractor/slicer.cpp +++ b/tools/module-extractor/slicer.cpp @@ -302,9 +302,6 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, for (const auto &s : p.second) { if (first) { auto line = psr::getLineFromIR(p.first); - // llvm::dbgs() << "TEst jr\n"; - // llvm::dbgs() << psr::getSrcCodeFromIR(p.first) << "\t" << line << - // "\n"; auto end_line = psr::getFunctionHeaderLines(p.first); for (unsigned int l = line; l <= end_line; ++l) { file_lines[file].insert(l); @@ -340,7 +337,6 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, if (auto *scope = dyn_cast(inst->getDebugLoc().getScope())) { block_lines.insert(line); - // TODO jr file_lines[file].insert(line); file_lines[file].insert(scope->getLine()); } @@ -359,13 +355,6 @@ void process_results(ProjectIRDB &DB, IFDSSolver &solver, } } } - // auto lines = add_block(file, &block_lines); - // for (auto line : *lines) { - // file_lines[file].insert(line); - // } - // TODO jr - // std::string slices = add_block(file, &file_lines[file]); - // file_slices.emplace(file, slices); } for (const auto &f : file_lines) { const auto slices = add_block(f.first, &f.second); @@ -469,6 +458,12 @@ std::string createSlice(string target, const set &entrypoints, return ""; } +/** + * Reads a blacklist of headers not to slice from the file 'path'. This file + * needs to have one blacklisted header in each line + * @param path Path to the file to read or 'none' if no blacklist is used + * @return A set containing headers not to slice + */ unordered_set read_blacklist(const string &path) { if (path == "none") { return {}; diff --git a/tools/module-extractor/source_utils.cpp b/tools/module-extractor/source_utils.cpp index 1db064ea5c..05e64e490a 100644 --- a/tools/module-extractor/source_utils.cpp +++ b/tools/module-extractor/source_utils.cpp @@ -1,7 +1,7 @@ #include "source_utils.h" namespace utils { -// Taken from clang tidy +// The functions here are taken and modified from clang tidy llvm::Optional findNextTokenSkippingComments(clang::SourceLocation Start, const clang::SourceManager &SM, @@ -27,10 +27,10 @@ llvm::Optional findNextToken(clang::SourceLocation Start, return CurrentToken; } -// TODO: maybe change handling of macros // Given a Stmt which does not include it's semicolon this method returns the // SourceLocation of the semicolon. // Taken from clang tidy +// The handling of macros may still not handle all edge cases correctly clang::SourceLocation getSemicolonAfterStmtEndLoc( const clang::SourceLocation &EndLoc, const clang::SourceManager &SM, const clang::LangOptions &LangOpts, clang::tok::TokenKind Kind) { @@ -62,24 +62,26 @@ clang::SourceLocation getSemicolonAfterStmtEndLoc( findNextToken(EndLoc, Kind, SM, LangOpts); // Testing for semicolon again avoids some issues with macros. - if (NextTok && NextTok->is(Kind)) + if (NextTok && NextTok->is(Kind)) { return NextTok->getLocation(); + } - return clang::SourceLocation(); + return {}; } clang::SourceLocation findPreviousTokenStart(clang::SourceLocation Start, const clang::SourceManager &SM, const clang::LangOptions &LangOpts) { - if (Start.isInvalid() || Start.isMacroID()) - return clang::SourceLocation(); + if (Start.isInvalid() || Start.isMacroID()) { + return {}; + } clang::SourceLocation BeforeStart = Start.getLocWithOffset(-1); - if (BeforeStart.isInvalid() || BeforeStart.isMacroID()) - return clang::SourceLocation(); + if (BeforeStart.isInvalid() || BeforeStart.isMacroID()) { + return {}; + } return clang::Lexer::GetBeginningOfToken(BeforeStart, SM, LangOpts); } - } // namespace utils \ No newline at end of file diff --git a/tools/module-extractor/source_utils.h b/tools/module-extractor/source_utils.h index 61dbe4f3e6..637931bbad 100644 --- a/tools/module-extractor/source_utils.h +++ b/tools/module-extractor/source_utils.h @@ -15,7 +15,7 @@ namespace utils { /** - * Return the location directy AFTER the end of the token + * Return the location direct AFTER the end of the token * @param Loc * @param SM * @param LangOpts @@ -27,105 +27,40 @@ inline clang::SourceLocation getEndOfToken(clang::SourceLocation Loc, return clang::Lexer::getLocForEndOfToken(Loc, 0, SM, LangOpts); } -inline clang::PresumedLoc getLocationAsWritten(clang::SourceLocation loc, - const clang::SourceManager &sm) { - return sm.getPresumedLoc(loc); -} - -// https://github.com/llvm/llvm-project/blob/main/clang/lib/CodeGen/CGDebugInfo.cpp#L470 -inline unsigned int getLineFromSourceLocation(const clang::PresumedLoc &loc) { - return loc.getLine(); -} - -inline bool isInTargetFile(const clang::PresumedLoc &loc, - const clang::SourceManager &sm) { - return sm.getMainFileID() == loc.getFileID(); -} - -inline bool isInWhitelist(unsigned int line, - const std::set &lines) { - return lines.find(line) != lines.end(); -} - /** - * inclusive - * @param lineBegin - * @param lineEnd - * @param lines + * Returns the Location of Loc as it is written in the Source code. For example + * this returns the expansion location of a macro and not the location where it + * is defined + * @param Loc + * @param SM * @return */ -inline bool isAnyInRangeInWhitelist(unsigned int lineBegin, - unsigned int lineEnd, - const std::set &lines) { - assert(lineBegin <= lineEnd); - return lines.lower_bound(lineBegin) != lines.upper_bound(lineEnd); -} - -inline bool shouldBeSliced(const clang::Decl *decl, - const clang::SourceManager &sm, - const std::set &lines) { - if (llvm::isa(decl)) { - return true; - } - if (sm.getFileID(sm.getSpellingLoc(decl->getBeginLoc())) != - sm.getMainFileID()) { - return false; - } - // return true; - return lines.lower_bound(sm.getPresumedLineNumber(decl->getBeginLoc())) != - lines.upper_bound(sm.getPresumedLineNumber(decl->getEndLoc())); -} - -inline bool shouldBeSliced(const clang::Stmt *stmt, - const clang::SourceManager &sm, - const std::set &lines) { - // if (sm.getFileID(sm.getSpellingLoc(stmt->getBeginLoc())) != - // sm.getMainFileID()) { - // return false; - // } - if (llvm::isa(stmt) || - llvm::isa(stmt) || - llvm::isa(stmt) || - llvm::isa(stmt) || - llvm::isa(stmt) || - llvm::isa(stmt)) { - return true; - } - - return lines.lower_bound(sm.getPresumedLineNumber(stmt->getBeginLoc())) != - lines.upper_bound(sm.getPresumedLineNumber(stmt->getEndLoc())); -} - -// Take from clang tidy -template -clang::SourceLocation -findNextToken(clang::SourceLocation Start, const clang::SourceManager &SM, - const clang::LangOptions &LangOpts, TokenKind TK) { - while (true) { - llvm::Optional CurrentToken = - clang::Lexer::findNextToken(Start, SM, LangOpts); - - if (!CurrentToken) - return clang::SourceLocation(); - - clang::Token PotentialMatch = *CurrentToken; - if (PotentialMatch.getKind() == TK) - return PotentialMatch.getLocation(); - - // If we reach the end of the file, and eof is not the target token, we stop - // the loop, otherwise we will get infinite loop (findNextToken will return - // eof on eof). - if (PotentialMatch.is(clang::tok::eof)) - return clang::SourceLocation(); - Start = PotentialMatch.getLastLoc(); - } +inline clang::PresumedLoc getLocationAsWritten(clang::SourceLocation Loc, + const clang::SourceManager &SM) { + return SM.getPresumedLoc(Loc); } +/** + * Returns the first semicolon after the given end location + * @param EndLoc The location after which to begin searching + * @param SM + * @param LangOpts + * @param Kind The token to search. Defaults to a semicolon + * @return The location of the found semicolon or an invalid location if none + * could be found + */ clang::SourceLocation getSemicolonAfterStmtEndLoc( const clang::SourceLocation &EndLoc, const clang::SourceManager &SM, const clang::LangOptions &LangOpts, clang::tok::TokenKind Kind = clang::tok::TokenKind::semi); +/** + * Returns the location of the beginning of the previous token + * @param Start Location of the current token + * @param SM + * @param LangOpts + * @return + */ clang::SourceLocation findPreviousTokenStart(clang::SourceLocation Start, const clang::SourceManager &SM, From 4795ba049ffa43649fe59ea12875b26ddf42db78 Mon Sep 17 00:00:00 2001 From: jr Date: Wed, 30 Mar 2022 12:05:01 +0200 Subject: [PATCH 42/42] Improve error message if iwyu is not found --- tools/module-extractor/include_handling.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/module-extractor/include_handling.cpp b/tools/module-extractor/include_handling.cpp index 5ac40c3a3d..95fe0413e7 100644 --- a/tools/module-extractor/include_handling.cpp +++ b/tools/module-extractor/include_handling.cpp @@ -56,7 +56,8 @@ bool is_iwyu_available() { (WEXITSTATUS(std::system("iwyu_tool.py --help")) == 0) && (WEXITSTATUS(std::system("fix_includes.py --help")) == 0); if (!available) { - std::cout << "iwyu or fix_include tool not found. Skipping header cleanup" + std::cerr << "iwyu_tool.py or fix_includes.py tool not found. Skipping " + "header cleanup" << std::endl; } return available;