82 lines · plain
1//===-- cxx_loop_proto.proto - Protobuf description of C++ with for loops -===//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-exception6//7//===----------------------------------------------------------------------===//8///9/// \file10/// This file describes a subset of C++ as a protobuf. It is used to11/// more easily find interesting inputs for fuzzing LLVM's vectorizer.12/// This subset differs from the one defined in cxx_proto.proto by eliminating13/// while loops and conditionals. The goal is that the C++ code generated will14/// be more likely to stress the LLVM loop vectorizer. The code generated will15/// contain either a single loop or two nested loops.16///17//===----------------------------------------------------------------------===//18 19syntax = "proto2";20 21message Const {22 required int32 val = 1;23}24 25message VarRef {26 // Add an enum for each array in function signature27 enum Arr {28 ARR_A = 0;29 ARR_B = 1;30 ARR_C = 2;31 };32 required Arr arr = 1;33}34 35message BinaryOp {36 enum Op {37 PLUS = 0;38 MINUS = 1;39 MUL = 2;40 XOR = 3;41 AND = 4;42 OR = 5;43 EQ = 6;44 NE = 7;45 LE = 8;46 GE = 9;47 LT = 10;48 GT = 11;49 };50 required Op op = 1;51 required Rvalue left = 2;52 required Rvalue right = 3;53}54 55message Rvalue {56 oneof rvalue_oneof {57 Const cons = 1;58 BinaryOp binop = 2;59 VarRef varref = 3;60 }61}62 63message AssignmentStatement {64 required VarRef varref = 1;65 required Rvalue rvalue = 2;66}67 68message Statement {69 required AssignmentStatement assignment = 1;70}71 72message StatementSeq {73 repeated Statement statements = 1;74}75 76message LoopFunction {77 optional StatementSeq inner_statements = 1;78 required StatementSeq outer_statements = 2;79}80 81package clang_fuzzer;82