Commit a0e33cbc by Paolo Carlini

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
parent 617e1281
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> 2013-06-14 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51413 PR c++/51413
......
...@@ -9264,7 +9264,15 @@ cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr) ...@@ -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 /* If the next token is a ';', then there is no expression
statement. */ statement. */
if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)) 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. */ /* Give a helpful message for "A<T>::type t;" and the like. */
if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON) if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
......
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> 2013-06-17 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* gcc.target/arm/unaligned-memcpy-2.c (dest): Initialize to * gcc.target/arm/unaligned-memcpy-2.c (dest): Initialize to
...@@ -5,7 +19,7 @@ ...@@ -5,7 +19,7 @@
2013-06-16 Balaji V. Iyer <balaji.v.iyer@intel.com> 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. accidentally placing minus sign for length instead of stride.
2013-06-16 Joern Rennecke <joern.rennecke@embecosm.com> 2013-06-16 Joern Rennecke <joern.rennecke@embecosm.com>
......
...@@ -8,5 +8,4 @@ void foo() ...@@ -8,5 +8,4 @@ void foo()
friend class B; friend class B;
}; };
B::B() {} // { dg-error "has not been declared" } B::B() {} // { dg-error "has not been declared" }
// { dg-error "expected" "expected" { target *-*-* } 10 }
} }
...@@ -53,18 +53,16 @@ void func(void) ...@@ -53,18 +53,16 @@ void func(void)
// { dg-error "6:missing template arguments before" "template" { target *-*-* } { 51 } } // { 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 primary-expression before ':' token" "primary" { target *-*-* } 51 }
// { dg-error "9:expected '\]' before ':' token" "backslash" { 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 "6:missing template arguments before" "template" { target *-*-* } 52 }
// { dg-error "7:expected primary-expression before ':' token" "primary" { 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" "backslash" { target *-*-* } 52 }
// { dg-error "7:expected ';' before ':' token" "semicolon" { target *-*-* } 52 }
// //
int Foo[2]; int Foo[2];
Foo[::value] = 0; Foo[::value] = 0;
} }
template struct Foo<::B>; // { dg-error "20:'<::' cannot begin" "begin" { target c++98 } } 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 // On the first error message, an additional note about the use of
// -fpermissive should be present // -fpermissive should be present
......
...@@ -22,5 +22,3 @@ struct X ...@@ -22,5 +22,3 @@ struct X
}; // { dg-error "2:expected '.' at end of input" "at end of input" } }; // { 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 primary-expression before '.' token" "primary" { target *-*-* } 22 }
// { dg-error "1:expected unqualified-id" "unqualified-id" { target *-*-* } 22 } // { dg-error "1:expected unqualified-id" "unqualified-id" { target *-*-* } 22 }
// { dg-error "1:expected ';' before '.' token" "function" { target *-*-* } 22 }
...@@ -7,7 +7,5 @@ main (void) ...@@ -7,7 +7,5 @@ main (void)
__complex__ float z; __complex__ float z;
z = __complex__ (1.90000007326203904e+19, 0.0); // { dg-error "expected primary-expression before '__complex__'" "primary-expression" } 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" } 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 *-*-* } 10 }
// { dg-error "at end of input" "end" { target *-*-* } 11 }
...@@ -7,7 +7,5 @@ main (void) ...@@ -7,7 +7,5 @@ main (void)
_Complex float z; _Complex float z;
z = _Complex (1.90000007326203904e+19, 0.0); // { dg-error "expected primary-expression before '_Complex'" "primary-expression" } 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" } 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 *-*-* } 10 }
// { dg-error "at end of input" "end" { target *-*-* } 11 }
...@@ -10,5 +10,4 @@ void f(void) ...@@ -10,5 +10,4 @@ void f(void)
void g(void) void g(void)
{ {
template f<int>(); /* { dg-error "expected primary-expression" "primary-expression" } */ template f<int>(); /* { dg-error "expected primary-expression" "primary-expression" } */
/* { dg-error "expected ';'" "semicolon" { target *-*-* } 12 } */
} }
// 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;
}
...@@ -37,10 +37,9 @@ int main() ...@@ -37,10 +37,9 @@ int main()
; ;
A bar; // { dg-error "not declared" "decl" } 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" } 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; } }; struct B { operator int () { return 2; } };
...@@ -49,7 +48,7 @@ int main() ...@@ -49,7 +48,7 @@ int main()
; ;
if (int f () = 1) // { dg-warning "extern" "extern" } 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 } } if (int a[2] = {1, 2}) // { dg-error "extended init" "" { target c++98 } }
......
...@@ -4,19 +4,17 @@ void foo() { ...@@ -4,19 +4,17 @@ void foo() {
for (class C {};;) for (class C {};;)
; ;
C c; // { dg-error "declared" "decl" } C c; // { dg-error "declared" "decl" }
// { dg-error "expected" "exp" { target *-*-* } 6 }
} }
void bar() { void bar() {
for (enum E {num};;) for (enum E {num};;)
; ;
E e; // { dg-error "declared" "decl" } E e; // { dg-error "declared" "decl" }
// { dg-error "expected" "exp" { target *-*-* } 13 }
} }
void bee () { void bee () {
int i = 0; int i = 0;
for (int fun() = 0; i != 2; ++i) { // { dg-warning "extern" "extern" } for (int fun() = 0; i != 2; ++i) { // { dg-warning "extern" "extern" }
// { dg-error "initialized" "init" { target *-*-* } 19 } // { dg-error "initialized" "init" { target *-*-* } 17 }
} }
} }
...@@ -16,7 +16,7 @@ class test_square ...@@ -16,7 +16,7 @@ class test_square
template <class BOX> void test(BOX *the_box) template <class BOX> void test(BOX *the_box)
{x // { dg-error "not declared in this scope" } {x // { dg-error "not declared in this scope" }
the_box->print(); // { dg-error "before" } the_box->print();
} }
template void test<> (test_box *); template void test<> (test_box *);
...@@ -35,7 +35,7 @@ int main (void) ...@@ -35,7 +35,7 @@ int main (void)
abort (); abort ();
MyRootClass.int; /* { dg-error "expected identifier" } */ MyRootClass.int; /* { dg-error "expected identifier" } */
/* { dg-error "expected" "" { target *-*-* } 37 } */
if (MyRootClass.int) /* { dg-error "expected identifier" } */ if (MyRootClass.int) /* { dg-error "expected identifier" } */
/* { dg-error "expected" "" { target *-*-* } 39 } */ /* { dg-error "expected" "" { target *-*-* } 39 } */
abort (); abort ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment