[Bug c/61096] error_init lacks a location

2014-05-09 Thread mpolacek at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=61096

--- Comment #4 from Marek Polacek mpolacek at gcc dot gnu.org ---
Author: mpolacek
Date: Fri May  9 17:50:25 2014
New Revision: 210280

URL: http://gcc.gnu.org/viewcvs?rev=210280root=gccview=rev
Log:
PR c/61096
* c-parser.c (c_parser_braced_init): Pass brace_loc to push_init_level.
(c_parser_initelt): Pass location to set_init_label.  Pass array index
location to set_init_index.
* c-tree.h (push_init_level): Update declaration.
(pop_init_level): Likewise.
(set_init_index): Likewise.
(set_init_label): Likewise.
* c-typeck.c (error_init): Add location parameter.  Call error_at
instead of error.
(digest_init): Pass init_loc to error_init.
(really_start_incremental_init):
(push_init_level): Add location parameter.  Pass loc to pop_init_level
and error_init.
(pop_init_level): Likewise.
(set_designator): Add location parameter.  Pass loc to pop_init_level,
push_init_level, and error_init.
(set_init_index): Add location parameter.  Pass loc to error_init and
set_designator.
(set_init_label): Likewise.
(output_init_element): Pass loc to error_init.
(process_init_element): Pass loc to error_init, pop_init_level,
pedwarn_init, and push_init_level.

* gcc.dg/pr61096-1.c: New test.
* gcc.dg/pr61096-2.c: New test.

Added:
trunk/gcc/testsuite/gcc.dg/pr61096-1.c
trunk/gcc/testsuite/gcc.dg/pr61096-2.c
Modified:
trunk/gcc/c/ChangeLog
trunk/gcc/c/c-parser.c
trunk/gcc/c/c-tree.h
trunk/gcc/c/c-typeck.c
trunk/gcc/testsuite/ChangeLog


[Bug c/61096] error_init lacks a location

2014-05-09 Thread mpolacek at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=61096

Marek Polacek mpolacek at gcc dot gnu.org changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution|--- |FIXED

--- Comment #5 from Marek Polacek mpolacek at gcc dot gnu.org ---
Fixed.


[Bug c/61096] error_init lacks a location

2014-05-07 Thread mpolacek at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=61096

Marek Polacek mpolacek at gcc dot gnu.org changed:

   What|Removed |Added

   Keywords||diagnostic
 Status|UNCONFIRMED |ASSIGNED
   Last reconfirmed||2014-05-07
   Assignee|unassigned at gcc dot gnu.org  |mpolacek at gcc dot 
gnu.org
   Target Milestone|--- |4.10.0
 Ever confirmed|0   |1

--- Comment #1 from Marek Polacek mpolacek at gcc dot gnu.org ---
Another testcase:

struct s { char c[1]; };
extern struct s foo (void);

void
bar (void)
{
  char *t = (foo ()).c;
}


[Bug c/61096] error_init lacks a location

2014-05-07 Thread mpolacek at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=61096

--- Comment #2 from Marek Polacek mpolacek at gcc dot gnu.org ---
Another testcase:

struct
{
  char *v;
} s[] = { .v = 0 };


[Bug c/61096] error_init lacks a location

2014-05-07 Thread mpolacek at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=61096

--- Comment #3 from Marek Polacek mpolacek at gcc dot gnu.org ---
Note that there are 3 error_init calls that seem unreachable (?):

 6783 
 6784   if (COMPLETE_TYPE_P (type)  TREE_CODE (TYPE_SIZE (type)) !=
INTEGER_CST)
 6785 {
 6786   error_init (variable-sized object may not be initialized);
 6787   return error_mark_node;
 6788 }

 7491   else if (vec_safe_length (constructor_elements) != 1)
 7492 {
 7493   error_init (extra elements in scalar initializer);
 7494   ret.value = (*constructor_elements)[0].value;
 7495 }

 8590   if (constructor_stack-replacement_value.value != 0)
 8591 {
 8592   error_init (excess elements in struct initializer);
 8593   return;
 8594 }