2014-04-10 Jakub Jelinek <jakub@redhat.com>
Backport from mainline
+ 2014-03-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/60689
+ * c-common.c (add_atomic_size_parameter): When creating new
+ params vector, push the size argument first.
+
2014-03-22 Jakub Jelinek <jakub@redhat.com>
PR debug/60603
len = params->length ();
vec_alloc (v, len + 1);
+ v->quick_push (build_int_cst (size_type_node, n));
for (z = 0; z < len; z++)
v->quick_push ((*params)[z]);
f = build_function_call_vec (loc, function, v, NULL);
+2014-04-10 Jakub Jelinek <jakub@redhat.com>
+
+ Backport from mainline
+ 2014-03-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/60689
+ * c-tree.h (c_build_function_call_vec): New prototype.
+ * c-typeck.c (build_function_call_vec): Don't call
+ resolve_overloaded_builtin here.
+ (c_build_function_call_vec): New wrapper function around
+ build_function_call_vec. Call resolve_overloaded_builtin here.
+ (convert_lvalue_to_rvalue, build_function_call, build_atomic_assign):
+ Call c_build_function_call_vec instead of build_function_call_vec.
+ * c-parser.c (c_parser_postfix_expression_after_primary): Likewise.
+ * c-decl.c (finish_decl): Likewise.
+
2014-01-23 Jakub Jelinek <jakub@redhat.com>
PR middle-end/58809
cleanup = build_unary_op (input_location, ADDR_EXPR, decl, 0);
vec_alloc (v, 1);
v->quick_push (cleanup);
- cleanup = build_function_call_vec (DECL_SOURCE_LOCATION (decl),
- cleanup_decl, v, NULL);
+ cleanup = c_build_function_call_vec (DECL_SOURCE_LOCATION (decl),
+ cleanup_decl, v, NULL);
vec_free (v);
/* Don't warn about decl unused; the cleanup uses it. */
sizeof_ptr_memacc_comptypes);
/* FIXME diagnostics: Ideally we want the FUNCNAME, not the
"(" after the FUNCNAME, which is what we have now. */
- expr.value = build_function_call_vec (op_loc, expr.value, exprlist,
- origtypes);
+ expr.value = c_build_function_call_vec (op_loc, expr.value, exprlist,
+ origtypes);
expr.original_code = ERROR_MARK;
if (TREE_CODE (expr.value) == INTEGER_CST
&& TREE_CODE (orig_expr.value) == FUNCTION_DECL
extern tree c_finish_omp_clauses (tree);
extern tree c_build_va_arg (location_t, tree, tree);
extern tree c_finish_transaction (location_t, tree, int);
+extern tree c_build_function_call_vec (location_t, tree, vec<tree, va_gc> *,
+ vec<tree, va_gc> *);
/* Set to 0 at beginning of a function definition, set to 1 if
a return statement that specifies a return value is seen. */
vec_alloc (v, list_length (params));
for (; params; params = TREE_CHAIN (params))
v->quick_push (TREE_VALUE (params));
- ret = build_function_call_vec (loc, function, v, NULL);
+ ret = c_build_function_call_vec (loc, function, v, NULL);
vec_free (v);
return ret;
}
/* Convert anything with function type to a pointer-to-function. */
if (TREE_CODE (function) == FUNCTION_DECL)
{
- /* Implement type-directed function overloading for builtins.
- resolve_overloaded_builtin and targetm.resolve_overloaded_builtin
- handle all the type checking. The result is a complete expression
- that implements this function call. */
- tem = resolve_overloaded_builtin (loc, function, params);
- if (tem)
- return tem;
-
name = DECL_NAME (function);
if (flag_tm)
}
return require_complete_type (result);
}
+
+/* Like build_function_call_vec, but call also resolve_overloaded_builtin. */
+
+tree
+c_build_function_call_vec (location_t loc, tree function,
+ vec<tree, va_gc> *params,
+ vec<tree, va_gc> *origtypes)
+{
+ /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */
+ STRIP_TYPE_NOPS (function);
+
+ /* Convert anything with function type to a pointer-to-function. */
+ if (TREE_CODE (function) == FUNCTION_DECL)
+ {
+ /* Implement type-directed function overloading for builtins.
+ resolve_overloaded_builtin and targetm.resolve_overloaded_builtin
+ handle all the type checking. The result is a complete expression
+ that implements this function call. */
+ tree tem = resolve_overloaded_builtin (loc, function, params);
+ if (tem)
+ return tem;
+ }
+ return build_function_call_vec (loc, function, params, origtypes);
+}
\f
/* Convert the argument expressions in the vector VALUES
to the types in the list TYPELIST.
2014-04-10 Jakub Jelinek <jakub@redhat.com>
Backport from mainline
+ 2014-03-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/60689
+ * c-c++-common/pr60689.c: New test.
+
2014-03-22 Jakub Jelinek <jakub@redhat.com>
PR debug/60603
--- /dev/null
+/* PR c++/60689 */
+/* { dg-do compile } */
+
+struct S { char x[9]; };
+
+void
+foo (struct S *x, struct S *y, struct S *z)
+{
+ __atomic_exchange (x, y, z, __ATOMIC_SEQ_CST);
+}