This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][CilkPlus] Allow parenthesized initialization in for-loops


On 05/10/2016 03:28 PM, Ilya Verbin wrote:
What about (some_class i { 0 }; some_class < ...; some_class++)
and similar syntax?

It's allowed, thanks, I missed this in the initial patch.

The testsuite coverage is insufficient (nothing e.g.
tests templates or #pragma simd).

Patch is updated.  Is it sufficient now?

-		  if (!CLASS_TYPE_P (TREE_TYPE (decl))
-		      && !type_dependent_expression_p (decl))
+		  if (!is_class && !type_dependent_expression_p (decl))
 		    goto non_class;
 		}
-		
+
 	      cp_finish_decl (decl, init, !is_non_constant_init,
 			      asm_specification,
 			      LOOKUP_ONLYCONVERTING);
 	      orig_init = init;
-	      if (CLASS_TYPE_P (TREE_TYPE (decl)))
+	      if (is_class)

This change is wrong; do_auto_deduction will have changed TREE_TYPE (decl), so it could be a class now.

+	  else if (is_cilk && next_is_op_paren)
+	    {
+	      cp_parser_require (parser, CPP_OPEN_PAREN, RT_OPEN_PAREN);
+	      init = cp_parser_assignment_expression (parser);
+	      cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN);
+	      goto non_class;
+	    }
+	  else if (is_cilk && next_is_eq)
+	    {
+	      bool braced = false;
+	      cp_parser_require (parser, CPP_EQ, RT_EQ);
+	      if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
+		{
+		  braced = true;
+		  cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
+		}
+	      init = cp_parser_assignment_expression (parser);
+	      if (braced)
+		cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+	      goto non_class;
+	    }
+	  else if (is_cilk && next_is_op_brace)
+	    {
+	      cp_lexer_set_source_position (parser->lexer);
+	      maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
+	      cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE);
+	      init = cp_parser_assignment_expression (parser);
+	      cp_parser_require (parser, CPP_CLOSE_BRACE, RT_CLOSE_BRACE);
+	      goto non_class;
+	    }

Why not use cp_parser_initializer for scalars?

Jason


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]