On Wed, Dec 18, 2013 at 11:36:04PM +0000, Iyer, Balaji V wrote: > --- a/gcc/cp/decl2.c > +++ b/gcc/cp/decl2.c > @@ -1124,6 +1124,10 @@ is_late_template_attribute (tree attr, tree decl) > && is_attribute_p ("omp declare simd", name)) > return true; > > + /* Ditto as above for Cilk Plus SIMD-enabled function attributes. */ > + if (flag_enable_cilkplus && is_attribute_p ("cilk simd function", name)) > + return true;
Why? It doesn't have any argument, why it should be processed late? > @@ -17097,6 +17102,14 @@ cp_parser_direct_declarator (cp_parser* parser, > > attrs = cp_parser_std_attribute_spec_seq (parser); > > + /* In here, we handle cases where attribute is used after > + the function declaration. For example: > + void func (int x) __attribute__((vector(..))); */ > + if (flag_enable_cilkplus > + && cp_lexer_next_token_is_keyword (parser->lexer, > + RID_ATTRIBUTE)) > + attrs = chainon (cp_parser_gnu_attributes_opt (parser), > + attrs); > late_return = (cp_parser_late_return_type_opt > (parser, declarator, > memfn ? cv_quals : -1)); Doesn't this change the grammar (for all attributes, not just Cilk+ specific ones) just based on whether -fcilkplus has been specified or not? > @@ -17820,10 +17833,14 @@ cp_parser_late_return_type_opt (cp_parser* parser, > cp_declarator *declarator, > && declarator > && declarator->kind == cdk_id); > > + bool cilk_simd_fn_vector_p = (parser->cilk_simd_fn_info > + && declarator > + && declarator->kind == cdk_id); Formatting looks wrong, put = on the next line and align && right below parser. > + > +cp_omp_declare_simd_data info; Global var? Why? Isn't heap or GC allocation better? > + /* The vectorlength clause in #pragma simdbehaves exactly like OpenMP's Missing space after simd > @@ -8602,9 +8602,12 @@ apply_late_template_attributes (tree *decl_p, tree > attributes, int attr_flags, > { > *p = TREE_CHAIN (t); > TREE_CHAIN (t) = NULL_TREE; > - if (flag_openmp > - && is_attribute_p ("omp declare simd", > - get_attribute_name (t)) > + if (((flag_openmp > + && is_attribute_p ("omp declare simd", > + get_attribute_name (t))) > + || (flag_enable_cilkplus > + && is_attribute_p ("cilk simd function", > + get_attribute_name (t)))) Again, why this? Jakub