blob: 7538fc636ab83f72823df714a1fc854fa866fff5 [file] [log] [blame]
Vitaly Buka410a6b22018-06-07 19:17:46 +00001//===-- cxx_loop_proto.proto - Protobuf description of C++ with for loops -===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9///
10/// \file
11/// This file describes a subset of C++ as a protobuf. It is used to
12/// more easily find interesting inputs for fuzzing Clang. This subset
Matt Morehouse1dc1ff82018-06-08 00:33:35 +000013/// differs from the one defined in cxx_proto.proto by eliminating while
Matt Morehouse34167732018-06-11 17:05:45 +000014/// loops and conditionals. The goal is that the C++ code generated will be
Matt Morehouse1dc1ff82018-06-08 00:33:35 +000015/// more likely to stress the LLVM loop vectorizer.
Vitaly Buka410a6b22018-06-07 19:17:46 +000016///
17//===----------------------------------------------------------------------===//
18
Vitaly Buka410a6b22018-06-07 19:17:46 +000019syntax = "proto2";
20
Vitaly Buka410a6b22018-06-07 19:17:46 +000021message Const {
22 required int32 val = 1;
23}
24
Matt Morehouse34167732018-06-11 17:05:45 +000025message VarRef {
26 // Add an enum for each array in function signature
27 enum Arr {
28 ARR_A = 0;
29 ARR_B = 1;
30 ARR_C = 2;
31 };
32 required Arr arr = 1;
33}
34
Vitaly Buka410a6b22018-06-07 19:17:46 +000035message BinaryOp {
36 enum Op {
37 PLUS = 0;
38 MINUS = 1;
39 MUL = 2;
40 DIV = 3;
41 MOD = 4;
42 XOR = 5;
43 AND = 6;
44 OR = 7;
45 EQ = 8;
46 NE = 9;
47 LE = 10;
48 GE = 11;
49 LT = 12;
50 GT = 13;
51 };
52 required Op op = 1;
53 required Rvalue left = 2;
54 required Rvalue right = 3;
55}
56
57message Rvalue {
58 oneof rvalue_oneof {
Matt Morehouse1dc1ff82018-06-08 00:33:35 +000059 Const cons = 1;
60 BinaryOp binop = 2;
Matt Morehouse34167732018-06-11 17:05:45 +000061 VarRef varref = 3;
Vitaly Buka410a6b22018-06-07 19:17:46 +000062 }
63}
64
65message AssignmentStatement {
Matt Morehouse34167732018-06-11 17:05:45 +000066 required VarRef varref = 1;
Vitaly Buka410a6b22018-06-07 19:17:46 +000067 required Rvalue rvalue = 2;
68}
69
Vitaly Buka410a6b22018-06-07 19:17:46 +000070message IfElse {
71 required Rvalue cond = 1;
72 required StatementSeq if_body = 2;
73 required StatementSeq else_body = 3;
74}
75
Vitaly Buka410a6b22018-06-07 19:17:46 +000076message Statement {
Matt Morehouse34167732018-06-11 17:05:45 +000077 required AssignmentStatement assignment = 1;
Vitaly Buka410a6b22018-06-07 19:17:46 +000078}
79
80message StatementSeq {
81 repeated Statement statements = 1;
82}
83
84message LoopFunction {
85 required StatementSeq statements = 1;
86}
87
88package clang_fuzzer;