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