//===-- cxx_loop_proto.proto - Protobuf description of C++ with for loops -===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
///
/// \file
///  This file describes a subset of C++ as a protobuf. It is used to
///  more easily find interesting inputs for fuzzing Clang. This subset
///  differs from the one defined in cxx_proto.proto by eliminating while
///  loops and conditionals. The goal is that the C++ code generated will be
///  more likely to stress the LLVM loop vectorizer.
///
//===----------------------------------------------------------------------===//

syntax = "proto2";

message Const {
  required int32 val = 1;
}

message VarRef {
  // Add an enum for each array in function signature
  enum Arr {
    ARR_A = 0;
    ARR_B = 1;
    ARR_C = 2;
  };
  required Arr arr = 1;
}

message BinaryOp {
  enum Op {
    PLUS = 0;
    MINUS = 1;
    MUL = 2;
    XOR = 3;
    AND = 4;
    OR = 5;
    EQ = 6;
    NE = 7;
    LE = 8;
    GE = 9;
    LT = 10;
    GT = 11;
  };
  required Op op = 1;
  required Rvalue left = 2;
  required Rvalue right = 3;
}

message Rvalue {
  oneof rvalue_oneof {
    Const cons = 1;
    BinaryOp binop = 2;
    VarRef varref = 3;
  }
}

message AssignmentStatement {
  required VarRef varref = 1;
  required Rvalue rvalue = 2;
}

message Statement {
  required AssignmentStatement assignment = 1;
}

message StatementSeq {
  repeated Statement statements = 1;
}

message LoopFunction {
  required StatementSeq statements = 1;
}

package clang_fuzzer;
