Procházet zdrojové kódy

gcc: Parse string literals in pragmas.

* gcc-plugin/src/c-expr.y (STARPU_CPP_TOKENS): Add `CPP_STRING'.
  (YCPP_STRING): New token.
  (primary_expression): Add `string_literal'.
  (string_literal): New terminal.

* gcc-plugin/tests/register.c (main): Add `register' with a string
  literal.
Ludovic Courtès před 13 roky
rodič
revize
2e920317ab
2 změnil soubory, kde provedl 13 přidání a 2 odebrání
  1. 7 1
      gcc-plugin/src/c-expr.y
  2. 6 1
      gcc-plugin/tests/register.c

+ 7 - 1
gcc-plugin/src/c-expr.y

@@ -109,7 +109,8 @@
   TK (CPP_MULT)					\
   TK (CPP_DIV)					\
   TK (CPP_DOT)					\
-  TK (CPP_DEREF)
+  TK (CPP_DEREF)				\
+  TK (CPP_STRING)
 
 #ifndef __cplusplus
 
@@ -165,6 +166,7 @@
 %token YCPP_DIV "/"
 %token YCPP_DOT "."
 %token YCPP_DEREF "->"
+%token YCPP_STRING "string"
 
 %% /* Grammar rules.  */
 
@@ -248,10 +250,14 @@ postfix_expression:
 
 primary_expression: identifier
      | constant
+     | string_literal
      | YCPP_OPEN_PAREN expression YCPP_CLOSE_PAREN { $$ = $2; }
 ;
 
 constant: YCPP_NUMBER { $$ = $1; }
 ;
 
+string_literal: YCPP_STRING { $$ = $1; }
+;
+
 %%

+ 6 - 1
gcc-plugin/tests/register.c

@@ -172,7 +172,12 @@ main (int argc, char *argv[])
   expected_register_arguments.element_size = sizeof m3d[0];
 #pragma starpu register m3d
 
-  assert (data_register_calls == 17);
+  expected_register_arguments.pointer = "hello";
+  expected_register_arguments.elements = sizeof "hello";
+  expected_register_arguments.element_size = 1;
+#pragma starpu register "hello"
+
+  assert (data_register_calls == 18);
 
   free (y);