From acf601aefd44b7c2615c78408b32e862212d34ef Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 7 Feb 2014 17:42:24 +0100 Subject: [PATCH] re PR preprocessor/56824 (pragma GCC diagnostic push/pop fail with GCC diagnostic ignored "-Waggregate-return") PR preprocessor/56824 * line-map.c (get_combined_adhoc_loc, linemap_get_expansion_line, linemap_get_expansion_filename, linemap_location_in_system_header_p, linemap_location_from_macro_expansion_p, linemap_macro_loc_to_spelling_point, linemap_macro_loc_to_def_point, linemap_macro_loc_to_exp_point, linemap_expand_location): Fix formatting. (linemap_compare_locations): Look through adhoc locations for both l0 and l1. * gcc.dg/pr56824.c: New test. From-SVN: r207606 --- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gcc.dg/pr56824.c | 18 ++++++++++++++ libcpp/ChangeLog | 12 +++++++++ libcpp/line-map.c | 45 +++++++++++++++++++--------------- 4 files changed, 60 insertions(+), 20 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr56824.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e1ccc2d7547..a50fa4bc7ba 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-02-07 Jakub Jelinek + + PR preprocessor/56824 + * gcc.dg/pr56824.c: New test. + 2014-02-07 Andreas Krebbel * gcc.dg/gcc-have-sync-compare-and-swap.c: Align the 16 byte diff --git a/gcc/testsuite/gcc.dg/pr56824.c b/gcc/testsuite/gcc.dg/pr56824.c new file mode 100644 index 00000000000..d682d0a8102 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr56824.c @@ -0,0 +1,18 @@ +/* PR preprocessor/56824 */ +/* { dg-do compile } */ +/* { dg-options "-Waggregate-return" } */ + +struct S { int i; }; +struct S foo (void); + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Waggregate-return" + +int +main () +{ + foo (); + return 0; +} + +#pragma GCC diagnostic pop diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 90512820eb9..b7f2011190e 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,15 @@ +2014-02-07 Jakub Jelinek + + PR preprocessor/56824 + * line-map.c (get_combined_adhoc_loc, linemap_get_expansion_line, + linemap_get_expansion_filename, linemap_location_in_system_header_p, + linemap_location_from_macro_expansion_p, + linemap_macro_loc_to_spelling_point, linemap_macro_loc_to_def_point, + linemap_macro_loc_to_exp_point, linemap_expand_location): Fix + formatting. + (linemap_compare_locations): Look through adhoc locations for both + l0 and l1. + 2014-01-23 Dodji Seketeli PR PR preprocessor/58580 diff --git a/libcpp/line-map.c b/libcpp/line-map.c index 7c7facbc760..f9a7658cbdb 100644 --- a/libcpp/line-map.c +++ b/libcpp/line-map.c @@ -106,8 +106,8 @@ get_combined_adhoc_loc (struct line_maps *set, linemap_assert (data); if (IS_ADHOC_LOC (locus)) - locus = - set->location_adhoc_data_map.data[locus & MAX_SOURCE_LOCATION].locus; + locus + = set->location_adhoc_data_map.data[locus & MAX_SOURCE_LOCATION].locus; if (locus == 0 && data == NULL) return 0; lb.locus = locus; @@ -141,8 +141,8 @@ get_combined_adhoc_loc (struct line_maps *set, } *slot = set->location_adhoc_data_map.data + set->location_adhoc_data_map.curr_loc; - set->location_adhoc_data_map.data[ - set->location_adhoc_data_map.curr_loc++] = lb; + set->location_adhoc_data_map.data[set->location_adhoc_data_map.curr_loc++] + = lb; } return ((*slot) - set->location_adhoc_data_map.data) | 0x80000000; } @@ -833,8 +833,8 @@ linemap_get_expansion_line (struct line_maps *set, const struct line_map *map = NULL; if (IS_ADHOC_LOC (location)) - location = set->location_adhoc_data_map.data[ - location & MAX_SOURCE_LOCATION].locus; + location = set->location_adhoc_data_map.data[location + & MAX_SOURCE_LOCATION].locus; if (location < RESERVED_LOCATION_COUNT) return 0; @@ -861,8 +861,8 @@ linemap_get_expansion_filename (struct line_maps *set, const struct line_map *map = NULL; if (IS_ADHOC_LOC (location)) - location = set->location_adhoc_data_map.data[ - location & MAX_SOURCE_LOCATION].locus; + location = set->location_adhoc_data_map.data[location + & MAX_SOURCE_LOCATION].locus; if (location < RESERVED_LOCATION_COUNT) return NULL; @@ -899,8 +899,8 @@ linemap_location_in_system_header_p (struct line_maps *set, const struct line_map *map = NULL; if (IS_ADHOC_LOC (location)) - location = set->location_adhoc_data_map.data[ - location & MAX_SOURCE_LOCATION].locus; + location = set->location_adhoc_data_map.data[location + & MAX_SOURCE_LOCATION].locus; if (location < RESERVED_LOCATION_COUNT) return false; @@ -942,8 +942,8 @@ linemap_location_from_macro_expansion_p (struct line_maps *set, source_location location) { if (IS_ADHOC_LOC (location)) - location = set->location_adhoc_data_map.data[ - location & MAX_SOURCE_LOCATION].locus; + location = set->location_adhoc_data_map.data[location + & MAX_SOURCE_LOCATION].locus; linemap_assert (location <= MAX_SOURCE_LOCATION && (set->highest_location @@ -1024,6 +1024,11 @@ linemap_compare_locations (struct line_maps *set, bool pre_virtual_p, post_virtual_p; source_location l0 = pre, l1 = post; + if (IS_ADHOC_LOC (l0)) + l0 = set->location_adhoc_data_map.data[l0 & MAX_SOURCE_LOCATION].locus; + if (IS_ADHOC_LOC (l1)) + l1 = set->location_adhoc_data_map.data[l1 & MAX_SOURCE_LOCATION].locus; + if (l0 == l1) return 0; @@ -1086,8 +1091,8 @@ linemap_macro_loc_to_spelling_point (struct line_maps *set, struct line_map *map; if (IS_ADHOC_LOC (location)) - location = set->location_adhoc_data_map.data[ - location & MAX_SOURCE_LOCATION].locus; + location = set->location_adhoc_data_map.data[location + & MAX_SOURCE_LOCATION].locus; linemap_assert (set && location >= RESERVED_LOCATION_COUNT); @@ -1124,8 +1129,8 @@ linemap_macro_loc_to_def_point (struct line_maps *set, struct line_map *map; if (IS_ADHOC_LOC (location)) - location = set->location_adhoc_data_map.data[ - location & MAX_SOURCE_LOCATION].locus; + location = set->location_adhoc_data_map.data[location + & MAX_SOURCE_LOCATION].locus; linemap_assert (set && location >= RESERVED_LOCATION_COUNT); @@ -1166,8 +1171,8 @@ linemap_macro_loc_to_exp_point (struct line_maps *set, struct line_map *map; if (IS_ADHOC_LOC (location)) - location = set->location_adhoc_data_map.data[ - location & MAX_SOURCE_LOCATION].locus; + location = set->location_adhoc_data_map.data[location + & MAX_SOURCE_LOCATION].locus; linemap_assert (set && location >= RESERVED_LOCATION_COUNT); @@ -1374,8 +1379,8 @@ linemap_expand_location (struct line_maps *set, if (IS_ADHOC_LOC (loc)) { loc = set->location_adhoc_data_map.data[loc & MAX_SOURCE_LOCATION].locus; - xloc.data = set->location_adhoc_data_map.data[ - loc & MAX_SOURCE_LOCATION].data; + xloc.data + = set->location_adhoc_data_map.data[loc & MAX_SOURCE_LOCATION].data; } if (loc < RESERVED_LOCATION_COUNT)