LCOV - code coverage report
Current view: top level - gcc/rust/expand - rust-macro-builtins-asm.h (source / functions) Coverage Total Hit
Test: gcc.info Lines: 100.0 % 19 19
Test Date: 2025-06-21 16:26:05 Functions: - 0 0
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: - 0 0

             Branch data     Line data    Source code
       1                 :             : 
       2                 :             : #include "rust-ast-fragment.h"
       3                 :             : #include "rust-macro-builtins.h"
       4                 :             : #include "rust-macro-builtins-helpers.h"
       5                 :             : #include "expected.h"
       6                 :             : #include "rust-macro-invoc-lexer.h"
       7                 :             : #include "rust/ast/rust-expr.h"
       8                 :             : #include "system.h"
       9                 :             : namespace Rust {
      10                 :             : 
      11                 :             : enum InlineAsmParseError
      12                 :             : {
      13                 :             :   // Enum for InlineAsmParseError
      14                 :             : 
      15                 :             :   // Currently with two error, COMMITTED AND NONCOMMITTED (to a token),
      16                 :             :   // which directs the parser to either bubbles the error up, or keep on going
      17                 :             :   // (vertical or horizontal)
      18                 :             : 
      19                 :             :   // COMMITTED can be use as a way for parser to bubble up
      20                 :             :   // after it has exhausted its search space despite it not having committed to
      21                 :             :   // any token
      22                 :             : 
      23                 :             :   COMMITTED,
      24                 :             :   NONCOMMITED,
      25                 :             : };
      26                 :             : class InlineAsmContext
      27                 :             : {
      28                 :             : public:
      29                 :             :   bool allow_templates;
      30                 :             :   bool is_explicit;
      31                 :             :   bool consumed_comma_without_formatted_string;
      32                 :             :   AST::InlineAsm &inline_asm;
      33                 :             :   Parser<MacroInvocLexer> &parser;
      34                 :             :   int last_token_id;
      35                 :             : 
      36                 :          58 :   InlineAsmContext (AST::InlineAsm &inline_asm, Parser<MacroInvocLexer> &parser,
      37                 :             :                     int last_token_id)
      38                 :          58 :     : allow_templates (true), is_explicit (false),
      39                 :          58 :       consumed_comma_without_formatted_string (false), inline_asm (inline_asm),
      40                 :          58 :       parser (parser), last_token_id (last_token_id)
      41                 :             :   {}
      42                 :             : 
      43                 :         901 :   InlineAsmContext (const InlineAsmContext &inline_asm_ctx)
      44                 :         901 :     : allow_templates (inline_asm_ctx.allow_templates),
      45                 :         901 :       is_explicit (inline_asm_ctx.is_explicit),
      46                 :         901 :       consumed_comma_without_formatted_string (false),
      47                 :         901 :       inline_asm (inline_asm_ctx.inline_asm), parser (inline_asm_ctx.parser),
      48                 :         861 :       last_token_id (inline_asm_ctx.last_token_id)
      49                 :             :   {}
      50                 :             :   // explicit InlineAsmContext (InlineAsmContext&& inline_asm_ctx)
      51                 :             :   //   : allow_templates (inline_asm_ctx.allow_templates), is_explicit
      52                 :             :   //   (inline_asm_ctx.is_explicit),
      53                 :             :   //     consumed_comma_without_formatted_string (false), inline_asm
      54                 :             :   //     (inline_asm_ctx.inline_asm), parser (inline_asm_ctx.parser),
      55                 :             :   //     last_token_id (inline_asm_ctx.last_token_id)
      56                 :             :   // {}
      57                 :             : 
      58                 :             :   // InlineAsmContext(tl::expected<InlineAsmContext, InlineAsmParseError>
      59                 :             :   // &expected)
      60                 :             :   //     : allow_templates(expected->allow_templates),
      61                 :             :   //     is_explicit(expected->is_explicit),
      62                 :             :   //       consumed_comma_without_formatted_string(expected->consumed_comma_without_formatted_string),
      63                 :             :   //       inline_asm(expected->inline_asm), parser(expected->parser),
      64                 :             :   //       last_token_id(expected->last_token_id)
      65                 :             :   // {
      66                 :             : 
      67                 :             :   // }
      68                 :          39 :   InlineAsmContext &operator= (const InlineAsmContext &inline_asm_ctx)
      69                 :             :   {
      70                 :          39 :     allow_templates = inline_asm_ctx.allow_templates;
      71                 :          39 :     is_explicit = inline_asm_ctx.is_explicit;
      72                 :          39 :     consumed_comma_without_formatted_string = false;
      73                 :          39 :     last_token_id = inline_asm_ctx.last_token_id;
      74                 :          39 :     return *this;
      75                 :             :   }
      76                 :             : 
      77                 :         185 :   bool is_global_asm () { return inline_asm.is_global_asm; }
      78                 :             : 
      79                 :             :   bool allows_templates () { return allow_templates; }
      80                 :             : 
      81                 :             :   void set_allow_templates (bool allow_templates)
      82                 :             :   {
      83                 :             :     this->allow_templates = allow_templates;
      84                 :             :   }
      85                 :             : };
      86                 :             : WARN_UNUSED_RESULT
      87                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
      88                 :             : expand_inline_asm_strings (InlineAsmContext inline_asm_ctx);
      89                 :             : 
      90                 :             : // Expected calls
      91                 :             : WARN_UNUSED_RESULT
      92                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
      93                 :             : validate (InlineAsmContext inline_asm_ctx);
      94                 :             : 
      95                 :             : WARN_UNUSED_RESULT
      96                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
      97                 :             : parse_asm_arg (InlineAsmContext inline_asm_ctx);
      98                 :             : 
      99                 :             : WARN_UNUSED_RESULT
     100                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
     101                 :             : parse_format_strings (InlineAsmContext inline_asm_ctx);
     102                 :             : 
     103                 :             : WARN_UNUSED_RESULT
     104                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
     105                 :             : parse_clobber_abi (InlineAsmContext inline_asm_ctx);
     106                 :             : 
     107                 :             : // From rustc
     108                 :             : WARN_UNUSED_RESULT
     109                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
     110                 :             : parse_reg_operand (InlineAsmContext inline_asm_ctx);
     111                 :             : 
     112                 :             : WARN_UNUSED_RESULT
     113                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
     114                 :             : parse_reg_operand_in (InlineAsmContext inline_asm_ctx);
     115                 :             : 
     116                 :             : WARN_UNUSED_RESULT
     117                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
     118                 :             : parse_reg_operand_out (InlineAsmContext inline_asm_ctx);
     119                 :             : 
     120                 :             : WARN_UNUSED_RESULT
     121                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
     122                 :             : parse_reg_operand_lateout (InlineAsmContext inline_asm_ctx);
     123                 :             : 
     124                 :             : WARN_UNUSED_RESULT
     125                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
     126                 :             : parse_reg_operand_inout (InlineAsmContext inline_asm_ctx);
     127                 :             : 
     128                 :             : WARN_UNUSED_RESULT
     129                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
     130                 :             : parse_reg_operand_inlateout (InlineAsmContext inline_asm_ctx);
     131                 :             : 
     132                 :             : WARN_UNUSED_RESULT
     133                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
     134                 :             : parse_reg_operand_const (InlineAsmContext inline_asm_ctx);
     135                 :             : 
     136                 :             : WARN_UNUSED_RESULT
     137                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
     138                 :             : parse_reg_operand_sym (InlineAsmContext inline_asm_ctx);
     139                 :             : 
     140                 :             : WARN_UNUSED_RESULT
     141                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
     142                 :             : parse_reg_operand_unexpected (InlineAsmContext inline_asm_ctx);
     143                 :             : 
     144                 :             : WARN_UNUSED_RESULT
     145                 :             : tl::optional<AST::Fragment>
     146                 :             : parse_asm (location_t invoc_locus, AST::MacroInvocData &invoc,
     147                 :             :            AST::InvocKind semicolon, AST::AsmKind is_global_asm);
     148                 :             : 
     149                 :             : WARN_UNUSED_RESULT
     150                 :             : bool
     151                 :             : check_identifier (Parser<MacroInvocLexer> &parser, std::string ident);
     152                 :             : 
     153                 :             : void
     154                 :             : check_and_set (InlineAsmContext &inline_asm_ctx, AST::InlineAsmOption option);
     155                 :             : 
     156                 :             : // From rustc
     157                 :             : WARN_UNUSED_RESULT
     158                 :             : tl::expected<InlineAsmContext, InlineAsmParseError>
     159                 :             : parse_options (InlineAsmContext &inline_asm_ctx);
     160                 :             : 
     161                 :             : // From rustc
     162                 :             : WARN_UNUSED_RESULT
     163                 :             : tl::optional<AST::InlineAsmRegOrRegClass>
     164                 :             : parse_reg (InlineAsmContext &inline_asm_ctx);
     165                 :             : 
     166                 :             : WARN_UNUSED_RESULT
     167                 :             : tl::optional<std::string>
     168                 :             : parse_format_string (InlineAsmContext &inline_asm_ctx);
     169                 :             : 
     170                 :             : WARN_UNUSED_RESULT
     171                 :             : tl::optional<std::string>
     172                 :             : parse_label (Parser<MacroInvocLexer> &parser, TokenId last_token_id,
     173                 :             :              InlineAsmContext &inline_asm_ctx);
     174                 :             : 
     175                 :             : // LLVM ASM bits
     176                 :             : 
     177                 :             : class LlvmAsmContext
     178                 :             : {
     179                 :             : public:
     180                 :             :   AST::LlvmInlineAsm &llvm_asm;
     181                 :             :   Parser<MacroInvocLexer> &parser;
     182                 :             :   int last_token_id;
     183                 :             : 
     184                 :             : public:
     185                 :           2 :   LlvmAsmContext (AST::LlvmInlineAsm &llvm_asm, Parser<MacroInvocLexer> &parser,
     186                 :             :                   int last_token_id)
     187                 :           2 :     : llvm_asm (llvm_asm), parser (parser), last_token_id (last_token_id)
     188                 :             :   {}
     189                 :             : };
     190                 :             : 
     191                 :             : void
     192                 :             : parse_llvm_outputs (LlvmAsmContext &ctx);
     193                 :             : 
     194                 :             : void
     195                 :             : parse_llvm_inputs (LlvmAsmContext &ctx);
     196                 :             : 
     197                 :             : void
     198                 :             : parse_llvm_clobbers (LlvmAsmContext &ctx);
     199                 :             : 
     200                 :             : void
     201                 :             : parse_llvm_options (LlvmAsmContext &ctx);
     202                 :             : 
     203                 :             : WARN_UNUSED_RESULT tl::optional<AST::Fragment>
     204                 :             : parse_llvm_asm (location_t invoc_locus, AST::MacroInvocData &invoc,
     205                 :             :                 AST::InvocKind semicolon, AST::AsmKind is_global_asm);
     206                 :             : 
     207                 :             : } // namespace Rust
        

Generated by: LCOV version 2.1-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.