diff options
author | Jason Merrill <jason@redhat.com> | 2010-09-15 19:55:49 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2010-09-15 19:55:49 -0400 |
commit | da9bc840f694868fa1e84ef6a92ebc79b1faa64a (patch) | |
tree | a15bb5fd5e4c1115cb39973c87db55fe2e713b48 /gcc | |
parent | 441b624e3d4b2be01deaf8156bd5ea2b39849259 (diff) | |
download | gcc-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/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/parameter-declaration-2.C | 1 |
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" } |