Commit 62e4eb35 by Marek Polacek Committed by Marek Polacek

c-common.c (check_case_value): Add location_t parameter.

	* c-common.c (check_case_value):  Add location_t parameter.  Use it.
	(c_add_case_label): Pass loc to check_case_value.

	* gcc.dg/case-bogus-1.c: New test.

From-SVN: r213525
parent 87d5ce48
2014-08-03 Marek Polacek <polacek@redhat.com>
* c-common.c (check_case_value): Add location_t parameter. Use it.
(c_add_case_label): Pass loc to check_case_value.
2014-08-02 Trevor Saunders <tsaunders@mozilla.com> 2014-08-02 Trevor Saunders <tsaunders@mozilla.com>
* cilk.c: Use hash_map instead of pointer_map. * cilk.c: Use hash_map instead of pointer_map.
......
...@@ -300,7 +300,7 @@ const struct fname_var_t fname_vars[] = ...@@ -300,7 +300,7 @@ const struct fname_var_t fname_vars[] =
struct visibility_flags visibility_options; struct visibility_flags visibility_options;
static tree c_fully_fold_internal (tree expr, bool, bool *, bool *); static tree c_fully_fold_internal (tree expr, bool, bool *, bool *);
static tree check_case_value (tree); static tree check_case_value (location_t, tree);
static bool check_case_bounds (location_t, tree, tree, tree *, tree *); static bool check_case_bounds (location_t, tree, tree, tree *, tree *);
static tree handle_packed_attribute (tree *, tree, tree, int, bool *); static tree handle_packed_attribute (tree *, tree, tree, int, bool *);
...@@ -3349,7 +3349,7 @@ verify_sequence_points (tree expr) ...@@ -3349,7 +3349,7 @@ verify_sequence_points (tree expr)
/* Validate the expression after `case' and apply default promotions. */ /* Validate the expression after `case' and apply default promotions. */
static tree static tree
check_case_value (tree value) check_case_value (location_t loc, tree value)
{ {
if (value == NULL_TREE) if (value == NULL_TREE)
return value; return value;
...@@ -3359,7 +3359,7 @@ check_case_value (tree value) ...@@ -3359,7 +3359,7 @@ check_case_value (tree value)
value = perform_integral_promotions (value); value = perform_integral_promotions (value);
else if (value != error_mark_node) else if (value != error_mark_node)
{ {
error ("case label does not reduce to an integer constant"); error_at (loc, "case label does not reduce to an integer constant");
value = error_mark_node; value = error_mark_node;
} }
...@@ -5993,14 +5993,14 @@ c_add_case_label (location_t loc, splay_tree cases, tree cond, tree orig_type, ...@@ -5993,14 +5993,14 @@ c_add_case_label (location_t loc, splay_tree cases, tree cond, tree orig_type,
type = TREE_TYPE (cond); type = TREE_TYPE (cond);
if (low_value) if (low_value)
{ {
low_value = check_case_value (low_value); low_value = check_case_value (loc, low_value);
low_value = convert_and_check (loc, type, low_value); low_value = convert_and_check (loc, type, low_value);
if (low_value == error_mark_node) if (low_value == error_mark_node)
goto error_out; goto error_out;
} }
if (high_value) if (high_value)
{ {
high_value = check_case_value (high_value); high_value = check_case_value (loc, high_value);
high_value = convert_and_check (loc, type, high_value); high_value = convert_and_check (loc, type, high_value);
if (high_value == error_mark_node) if (high_value == error_mark_node)
goto error_out; goto error_out;
......
2014-08-03 Marek Polacek <polacek@redhat.com>
* gcc.dg/case-bogus-1.c: New test.
2014-08-02 Paolo Carlini <paolo.carlini@oracle.com> 2014-08-02 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/15339 PR c++/15339
......
/* { dg-do compile } */
void
foo (int n)
{
switch (n)
case 0: case 3: case 0.2: case 5:; /* { dg-error "21:case label does not reduce to an integer constant" } */
}
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