aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-09-15 19:55:49 -0400
committerJason Merrill <jason@gcc.gnu.org>2010-09-15 19:55:49 -0400
commitda9bc840f694868fa1e84ef6a92ebc79b1faa64a (patch)
treea15bb5fd5e4c1115cb39973c87db55fe2e713b48 /gcc
parent441b624e3d4b2be01deaf8156bd5ea2b39849259 (diff)
downloadgcc-da9bc840f694868fa1e84ef6a92ebc79b1faa64a.zip
gcc-da9bc840f694868fa1e84ef6a92ebc79b1faa64a.tar.gz
gcc-da9bc840f694868fa1e84ef6a92ebc79b1faa64a.tar.bz2
semantics.c (finish_id_expression): Diagnose use of function parms in evaluated context outside function body.
* semantics.c (finish_id_expression): Diagnose use of function parms in evaluated context outside function body. From-SVN: r164322
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/semantics.c10
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/parse/parameter-declaration-2.C1
4 files changed, 16 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 10630c2..c412f0c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2010-09-15 Jason Merrill <jason@redhat.com>
+ * semantics.c (finish_id_expression): Diagnose use of function
+ parms in evaluated context outside function body.
+
* decl2.c (grokbitfield): Diagnose non-integral width.
* call.c (convert_like_real): Use the underlying type of the
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index dc81568..b73dffb 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -2864,6 +2864,16 @@ finish_id_expression (tree id_expression,
return error_mark_node;
}
}
+
+ /* Also disallow uses of function parameters outside the function
+ body, except inside an unevaluated context (i.e. decltype). */
+ if (TREE_CODE (decl) == PARM_DECL
+ && DECL_CONTEXT (decl) == NULL_TREE
+ && !cp_unevaluated_operand)
+ {
+ error ("use of parameter %qD outside function body", decl);
+ return error_mark_node;
+ }
}
/* If we didn't find anything, or what we found was a type,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 486c945..e41832b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,7 @@
2010-09-15 Jason Merrill <jason@redhat.com>
+ * g++.dg/parse/parameter-declaration-2.C: New.
+
* g++.dg/cpp0x/scoped_enum2.C: New.
2010-09-15 Eric Botcazou <ebotcazou@adacore.com>
diff --git a/gcc/testsuite/g++.dg/parse/parameter-declaration-2.C b/gcc/testsuite/g++.dg/parse/parameter-declaration-2.C
new file mode 100644
index 0000000..7a9a24f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/parameter-declaration-2.C
@@ -0,0 +1 @@
+void f (int i, int p[i]); // { dg-error "use of parameter .i. outside function body" }