From 3d10ed6cbc7248d756077c1e7dc3533257c44a4f Mon Sep 17 00:00:00 2001 From: Aldy Hernandez Date: Thu, 21 Aug 2008 17:50:01 +0000 Subject: [PATCH] c-tree.h (grokfield): New argument. * c-tree.h (grokfield): New argument. * c-decl.c (grokfield): Handle new location argument. * c-parser.c (c_parser_struct_declaration): Pass location to grokfield. testsuite/ * gcc.dg/20011008-1.c: Test column. * gcc.dg/20080820.c: New. * gcc.dg/fltconst-1.c: Test column. * gcc.dg/cpp/cpp.exp: Add -fno-show-column. * gcc.dg/cpp/trad/trad.exp: Same. * lib/gcc.exp (gcc_target_compile): Remove -fno-show-column. * lib/gcc-dg.exp (process-message): Handle columns. From-SVN: r139403 --- gcc/ChangeLog | 8 ++++++++ gcc/c-decl.c | 9 ++++++--- gcc/c-parser.c | 7 +++++-- gcc/c-tree.h | 4 ++-- gcc/testsuite/ChangeLog | 10 ++++++++++ gcc/testsuite/gcc.dg/20011008-1.c | 4 ++-- gcc/testsuite/gcc.dg/20080820.c | 4 ++++ gcc/testsuite/gcc.dg/cpp/cpp.exp | 2 +- gcc/testsuite/gcc.dg/cpp/trad/trad.exp | 2 +- gcc/testsuite/gcc.dg/fltconst-1.c | 26 +++++++++++++------------- gcc/testsuite/lib/gcc-dg.exp | 13 ++++++++++++- gcc/testsuite/lib/gcc.exp | 1 - 12 files changed, 64 insertions(+), 26 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/20080820.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d29b385e39a..23783fd2dab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-08-21 Aldy Hernandez + + * c-tree.h (grokfield): New argument. + * c-decl.c (grokfield): Handle new location argument. + * c-parser.c (c_parser_struct_declaration): Pass location to + grokfield. + 2008-08-21 Richard Guenther * tree-ssa-ccp.c (ccp_fold): Fold VIEW_CONVERT_EXPRs of constants. @@ -360,6 +367,7 @@ (compute_branch_probabilities): Refactored. Invokes mcf_smooth_cfg if flag_profile_correction is set. +>>>>>>> .r139386 2008-08-18 Richard Sandiford * rtlanal.c (subreg_offset_representable_p): Check HARD_REGNO_MODE_OK. diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 857e3f25d9e..056cb386058 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -5363,12 +5363,15 @@ start_struct (enum tree_code code, tree name) WIDTH is non-NULL for bit-fields only, and is an INTEGER_CST node. DECL_ATTRS is as for grokdeclarator. + LOC is the location of the structure component. + This is done during the parsing of the struct declaration. The FIELD_DECL nodes are chained together and the lot of them are ultimately passed to `build_struct' to make the RECORD_TYPE node. */ tree -grokfield (struct c_declarator *declarator, struct c_declspecs *declspecs, +grokfield (location_t loc, + struct c_declarator *declarator, struct c_declspecs *declspecs, tree width, tree *decl_attrs) { tree value; @@ -5414,10 +5417,10 @@ grokfield (struct c_declarator *declarator, struct c_declspecs *declspecs, } if (!ok) { - pedwarn (input_location, 0, "declaration does not declare anything"); + pedwarn (loc, 0, "declaration does not declare anything"); return NULL_TREE; } - pedwarn (input_location, OPT_pedantic, "ISO C doesn%'t support unnamed structs/unions"); + pedwarn (loc, OPT_pedantic, "ISO C doesn%'t support unnamed structs/unions"); } value = grokdeclarator (declarator, declspecs, FIELD, false, diff --git a/gcc/c-parser.c b/gcc/c-parser.c index 7b7d8693332..e69b0a73869 100644 --- a/gcc/c-parser.c +++ b/gcc/c-parser.c @@ -1960,7 +1960,9 @@ c_parser_struct_declaration (c_parser *parser) structs or unions (which is [a] useful and [b] supports MS P-SDK). */ tree attrs = NULL; - ret = grokfield (build_id_declarator (NULL_TREE), specs, + + ret = grokfield (c_parser_peek_token (parser)->location, + build_id_declarator (NULL_TREE), specs, NULL_TREE, &attrs); if (ret) decl_attributes (&ret, attrs, 0); @@ -2003,7 +2005,8 @@ c_parser_struct_declaration (c_parser *parser) } if (c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE)) postfix_attrs = c_parser_attributes (parser); - d = grokfield (declarator, specs, width, &all_prefix_attrs); + d = grokfield (c_parser_peek_token (parser)->location, + declarator, specs, width, &all_prefix_attrs); decl_attributes (&d, chainon (postfix_attrs, all_prefix_attrs), 0); TREE_CHAIN (d) = decls; diff --git a/gcc/c-tree.h b/gcc/c-tree.h index 1fe324544f3..539254ec8f9 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -475,8 +475,8 @@ extern tree finish_enum (tree, tree, tree); extern void finish_function (void); extern tree finish_struct (tree, tree, tree); extern struct c_arg_info *get_parm_info (bool); -extern tree grokfield (struct c_declarator *, struct c_declspecs *, - tree, tree *); +extern tree grokfield (location_t, struct c_declarator *, + struct c_declspecs *, tree, tree *); extern tree groktypename (struct c_type_name *); extern tree grokparm (const struct c_parm *); extern tree implicitly_declare (tree); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 36ad31cb905..0aa749ee35f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2008-08-21 Aldy Hernandez + + * gcc.dg/20011008-1.c: Test column. + * gcc.dg/20080820.c: New. + * gcc.dg/fltconst-1.c: Test column. + * gcc.dg/cpp/cpp.exp: Add -fno-show-column. + * gcc.dg/cpp/trad/trad.exp: Same. + * lib/gcc.exp (gcc_target_compile): Remove -fno-show-column. + * lib/gcc-dg.exp (process-message): Handle columns. + 2008-08-21 Joseph Myers * g++.dg/opt/anchor1.C (foo): Return the return value of diff --git a/gcc/testsuite/gcc.dg/20011008-1.c b/gcc/testsuite/gcc.dg/20011008-1.c index e5c9e2cf0ee..e3991471a9f 100644 --- a/gcc/testsuite/gcc.dg/20011008-1.c +++ b/gcc/testsuite/gcc.dg/20011008-1.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ -/* { dg-options "-O0" } */ +/* { dg-options "-O0 -fshow-column" } */ -struct { int; int q; } a; /* { dg-warning "does not declare anything" } */ +struct { int; int q; } a; /* { dg-warning "13:does not declare anything" } */ struct { union {int x;}; int q; } b; struct { struct {int x;}; int q; } c; union { union {int x;}; int q; } d; diff --git a/gcc/testsuite/gcc.dg/20080820.c b/gcc/testsuite/gcc.dg/20080820.c new file mode 100644 index 00000000000..b9dd8a7c897 --- /dev/null +++ b/gcc/testsuite/gcc.dg/20080820.c @@ -0,0 +1,4 @@ +/* { dg-do compile } */ +/* { dg-options "-fshow-column -fms-extensions -pedantic" } */ + +struct { struct a { int x; }; int bar; } hot; /* { dg-warning "29:ISO C doesn't support unnamed" } */ diff --git a/gcc/testsuite/gcc.dg/cpp/cpp.exp b/gcc/testsuite/gcc.dg/cpp/cpp.exp index acf0898407b..1dc504e30ba 100644 --- a/gcc/testsuite/gcc.dg/cpp/cpp.exp +++ b/gcc/testsuite/gcc.dg/cpp/cpp.exp @@ -37,7 +37,7 @@ dg-init # Main loop. dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.{c,S} ]] \ - "" $DEFAULT_CFLAGS + "-fno-show-column" $DEFAULT_CFLAGS # All done. dg-finish diff --git a/gcc/testsuite/gcc.dg/cpp/trad/trad.exp b/gcc/testsuite/gcc.dg/cpp/trad/trad.exp index 190cfcfdee6..22225e51915 100644 --- a/gcc/testsuite/gcc.dg/cpp/trad/trad.exp +++ b/gcc/testsuite/gcc.dg/cpp/trad/trad.exp @@ -37,7 +37,7 @@ dg-init # Main loop. dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \ - "" $DEFAULT_TRADCPPFLAGS + "-fno-show-column" $DEFAULT_TRADCPPFLAGS # All done. dg-finish diff --git a/gcc/testsuite/gcc.dg/fltconst-1.c b/gcc/testsuite/gcc.dg/fltconst-1.c index bf922270644..85e1d34a583 100644 --- a/gcc/testsuite/gcc.dg/fltconst-1.c +++ b/gcc/testsuite/gcc.dg/fltconst-1.c @@ -1,16 +1,16 @@ /* { dg-do compile } */ /* { dg-options "-std=gnu99" } */ -double a = 1.ld; /* { dg-error "invalid suffix" } */ -double b = 1.fd; /* { dg-error "invalid suffix" } */ -double c = 1.di; /* { dg-error "invalid suffix" } */ -double d = 1.dj; /* { dg-error "invalid suffix" } */ -double e = 1.id; /* { dg-error "invalid suffix" } */ -double f = 1.jd; /* { dg-error "invalid suffix" } */ -double g = 1.ddd; /* { dg-error "invalid suffix" } */ -double h = 1.ldd; /* { dg-error "invalid suffix" } */ -double i = 1.dld; /* { dg-error "invalid suffix" } */ -double j = 1.ddl; /* { dg-error "invalid suffix" } */ -double k = 1.fdd; /* { dg-error "invalid suffix" } */ -double l = 1.dfd; /* { dg-error "invalid suffix" } */ -double m = 1.ddf; /* { dg-error "invalid suffix" } */ +double a = 1.ld; /* { dg-error "12:invalid suffix" } */ +double b = 1.fd; /* { dg-error "12:invalid suffix" } */ +double c = 1.di; /* { dg-error "12:invalid suffix" } */ +double d = 1.dj; /* { dg-error "12:invalid suffix" } */ +double e = 1.id; /* { dg-error "12:invalid suffix" } */ +double f = 1.jd; /* { dg-error "12:invalid suffix" } */ +double g = 1.ddd; /* { dg-error "12:invalid suffix" } */ +double h = 1.ldd; /* { dg-error "12:invalid suffix" } */ +double i = 1.dld; /* { dg-error "12:invalid suffix" } */ +double j = 1.ddl; /* { dg-error "12:invalid suffix" } */ +double k = 1.fdd; /* { dg-error "12:invalid suffix" } */ +double l = 1.dfd; /* { dg-error "12:invalid suffix" } */ +double m = 1.ddf; /* { dg-error "12:invalid suffix" } */ diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp index 8d308d42461..1497ce38ed9 100644 --- a/gcc/testsuite/lib/gcc-dg.exp +++ b/gcc/testsuite/lib/gcc-dg.exp @@ -636,7 +636,18 @@ proc process-message { msgproc msgprefix dgargs } { # it match a single line. set newentry [lindex ${dg-messages} end] set expmsg [lindex $newentry 2] - set expmsg "$msgprefix\[^\n]*$expmsg" + + # If we have a column... + if [regexp "^(\[0-9\]+):" $expmsg "" column] { + # Remove "COLUMN:" + regsub "^\[0-9\]+:" $expmsg "" expmsg + + # Include the column in the search expression. + set expmsg "$column: $msgprefix\[^\n]*$expmsg" + } else { + set expmsg "$msgprefix\[^\n]*$expmsg" + } + set newentry [lreplace $newentry 2 2 $expmsg] set dg-messages [lreplace ${dg-messages} end end $newentry] verbose "process-message:\n${dg-messages}" 2 diff --git a/gcc/testsuite/lib/gcc.exp b/gcc/testsuite/lib/gcc.exp index 286e1259f56..5985ce061d7 100644 --- a/gcc/testsuite/lib/gcc.exp +++ b/gcc/testsuite/lib/gcc.exp @@ -150,7 +150,6 @@ proc gcc_target_compile { source dest type options } { if [target_info exists gcc,timeout] { lappend options "timeout=[target_info gcc,timeout]" } - lappend options "additional_flags=-fno-show-column" lappend options "compiler=$GCC_UNDER_TEST" set options [dg-additional-files-options $options $source] return [target_compile $source $dest $type $options]