diff options
author | Paolo Carlini <paolo@gcc.gnu.org> | 2013-06-17 14:06:36 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2013-06-17 14:06:36 +0000 |
commit | a0e33cbcd8966627b6a9d88b14e4ad9efccc97b4 (patch) | |
tree | 871573df716029e6d815928e435e60f2d3d7dd9d | |
parent | 617e128198c4cf0804a21f404a014674c39d1cfe (diff) | |
download | gcc-a0e33cbcd8966627b6a9d88b14e4ad9efccc97b4.zip gcc-a0e33cbcd8966627b6a9d88b14e4ad9efccc97b4.tar.gz gcc-a0e33cbcd8966627b6a9d88b14e4ad9efccc97b4.tar.bz2 |
re PR c++/16128 (Diagnostic of missing argument list within functions)
/cp
2013-06-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/16128
* parser.c (cp_parser_expression_statement): Check whether
cp_parser_expression returns error_mark_node.
/testsuite
2013-06-17 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/16128
* g++.dg/template/error52.C: New.
* g++.dg/lookup/friend15.C: Update.
* g++.dg/parse/error11.C: Likewise.
* g++.dg/parse/error14.C: Likewise.
* g++.dg/parse/parser-pr28152-2.C: Likewise.
* g++.dg/parse/template25.C: Likewise.
* g++.old-deja/g++.jason/cond.C: Likewise.
* g++.old-deja/g++.mike/for2.C: Likewise.
* g++.old-deja/g++.robertl/eb125.C: Likewise.
* obj-c++.dg/property/dotsyntax-4.mm: Likewise.
From-SVN: r200150
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 16 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/lookup/friend15.C | 1 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/error11.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/error14.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/parser-pr28152-2.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/parser-pr28152.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/template25.C | 1 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/error52.C | 19 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.jason/cond.C | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.mike/for2.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.robertl/eb125.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/obj-c++.dg/property/dotsyntax-4.mm | 2 |
14 files changed, 57 insertions, 23 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1ffeed3..b6caf70 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-06-17 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/16128 + * parser.c (cp_parser_expression_statement): Check whether + cp_parser_expression returns error_mark_node. + 2013-06-14 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51413 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index a581e88..d844d15 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -9264,7 +9264,15 @@ cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr) /* If the next token is a ';', then there is no expression statement. */ if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) - statement = cp_parser_expression (parser, /*cast_p=*/false, NULL); + { + statement = cp_parser_expression (parser, /*cast_p=*/false, NULL); + if (statement == error_mark_node + && !cp_parser_uncommitted_to_tentative_parse_p (parser)) + { + cp_parser_skip_to_end_of_block_or_statement (parser); + return error_mark_node; + } + } /* Give a helpful message for "A<T>::type t;" and the like. */ if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0d6f498..147ae19 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,17 @@ +2013-06-17 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/16128 + * g++.dg/template/error52.C: New. + * g++.dg/lookup/friend15.C: Update. + * g++.dg/parse/error11.C: Likewise. + * g++.dg/parse/error14.C: Likewise. + * g++.dg/parse/parser-pr28152-2.C: Likewise. + * g++.dg/parse/template25.C: Likewise. + * g++.old-deja/g++.jason/cond.C: Likewise. + * g++.old-deja/g++.mike/for2.C: Likewise. + * g++.old-deja/g++.robertl/eb125.C: Likewise. + * obj-c++.dg/property/dotsyntax-4.mm: Likewise. + 2013-06-17 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * gcc.target/arm/unaligned-memcpy-2.c (dest): Initialize to @@ -5,7 +19,7 @@ 2013-06-16 Balaji V. Iyer <balaji.v.iyer@intel.com> - * c-c++-common/cilk-plus/AN/if_test.c (main2): Fixed a bug of + * c-c++-common/cilk-plus/AN/if_test.c (main2): Fixed a bug of accidentally placing minus sign for length instead of stride. 2013-06-16 Joern Rennecke <joern.rennecke@embecosm.com> diff --git a/gcc/testsuite/g++.dg/lookup/friend15.C b/gcc/testsuite/g++.dg/lookup/friend15.C index 1e271fc..e05cc55 100644 --- a/gcc/testsuite/g++.dg/lookup/friend15.C +++ b/gcc/testsuite/g++.dg/lookup/friend15.C @@ -8,5 +8,4 @@ void foo() friend class B; }; B::B() {} // { dg-error "has not been declared" } -// { dg-error "expected" "expected" { target *-*-* } 10 } } diff --git a/gcc/testsuite/g++.dg/parse/error11.C b/gcc/testsuite/g++.dg/parse/error11.C index ec0058e..6e42ed8 100644 --- a/gcc/testsuite/g++.dg/parse/error11.C +++ b/gcc/testsuite/g++.dg/parse/error11.C @@ -53,18 +53,16 @@ void func(void) // { dg-error "6:missing template arguments before" "template" { target *-*-* } { 51 } } // { dg-error "9:expected primary-expression before ':' token" "primary" { target *-*-* } 51 } // { dg-error "9:expected '\]' before ':' token" "backslash" { target *-*-* } 51 } -// { dg-error "9:expected ';' before ':' token" "semicolon" { target *-*-* } 51 } // { dg-error "6:missing template arguments before" "template" { target *-*-* } 52 } // { dg-error "7:expected primary-expression before ':' token" "primary" { target *-*-* } 52 } // { dg-error "7:expected '\]' before ':' token" "backslash" { target *-*-* } 52 } -// { dg-error "7:expected ';' before ':' token" "semicolon" { target *-*-* } 52 } // int Foo[2]; Foo[::value] = 0; } template struct Foo<::B>; // { dg-error "20:'<::' cannot begin" "begin" { target c++98 } } -// { dg-message "20:is an alternate" "alt" { target c++98 } 66 } +// { dg-message "20:is an alternate" "alt" { target c++98 } 64 } // On the first error message, an additional note about the use of // -fpermissive should be present diff --git a/gcc/testsuite/g++.dg/parse/error14.C b/gcc/testsuite/g++.dg/parse/error14.C index 04f2f56..37a3d20 100644 --- a/gcc/testsuite/g++.dg/parse/error14.C +++ b/gcc/testsuite/g++.dg/parse/error14.C @@ -22,5 +22,3 @@ struct X }; // { dg-error "2:expected '.' at end of input" "at end of input" } // { dg-error "1:expected primary-expression before '.' token" "primary" { target *-*-* } 22 } // { dg-error "1:expected unqualified-id" "unqualified-id" { target *-*-* } 22 } - // { dg-error "1:expected ';' before '.' token" "function" { target *-*-* } 22 } - diff --git a/gcc/testsuite/g++.dg/parse/parser-pr28152-2.C b/gcc/testsuite/g++.dg/parse/parser-pr28152-2.C index a5bbb92..c6bc5d3 100644 --- a/gcc/testsuite/g++.dg/parse/parser-pr28152-2.C +++ b/gcc/testsuite/g++.dg/parse/parser-pr28152-2.C @@ -7,7 +7,5 @@ main (void) __complex__ float z; z = __complex__ (1.90000007326203904e+19, 0.0); // { dg-error "expected primary-expression before '__complex__'" "primary-expression" } - // { dg-error "expected .;. before .__complex__." "semicolon" { target *-*-* } 9 } z = __complex__ (1.0e+0, 0.0) / z; // { dg-error "expected primary-expression before '__complex__'" "primaty-expression" } - // { dg-error "expected .;. before '__complex__'" "semicolon" { target *-*-* } 11 } - // { dg-error "at end of input" "end" { target *-*-* } 11 } + // { dg-error "at end of input" "end" { target *-*-* } 10 } diff --git a/gcc/testsuite/g++.dg/parse/parser-pr28152.C b/gcc/testsuite/g++.dg/parse/parser-pr28152.C index 4a7c77e..4d08fd0 100644 --- a/gcc/testsuite/g++.dg/parse/parser-pr28152.C +++ b/gcc/testsuite/g++.dg/parse/parser-pr28152.C @@ -7,7 +7,5 @@ main (void) _Complex float z; z = _Complex (1.90000007326203904e+19, 0.0); // { dg-error "expected primary-expression before '_Complex'" "primary-expression" } - // { dg-error "expected .;. before ._Complex." "semicolon" { target *-*-* } 9 } z = _Complex (1.0e+0, 0.0) / z; // { dg-error "expected primary-expression before '_Complex'" "primary-expression" } - // { dg-error "expected .;. before '_Complex'" "semicolon" { target *-*-* } 11 } - // { dg-error "at end of input" "end" { target *-*-* } 11 } + // { dg-error "at end of input" "end" { target *-*-* } 10 } diff --git a/gcc/testsuite/g++.dg/parse/template25.C b/gcc/testsuite/g++.dg/parse/template25.C index 0da3887..03017ab 100644 --- a/gcc/testsuite/g++.dg/parse/template25.C +++ b/gcc/testsuite/g++.dg/parse/template25.C @@ -10,5 +10,4 @@ void f(void) void g(void) { template f<int>(); /* { dg-error "expected primary-expression" "primary-expression" } */ - /* { dg-error "expected ';'" "semicolon" { target *-*-* } 12 } */ } diff --git a/gcc/testsuite/g++.dg/template/error52.C b/gcc/testsuite/g++.dg/template/error52.C new file mode 100644 index 0000000..3350c8e --- /dev/null +++ b/gcc/testsuite/g++.dg/template/error52.C @@ -0,0 +1,19 @@ +// PR c++/16128 + +template<typename T> +struct A { + }; + +namespace H { + template<typename T> + struct B {}; + } + +A a; // { dg-error "template" } +H::B b; // { dg-error "template" } + +int main() { + A a; // { dg-error "template" } + H::B b; // { dg-error "template" } + return 0; + } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/cond.C b/gcc/testsuite/g++.old-deja/g++.jason/cond.C index 925d863..605500e 100644 --- a/gcc/testsuite/g++.old-deja/g++.jason/cond.C +++ b/gcc/testsuite/g++.old-deja/g++.jason/cond.C @@ -37,10 +37,9 @@ int main() ; A bar; // { dg-error "not declared" "decl" } - // { dg-error "expected" "exp" { target *-*-* } 39 } if (enum A { one, two, three } foo = one) // { dg-error "defined" "def" } - // { dg-error "not declared" "expected" { target *-*-* } 42 } + // { dg-error "not declared" "expected" { target *-*-* } 41 } ; struct B { operator int () { return 2; } }; @@ -49,7 +48,7 @@ int main() ; if (int f () = 1) // { dg-warning "extern" "extern" } - // { dg-error "is initialized like a variable" "var" { target *-*-* } 51 } + // { dg-error "is initialized like a variable" "var" { target *-*-* } 50 } ; if (int a[2] = {1, 2}) // { dg-error "extended init" "" { target c++98 } } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/for2.C b/gcc/testsuite/g++.old-deja/g++.mike/for2.C index 42e6baa..9c20117 100644 --- a/gcc/testsuite/g++.old-deja/g++.mike/for2.C +++ b/gcc/testsuite/g++.old-deja/g++.mike/for2.C @@ -4,19 +4,17 @@ void foo() { for (class C {};;) ; C c; // { dg-error "declared" "decl" } - // { dg-error "expected" "exp" { target *-*-* } 6 } } void bar() { for (enum E {num};;) ; E e; // { dg-error "declared" "decl" } - // { dg-error "expected" "exp" { target *-*-* } 13 } } void bee () { int i = 0; for (int fun() = 0; i != 2; ++i) { // { dg-warning "extern" "extern" } - // { dg-error "initialized" "init" { target *-*-* } 19 } + // { dg-error "initialized" "init" { target *-*-* } 17 } } } diff --git a/gcc/testsuite/g++.old-deja/g++.robertl/eb125.C b/gcc/testsuite/g++.old-deja/g++.robertl/eb125.C index f2352c2..d66dbd8 100644 --- a/gcc/testsuite/g++.old-deja/g++.robertl/eb125.C +++ b/gcc/testsuite/g++.old-deja/g++.robertl/eb125.C @@ -16,7 +16,7 @@ class test_square template <class BOX> void test(BOX *the_box) {x // { dg-error "not declared in this scope" } - the_box->print(); // { dg-error "before" } + the_box->print(); } template void test<> (test_box *); diff --git a/gcc/testsuite/obj-c++.dg/property/dotsyntax-4.mm b/gcc/testsuite/obj-c++.dg/property/dotsyntax-4.mm index 2e918d2..f3292ec 100644 --- a/gcc/testsuite/obj-c++.dg/property/dotsyntax-4.mm +++ b/gcc/testsuite/obj-c++.dg/property/dotsyntax-4.mm @@ -35,7 +35,7 @@ int main (void) abort (); MyRootClass.int; /* { dg-error "expected identifier" } */ - /* { dg-error "expected" "" { target *-*-* } 37 } */ + if (MyRootClass.int) /* { dg-error "expected identifier" } */ /* { dg-error "expected" "" { target *-*-* } 39 } */ abort (); |