From a53bf42c31fe143b6f3079154a772ea1c8b921b0 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Fri, 31 Aug 2007 09:11:43 +0000 Subject: [PATCH] re PR c++/33212 (Broken diagnostic: 'trait_expr' not supported by dump_expr) /cp 2007-08-31 Paolo Carlini PR c++/33212 * parser.c (cp_parser_trait_expr): Check rerurn value of cp_parser_type_id. /testsuite 2007-08-31 Paolo Carlini PR c++/33212 * g++.dg/ext/is_class_error.C: New. From-SVN: r127962 --- gcc/cp/ChangeLog | 6 ++++ gcc/cp/parser.c | 10 ++++-- gcc/testsuite/ChangeLog | 41 +++++++++++++---------- gcc/testsuite/g++.dg/ext/is_class_error.C | 6 ++++ 4 files changed, 43 insertions(+), 20 deletions(-) create mode 100644 gcc/testsuite/g++.dg/ext/is_class_error.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8f64db42fec..9c7adc9ea96 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2007-08-31 Paolo Carlini + + PR c++/33212 + * parser.c (cp_parser_trait_expr): Check rerurn value of + cp_parser_type_id. + 2007-08-30 Ollie Wild * cvt.c (cp_convert_to_pointer): Remove force parameter. Call diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 70006c9174a..92f443064c1 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -6502,6 +6502,9 @@ cp_parser_trait_expr (cp_parser* parser, enum rid keyword) type1 = cp_parser_type_id (parser); + if (type1 == error_mark_node) + return error_mark_node; + /* Build a trivial decl-specifier-seq. */ clear_decl_specs (&decl_specs); decl_specs.type = type1; @@ -6516,6 +6519,9 @@ cp_parser_trait_expr (cp_parser* parser, enum rid keyword) type2 = cp_parser_type_id (parser); + if (type2 == error_mark_node) + return error_mark_node; + /* Build a trivial decl-specifier-seq. */ clear_decl_specs (&decl_specs); decl_specs.type = type2; @@ -6527,8 +6533,8 @@ cp_parser_trait_expr (cp_parser* parser, enum rid keyword) cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"); - /* Complete the trait expr, which may mean either processing the - static assert now or saving it for template instantiation. */ + /* Complete the trait expression, which may mean either processing + the trait expr now or saving it for template instantiation. */ return finish_trait_expr (kind, type1, type2); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b5624830ed7..f2d371404d6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-08-31 Paolo Carlini + + PR c++/33212 + * g++.dg/ext/is_class_error.C: New. + 2007-08-31 Olivier Hainque * gnat.dg/test_oalign.adb, oalign[12].ads: New test. @@ -5,24 +10,24 @@ 2007-08-31 David Edelsohn Revital Eres - * gcc.target/powerpc/paired-1.c: New test. - * gcc.target/powerpc/paired-2.c: New test. - * gcc.target/powerpc/paired-3.c: New test. - * gcc.target/powerpc/paired-4.c: New test. - * gcc.target/powerpc/paired-5.c: New test. - * gcc.target/powerpc/paired-6.c: New test. - * gcc.target/powerpc/paired-7.c: New test. - * gcc.target/powerpc/ppc-paired.c: New test. - -2007-08-30 Ollie Wild - - g++.dg/conversion/ptrmem2.C: New test. - g++.dg/conversion/ptrmem3.C: New test. - g++.dg/conversion/ptrmem4.C: New test. - g++.dg/conversion/ptrmem5.C: New test. - g++.dg/conversion/ptrmem6.C: New test. - g++.dg/conversion/ptrmem7.C: New test. - g++.dg/conversion/ptrmem8.C: New test. + * gcc.target/powerpc/paired-1.c: New test. + * gcc.target/powerpc/paired-2.c: New test. + * gcc.target/powerpc/paired-3.c: New test. + * gcc.target/powerpc/paired-4.c: New test. + * gcc.target/powerpc/paired-5.c: New test. + * gcc.target/powerpc/paired-6.c: New test. + * gcc.target/powerpc/paired-7.c: New test. + * gcc.target/powerpc/ppc-paired.c: New test. + +2007-08-31 Ollie Wild + + * g++.dg/conversion/ptrmem2.C: New test. + * g++.dg/conversion/ptrmem3.C: New test. + * g++.dg/conversion/ptrmem4.C: New test. + * g++.dg/conversion/ptrmem5.C: New test. + * g++.dg/conversion/ptrmem6.C: New test. + * g++.dg/conversion/ptrmem7.C: New test. + * g++.dg/conversion/ptrmem8.C: New test. 2007-08-31 Paul Thomas diff --git a/gcc/testsuite/g++.dg/ext/is_class_error.C b/gcc/testsuite/g++.dg/ext/is_class_error.C new file mode 100644 index 00000000000..d037ec72b7b --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_class_error.C @@ -0,0 +1,6 @@ +// PR c++/33212 + +template void foo() +{ + __is_class((int); // { dg-error "type-specifier|primary-expression" } +} -- 2.30.2