summaryrefslogtreecommitdiffstats
path: root/gcc/cp
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>1999-01-20 13:11:59 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>1999-01-20 13:11:59 +0000
commit477f2174aa38e8584926060ecdefb9cd8c6be28f (patch)
tree3ac0bc7867ca45fa2c558c4486cf8cdfdc93020d /gcc/cp
parente4600bc3330c9a9f93a74316a6c191cbe72f4ba7 (diff)
downloadppe42-gcc-477f2174aa38e8584926060ecdefb9cd8c6be28f.tar.gz
ppe42-gcc-477f2174aa38e8584926060ecdefb9cd8c6be28f.zip
* error.c (dump_function_decl): Don't print the argument types for
a function when the verbosity level is negative. * call.c (build_over_call): Check format attributes at call-time. * pt.c (tsubst_copy): Fix comment. (unify): Don't allow unification with variable-sized arrays. * semantics.c (finish_stmt_expr): When processing a template make the BIND_EXPR long-lived. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24788 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog13
-rw-r--r--gcc/cp/call.c4
-rw-r--r--gcc/cp/error.c17
-rw-r--r--gcc/cp/pt.c16
-rw-r--r--gcc/cp/semantics.c4
5 files changed, 45 insertions, 9 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 2b3a14f8c54..9b14cda2d53 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,16 @@
+1999-01-20 Mark Mitchell <mark@markmitchell.com>
+
+ * error.c (dump_function_decl): Don't print the argument types for
+ a function when the verbosity level is negative.
+
+ * call.c (build_over_call): Check format attributes at call-time.
+
+ * pt.c (tsubst_copy): Fix comment.
+ (unify): Don't allow unification with variable-sized arrays.
+
+ * semantics.c (finish_stmt_expr): When processing a template make
+ the BIND_EXPR long-lived.
+
1999-01-19 Jason Merrill <jason@yorick.cygnus.com>
* decl2.c (finish_vtable_vardecl): Make vtables comdat here.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index dd1f33b7e66..356a57d76ae 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -3364,6 +3364,10 @@ build_over_call (cand, args, flags)
converted_args = nreverse (converted_args);
+ if (warn_format && (DECL_NAME (fn) || DECL_ASSEMBLER_NAME (fn)))
+ check_function_format (DECL_NAME (fn), DECL_ASSEMBLER_NAME (fn),
+ converted_args);
+
/* Avoid actually calling copy constructors and copy assignment operators,
if possible. */
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index d5e28779825..fd3f5f50e4c 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -958,8 +958,9 @@ dump_decl (t, v)
}
/* Pretty printing for announce_function. T is the declaration of the
- function we are interested in seeing. V is non-zero if we should print
- the type that this function returns. */
+ function we are interested in seeing. If V is zero, we print the
+ argument types. If V is positive, we also print the return types.
+ If V is negative, we do not even print the argument types. */
static void
dump_function_decl (t, v)
@@ -985,9 +986,8 @@ dump_function_decl (t, v)
else if (TREE_CODE (fntype) == METHOD_TYPE)
cname = TREE_TYPE (TREE_VALUE (parmtypes));
- v = (v > 0);
-
- if (v)
+ /* Print the return type. */
+ if (v > 0)
{
if (DECL_STATIC_FUNCTION_P (t))
OB_PUTS ("static ");
@@ -1001,6 +1001,7 @@ dump_function_decl (t, v)
}
}
+ /* Print the function name. */
if (cname)
{
dump_type (cname, 0);
@@ -1021,7 +1022,11 @@ dump_function_decl (t, v)
parmtypes = TREE_CHAIN (parmtypes);
dump_function_name (t);
-
+
+ /* If V is negative, we don't print the argument types. */
+ if (v < 0)
+ return;
+
OB_PUTC ('(');
if (parmtypes)
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index ad0acaec2a1..0a675359d02 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -6329,7 +6329,7 @@ tsubst_copy (t, args, in_decl)
if (code == BIND_EXPR && !processing_template_decl)
{
- /* This processing should really occur in tsubst_expr,
+ /* This processing should really occur in tsubst_expr,
However, tsubst_expr does not recurse into expressions,
since it assumes that there aren't any statements
inside them. Instead, it simply calls
@@ -7504,6 +7504,20 @@ unify (tparms, targs, parm, arg, strict, explicit_mask)
return 0;
else if (targ)
return 1;
+
+ /* Make sure that ARG is not a variable-sized array. (Note that
+ were talking about variable-sized arrays (like `int[n]'),
+ rather than arrays of unknown size (like `int[]').) We'll
+ get very confused by such a type since the bound of the array
+ will not be computable in an instantiation. Besides, such
+ types are not allowed in ISO C++, so we can do as we please
+ here. */
+ if (TREE_CODE (arg) == ARRAY_TYPE
+ && !uses_template_parms (arg)
+ && (TREE_CODE (TYPE_MAX_VALUE (TYPE_DOMAIN (arg)))
+ != INTEGER_CST))
+ return 1;
+
TREE_VEC_ELT (targs, idx) = arg;
return 0;
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index e4d4371472d..fd6f3d0d490 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -809,8 +809,8 @@ finish_stmt_expr (rtl_expr, expr)
{
/* Make a BIND_EXPR for the BLOCK already made. */
if (processing_template_decl)
- result = build (BIND_EXPR, NULL_TREE,
- NULL_TREE, last_tree, expr);
+ result = build_min_nt (BIND_EXPR, NULL_TREE, last_tree,
+ NULL_TREE);
else
result = build (BIND_EXPR, TREE_TYPE (rtl_expr),
NULL_TREE, rtl_expr, expr);
OpenPOWER on IntegriCloud