]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/cp/parser.c
Merge in trunk.
[thirdparty/gcc.git] / gcc / cp / parser.c
index 06d779698f4d5fc8281dc47cbff088d4ae7eb680..e4f77e8d68c0a7d2484d57ea6e962a5630bbfeb8 100644 (file)
@@ -29133,6 +29133,9 @@ cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok,
            cclauses = cclauses_buf;
 
          cp_lexer_consume_token (parser->lexer);
+         if (!flag_openmp)  /* flag_openmp_simd  */
+           return cp_parser_omp_simd (parser, pragma_tok, p_name, mask,
+                                      cclauses);
          sb = begin_omp_structured_block ();
          save = cp_parser_begin_omp_structured_block (parser);
          ret = cp_parser_omp_simd (parser, pragma_tok, p_name, mask,
@@ -29150,6 +29153,11 @@ cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok,
          return ret;
        }
     }
+  if (!flag_openmp)  /* flag_openmp_simd  */
+    {
+      cp_parser_require_pragma_eol (parser, pragma_tok);
+      return NULL_TREE;
+    }
 
   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok,
                                       cclauses == NULL);
@@ -29333,6 +29341,8 @@ cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok,
        cclauses = cclauses_buf;
 
       cp_lexer_consume_token (parser->lexer);
+      if (!flag_openmp)  /* flag_openmp_simd  */
+       return cp_parser_omp_for (parser, pragma_tok, p_name, mask, cclauses);
       block = begin_omp_parallel ();
       save = cp_parser_begin_omp_structured_block (parser);
       cp_parser_omp_for (parser, pragma_tok, p_name, mask, cclauses);
@@ -29348,6 +29358,11 @@ cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok,
       cp_parser_skip_to_pragma_eol (parser, pragma_tok);
       return NULL_TREE;
     }
+  else if (!flag_openmp)  /* flag_openmp_simd  */
+    {
+      cp_parser_require_pragma_eol (parser, pragma_tok);
+      return NULL_TREE;
+    }
   else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
     {
       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
@@ -29576,6 +29591,15 @@ cp_parser_omp_distribute (cp_parser *parser, cp_token *pragma_tok,
          if (cclauses == NULL)
            cclauses = cclauses_buf;
          cp_lexer_consume_token (parser->lexer);
+         if (!flag_openmp)  /* flag_openmp_simd  */
+           {
+             if (simd)
+               return cp_parser_omp_simd (parser, pragma_tok, p_name, mask,
+                                          cclauses);
+             else
+               return cp_parser_omp_parallel (parser, pragma_tok, p_name, mask,
+                                              cclauses);
+           }
          sb = begin_omp_structured_block ();
          save = cp_parser_begin_omp_structured_block (parser);
          if (simd)
@@ -29597,6 +29621,11 @@ cp_parser_omp_distribute (cp_parser *parser, cp_token *pragma_tok,
          return ret;
        }
     }
+  if (!flag_openmp)  /* flag_openmp_simd  */
+    {
+      cp_parser_require_pragma_eol (parser, pragma_tok);
+      return NULL_TREE;
+    }
 
   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok,
                                       cclauses == NULL);
@@ -29652,6 +29681,9 @@ cp_parser_omp_teams (cp_parser *parser, cp_token *pragma_tok,
            cclauses = cclauses_buf;
 
          cp_lexer_consume_token (parser->lexer);
+         if (!flag_openmp)  /* flag_openmp_simd  */
+           return cp_parser_omp_distribute (parser, pragma_tok, p_name, mask,
+                                            cclauses);
          sb = begin_omp_structured_block ();
          save = cp_parser_begin_omp_structured_block (parser);
          ret = cp_parser_omp_distribute (parser, pragma_tok, p_name, mask,
@@ -29668,6 +29700,11 @@ cp_parser_omp_teams (cp_parser *parser, cp_token *pragma_tok,
          return add_stmt (ret);
        }
     }
+  if (!flag_openmp)  /* flag_openmp_simd  */
+    {
+      cp_parser_require_pragma_eol (parser, pragma_tok);
+      return NULL_TREE;
+    }
 
   clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok,
                                       cclauses == NULL);
@@ -29777,18 +29814,7 @@ cp_parser_omp_target (cp_parser *parser, cp_token *pragma_tok,
       tree id = cp_lexer_peek_token (parser->lexer)->u.value;
       const char *p = IDENTIFIER_POINTER (id);
 
-      if (strcmp (p, "data") == 0)
-       {
-         cp_lexer_consume_token (parser->lexer);
-         cp_parser_omp_target_data (parser, pragma_tok);
-         return true;
-       }
-      else if (strcmp (p, "update") == 0)
-       {
-         cp_lexer_consume_token (parser->lexer);
-         return cp_parser_omp_target_update (parser, pragma_tok, context);
-       }
-      else if (strcmp (p, "teams") == 0)
+      if (strcmp (p, "teams") == 0)
        {
          tree cclauses[C_OMP_CLAUSE_SPLIT_COUNT];
          char p_name[sizeof ("#pragma omp target teams distribute "
@@ -29797,6 +29823,9 @@ cp_parser_omp_target (cp_parser *parser, cp_token *pragma_tok,
          cp_lexer_consume_token (parser->lexer);
          strcpy (p_name, "#pragma omp target");
          keep_next_level (true);
+         if (!flag_openmp)  /* flag_openmp_simd  */
+           return cp_parser_omp_teams (parser, pragma_tok, p_name,
+                                       OMP_TARGET_CLAUSE_MASK, cclauses);
          tree sb = begin_omp_structured_block ();
          unsigned save = cp_parser_begin_omp_structured_block (parser);
          tree ret = cp_parser_omp_teams (parser, pragma_tok, p_name,
@@ -29812,6 +29841,22 @@ cp_parser_omp_target (cp_parser *parser, cp_token *pragma_tok,
          add_stmt (stmt);
          return true;
        }
+      else if (!flag_openmp)  /* flag_openmp_simd  */
+       {
+         cp_parser_require_pragma_eol (parser, pragma_tok);
+         return NULL_TREE;
+       }
+      else if (strcmp (p, "data") == 0)
+       {
+         cp_lexer_consume_token (parser->lexer);
+         cp_parser_omp_target_data (parser, pragma_tok);
+         return true;
+       }
+      else if (strcmp (p, "update") == 0)
+       {
+         cp_lexer_consume_token (parser->lexer);
+         return cp_parser_omp_target_update (parser, pragma_tok, context);
+       }
     }
 
   tree stmt = make_node (OMP_TARGET);
@@ -30411,6 +30456,11 @@ cp_parser_omp_declare (cp_parser *parser, cp_token *pragma_tok,
                                           context);
          return;
        }
+      if (!flag_openmp)  /* flag_openmp_simd  */
+       {
+         cp_parser_require_pragma_eol (parser, pragma_tok);
+         return;
+       }
       if (strcmp (p, "target") == 0)
        {
          cp_lexer_consume_token (parser->lexer);