LLZK
2.1.1
An open-source IR for Zero Knowledge (ZK) circuits
Loading...
Searching...
No Matches
LLZKValidationPasses.cpp
Go to the documentation of this file.
1
//===-- LLZKValidationPasses.cpp - LLZK validation passes -------*- C++ -*-===//
2
//
3
// Part of the LLZK Project, under the Apache License v2.0.
4
// See LICENSE.txt for license information.
5
// Copyright 2025 Veridise Inc.
6
// SPDX-License-Identifier: Apache-2.0
7
//
8
//===----------------------------------------------------------------------===//
14
//===----------------------------------------------------------------------===//
15
16
#include "
llzk/Validators/LLZKValidationPasses.h
"
17
18
#include "
llzk/Analysis/AnalysisUtil.h
"
19
#include "
llzk/Analysis/MemberOverwriteAnalysis.h
"
20
#include "
llzk/Dialect/Function/IR/Ops.h
"
21
22
#include <mlir/IR/BuiltinOps.h>
23
24
// Include the generated base pass class definitions.
25
namespace
llzk
{
26
#define GEN_PASS_DEF_MEMBERWRITEVALIDATORPASS
27
#include "
llzk/Validators/LLZKValidationPasses.h.inc
"
28
}
// namespace llzk
29
30
using namespace
llzk::component
;
31
32
namespace
{
33
34
class
PassImpl :
public
llzk::impl::MemberWriteValidatorPassBase
<PassImpl> {
35
using
Base
=
MemberWriteValidatorPassBase<PassImpl>
;
36
using
Base::Base
;
37
38
void
runOnOperation()
override
{
39
StructDefOp
structDef = getOperation();
40
41
auto
result =
analyzeStruct
(structDef);
42
if
(failed(result)) {
43
signalPassFailure();
44
}
45
const
auto
&[overwrites, written] = *result;
46
47
for
(
auto
member : structDef.
getMemberDefs
()) {
48
if
(!written.contains(member.getSymName())) {
49
member->emitWarning(
"member may not be written to"
).report();
50
}
51
}
52
53
for
(
auto
[first, over] : overwrites) {
54
auto
diag = over->emitWarning() <<
"may overwrite '"
<<
MemberDefOp::getOperationName
()
55
<<
"' \"@"
<< over.getMemberName() <<
'"'
;
56
diag.attachNote(first.getLoc()) <<
"previously written to here"
;
57
diag.report();
58
}
59
60
markAllAnalysesPreserved();
61
}
62
};
63
64
}
// namespace
AnalysisUtil.h
Ops.h
LLZKValidationPasses.h.inc
LLZKValidationPasses.h
MemberOverwriteAnalysis.h
llzk::component::MemberDefOp::getOperationName
static constexpr ::llvm::StringLiteral getOperationName()
Definition
Ops.h.inc:353
llzk::component::StructDefOp
Definition
Ops.h.inc:1143
llzk::component::StructDefOp::getMemberDefs
::std::vector< MemberDefOp > getMemberDefs()
Get all MemberDefOp in this structure.
Definition
Ops.cpp:458
llzk::impl::MemberWriteValidatorPassBase
Definition
LLZKValidationPasses.cpp:25
llzk::impl::MemberWriteValidatorPassBase::MemberWriteValidatorPassBase
MemberWriteValidatorPassBase()
Definition
LLZKValidationPasses.cpp:29
llzk::impl::MemberWriteValidatorPassBase::Base
MemberWriteValidatorPassBase Base
Definition
LLZKValidationPasses.cpp:27
llzk::component
Definition
Dialect.cpp:209
llzk
Definition
AnalysisPassEnums.cpp:19
llzk::analyzeStruct
llvm::FailureOr< std::pair< llvm::SetVector< Overwrite >, FuzzySet > > analyzeStruct(component::StructDefOp structDef)
Definition
MemberOverwriteAnalysis.cpp:101
lib
Validators
LLZKValidationPasses.cpp
Generated by
1.14.0
Copyright 2025 Veridise Inc. under the Apache License v2.0. Copyright 2026 Project LLZK under the Apache License v2.0.