Skip to content

Commit

Permalink
Minor review comments
Browse files Browse the repository at this point in the history
  • Loading branch information
SanthoshMohan97 committed Feb 3, 2024
1 parent 8be9839 commit 0341768
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "phasar/PhasarLLVM/DataFlow/IfdsIde/LLVMZeroValue.h"
#include "phasar/PhasarLLVM/Domain/LLVMAnalysisDomain.h"
#include "phasar/PhasarLLVM/Pointer/LLVMAliasInfo.h"
#include "phasar/PhasarLLVM/Utils/DataFlowAnalysisType.h"
#include "phasar/Utils/ByRef.h"
#include "phasar/Utils/JoinLattice.h"
#include "phasar/Utils/Logger.h"
Expand Down Expand Up @@ -530,7 +531,8 @@ class IDETypeStateAnalysis
llvm::dyn_cast<llvm::AllocaInst>(Res.first)) {
if (Res.second == TSD->error()) {
Warning<IDETypeStateAnalysisDomain<TypeStateDescriptionTy>>
Warn(&I, Res.first, TSD->error());
Warn(&I, Res.first, TSD->error(),
DataFlowAnalysisType::None);
// ERROR STATE DETECTED
this->Printer->onResult(Warn);
}
Expand All @@ -542,7 +544,8 @@ class IDETypeStateAnalysis
llvm::dyn_cast<llvm::AllocaInst>(Res.first)) {
if (Res.second == TSD->error()) {
Warning<IDETypeStateAnalysisDomain<TypeStateDescriptionTy>>
Warn(&I, Res.first, TSD->error());
Warn(&I, Res.first, TSD->error(),
DataFlowAnalysisType::None);
// ERROR STATE DETECTED
this->Printer->onResult(Warn);
}
Expand Down
8 changes: 6 additions & 2 deletions include/phasar/PhasarLLVM/Utils/AnalysisPrinterBase.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#ifndef PHASAR_PHASARLLVM_UTILS_ANALYSISPRINTERBASE_H
#define PHASAR_PHASARLLVM_UTILS_ANALYSISPRINTERBASE_H

#include "phasar/PhasarLLVM/Utils/DataFlowAnalysisType.h"

#include "llvm/Support/raw_ostream.h"

namespace psr {
Expand All @@ -13,11 +15,13 @@ template <typename AnalysisDomainTy> struct Warning {
n_t Instr;
d_t Fact;
l_t LatticeElement;
DataFlowAnalysisType AnalysisType;

// Constructor
Warning(n_t Inst, d_t DfFact, l_t Lattice)
Warning(n_t Inst, d_t DfFact, l_t Lattice,
DataFlowAnalysisType DfAnalysisType)
: Instr(std::move(Inst)), Fact(std::move(DfFact)),
LatticeElement(std::move(Lattice)) {}
LatticeElement(std::move(Lattice)), AnalysisType(DfAnalysisType) {}
};

template <typename AnalysisDomainTy> struct DataflowAnalysisResults {
Expand Down
11 changes: 6 additions & 5 deletions include/phasar/PhasarLLVM/Utils/DefaultAnalysisPrinter.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "phasar/Domain/BinaryDomain.h"
#include "phasar/PhasarLLVM/Utils/AnalysisPrinterBase.h"
#include "phasar/PhasarLLVM/Utils/LLVMShorthands.h"
#include "phasar/Utils/MaybeUniquePtr.h"
#include "phasar/Utils/Printer.h"

#include <optional>
Expand All @@ -18,7 +19,7 @@ class DefaultAnalysisPrinter : public AnalysisPrinterBase<AnalysisDomainTy> {

public:
~DefaultAnalysisPrinter() override = default;
DefaultAnalysisPrinter(llvm::raw_ostream &OS = llvm::outs()) : OS(OS) {}
DefaultAnalysisPrinter(llvm::raw_ostream &OS = llvm::outs()) : OS(&OS) {}

void onResult(Warning<AnalysisDomainTy> Warn) override {
AnalysisResults.Warn.emplace_back(std::move(Warn));
Expand All @@ -28,19 +29,19 @@ class DefaultAnalysisPrinter : public AnalysisPrinterBase<AnalysisDomainTy> {
void onFinalize() const override {
for (const auto &Iter : AnalysisResults.Warn) {

OS << "\nAt IR statement: " << NToString(Iter.Instr) << "\n";
*OS << "\nAt IR statement: " << NToString(Iter.Instr) << "\n";

OS << "\tFact: " << DToString(Iter.Fact) << "\n";
*OS << "\tFact: " << DToString(Iter.Fact) << "\n";

if constexpr (std::is_same_v<l_t, BinaryDomain>) {
OS << "Value: " << LToString(Iter.LatticeElement) << "\n";
*OS << "Value: " << LToString(Iter.LatticeElement) << "\n";
}
}
}

private:
DataflowAnalysisResults<AnalysisDomainTy> AnalysisResults{};
llvm::raw_ostream &OS = llvm::outs();
MaybeUniquePtr<llvm::raw_ostream> OS = &llvm::outs();
};

} // namespace psr
Expand Down
16 changes: 9 additions & 7 deletions include/phasar/PhasarLLVM/Utils/SourceMgrPrinter.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#ifndef PHASAR_PHASARLLVM_UTILS_SOURCEMGRPRINTER_H
#define PHASAR_PHASARLLVM_UTILS_SOURCEMGRPRINTER_H
#include "phasar/PhasarLLVM/Utils/AnalysisPrinterBase.h"
#include "phasar/PhasarLLVM/Utils/DataFlowAnalysisType.h"
#include "phasar/PhasarLLVM/Utils/LLVMIRToSrc.h"
#include "phasar/PhasarLLVM/Utils/OnTheFlyAnalysisPrinter.h"
#include "phasar/Utils/Logger.h"
Expand All @@ -9,6 +10,7 @@
#include "llvm/Support/MemoryBuffer.h"

#include <llvm/ADT/StringMap.h>
#include <llvm/ADT/StringRef.h>
#include <llvm/Support/SourceMgr.h>
#include <llvm/Support/raw_ostream.h>

Expand All @@ -24,12 +26,13 @@ class SourceMgrPrinter : public AnalysisPrinterBase<AnalysisDomainTy> {
void onResult(Warning<AnalysisDomainTy> Warn) override {
auto BufIdOpt = getSourceBufId(getFilePathFromIR(Warn.Instr));
if (BufIdOpt.has_value()) {
SrcMgr.PrintMessage(*OS,
SrcMgr.FindLocForLineAndColumn(
BufIdOpt.value(),
getLineAndColFromIR(Warn.Instr).first,
getLineAndColFromIR(Warn.Instr).second),
llvm::SourceMgr::DK_Warning, Msg);
SrcMgr.PrintMessage(
*OS,
SrcMgr.FindLocForLineAndColumn(
BufIdOpt.value(), getLineAndColFromIR(Warn.Instr).first,
getLineAndColFromIR(Warn.Instr).second),
llvm::SourceMgr::DK_Warning,
toString(Warn.AnalysisType) + " Analysis found an error");
}
}

Expand All @@ -52,7 +55,6 @@ class SourceMgrPrinter : public AnalysisPrinterBase<AnalysisDomainTy> {
private:
llvm::SourceMgr SrcMgr;
llvm::StringMap<unsigned> FileNameIDMap;
static constexpr llvm::StringLiteral Msg = "Phasar found an error";
MaybeUniquePtr<llvm::raw_ostream> OS = &llvm::errs();
};
} // namespace psr
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
#include "phasar/PhasarLLVM/DataFlow/IfdsIde/Problems/ExtendedTaintAnalysis/TransferEdgeFunction.h"
#include "phasar/PhasarLLVM/Pointer/LLVMAliasInfo.h"
#include "phasar/PhasarLLVM/TypeHierarchy/LLVMTypeHierarchy.h"
#include "phasar/PhasarLLVM/Utils/DataFlowAnalysisType.h"
#include "phasar/PhasarLLVM/Utils/LLVMShorthands.h"
#include "phasar/PhasarLLVM/Utils/OnTheFlyAnalysisPrinter.h"
#include "phasar/Pointer/PointsToInfo.h"
#include "phasar/Utils/DebugOutput.h"
#include "phasar/Utils/Logger.h"
Expand Down Expand Up @@ -229,7 +229,8 @@ void IDEExtendedTaintAnalysis::reportLeakIfNecessary(
if (isSink(SinkCandidate, Inst)) {
Leaks[Inst].insert(LeakCandidate);
Warning<IDEExtendedTaintAnalysisDomain> Warn(
Inst, makeFlowFact(LeakCandidate), Top{});
Inst, makeFlowFact(LeakCandidate), Top{},
DataFlowAnalysisType::IDEExtendedTaintAnalysis);
Printer->onResult(Warn);
}
}
Expand Down Expand Up @@ -755,8 +756,9 @@ void IDEExtendedTaintAnalysis::emitTextReport(

for (auto &[Inst, LeakSet] : Leaks) {
for (const auto &Leak : LeakSet) {
Warning<IDEExtendedTaintAnalysisDomain> Warn(Inst, makeFlowFact(Leak),
Top{});
Warning<IDEExtendedTaintAnalysisDomain> Warn(
Inst, makeFlowFact(Leak), Top{},
DataFlowAnalysisType::IDEExtendedTaintAnalysis);
Printer->onResult(Warn);
}
}
Expand Down
11 changes: 7 additions & 4 deletions lib/PhasarLLVM/DataFlow/IfdsIde/Problems/IFDSTaintAnalysis.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "phasar/PhasarLLVM/Domain/LLVMAnalysisDomain.h"
#include "phasar/PhasarLLVM/Pointer/LLVMAliasInfo.h"
#include "phasar/PhasarLLVM/TaintConfig/TaintConfigUtilities.h"
#include "phasar/PhasarLLVM/Utils/DataFlowAnalysisType.h"
#include "phasar/PhasarLLVM/Utils/LLVMIRToSrc.h"
#include "phasar/PhasarLLVM/Utils/LLVMShorthands.h"
#include "phasar/Utils/Logger.h"
Expand Down Expand Up @@ -410,8 +411,9 @@ auto IFDSTaintAnalysis::getSummaryFlowFunction([[maybe_unused]] n_t CallSite,
CallSite](d_t Source) -> container_type {
if (Leak.count(Source)) {
if (Leaks[CallSite].insert(Source).second) {
Warning<LLVMIFDSAnalysisDomainDefault> Warn(CallSite, Source,
topElement());
Warning<LLVMIFDSAnalysisDomainDefault> Warn(
CallSite, Source, topElement(),
DataFlowAnalysisType::IFDSTaintAnalysis);
Printer->onResult(Warn);
}
}
Expand Down Expand Up @@ -439,8 +441,9 @@ auto IFDSTaintAnalysis::getSummaryFlowFunction([[maybe_unused]] n_t CallSite,

if (Leak.count(Source)) {
if (Leaks[CallSite].insert(Source).second) {
Warning<LLVMIFDSAnalysisDomainDefault> Warn(CallSite, Source,
topElement());
Warning<LLVMIFDSAnalysisDomainDefault> Warn(
CallSite, Source, topElement(),
DataFlowAnalysisType::IFDSTaintAnalysis);
Printer->onResult(Warn);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#include "phasar/PhasarLLVM/ControlFlow/LLVMBasedCFG.h"
#include "phasar/PhasarLLVM/DB/LLVMProjectIRDB.h"
#include "phasar/PhasarLLVM/DataFlow/IfdsIde/LLVMZeroValue.h"
#include "phasar/PhasarLLVM/Utils/DataFlowAnalysisType.h"
#include "phasar/PhasarLLVM/Utils/LLVMIRToSrc.h"
#include "phasar/PhasarLLVM/Utils/LLVMShorthands.h"
#include "phasar/Utils/Logger.h"
Expand Down Expand Up @@ -203,8 +204,9 @@ IFDSUninitializedVariables::getNormalFlowFunction(
!llvm::isa<llvm::CastInst>(Curr) &&
!llvm::isa<llvm::PHINode>(Curr)) {
UndefValueUses[Curr].insert(Operand);
Warning<LLVMIFDSAnalysisDomainDefault> Warn(Curr, Operand,
BinaryDomain::TOP);
Warning<LLVMIFDSAnalysisDomainDefault> Warn(
Curr, Operand, BinaryDomain::TOP,
DataFlowAnalysisType::IFDSUninitializedVariables);
Printer->onResult(Warn);
}
return {Source, Curr};
Expand Down

0 comments on commit 0341768

Please sign in to comment.