1//===-- cxx_proto.proto - Protobuf description of C++ ---------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8///
9/// \file
10/// This file describes a subset of C++ as a protobuf.  It is used to
11///  more easily find interesting inputs for fuzzing Clang.
12///
13//===----------------------------------------------------------------------===//
14
15syntax = "proto2";
16
17message VarRef {
18  required int32 varnum = 1;
19}
20
21message Lvalue {
22  required VarRef varref = 1;
23}
24
25message Const {
26  required int32 val = 1;
27}
28
29message BinaryOp {
30  enum Op {
31    PLUS = 0;
32    MINUS = 1;
33    MUL = 2;
34    DIV = 3;
35    MOD = 4;
36    XOR = 5;
37    AND = 6;
38    OR = 7;
39    EQ = 8;
40    NE = 9;
41    LE = 10;
42    GE = 11;
43    LT = 12;
44    GT = 13;
45  };
46  required Op op = 1;
47  required Rvalue left = 2;
48  required Rvalue right = 3;
49}
50
51message Rvalue {
52  oneof rvalue_oneof {
53    VarRef varref = 1;
54    Const cons = 2;
55    BinaryOp binop = 3;
56  }
57}
58
59message AssignmentStatement {
60  required Lvalue lvalue = 1;
61  required Rvalue rvalue = 2;
62}
63
64
65message IfElse {
66  required Rvalue cond = 1;
67  required StatementSeq if_body = 2;
68  required StatementSeq else_body = 3;
69}
70
71message While {
72  required Rvalue cond = 1;
73  required StatementSeq body = 2;
74}
75
76message Statement {
77  oneof stmt_oneof {
78    AssignmentStatement assignment = 1;
79    IfElse              ifelse     = 2;
80    While               while_loop = 3;
81  }
82}
83
84message StatementSeq {
85  repeated Statement statements = 1;
86}
87
88message Function {
89  required StatementSeq statements = 1;
90}
91
92package clang_fuzzer;
93