re PR preprocessor/3824 (With -traditional, CPP 0xffffffff > 0 but C 0xffffffff < 0)

PR preprocessor/3824
	* line-map.c: Update comments.
	* line-map.h: Update comments.
	* tradcif.y: Don't consider large numbers unsigned.
	* gcc.dg/cpp/tr-sign.c: New testcase.

From-SVN: r44651
This commit is contained in:
Neil Booth 2001-08-05 21:31:30 +00:00 committed by Neil Booth
parent 67821e3a9e
commit 6604e6f38d
6 changed files with 43 additions and 8 deletions

View File

@ -1,3 +1,10 @@
2001-08-05 Neil Booth <neil@daikokuya.demon.co.uk>
PR preprocessor/3824
* line-map.c: Update comments.
* line-map.h: Update comments.
* tradcif.y: Don't consider large numbers unsigned.
2001-08-05 Neil Booth <neil@daikokuya.demon.co.uk>
PR preprocessor/3081

View File

@ -93,7 +93,10 @@ add_line_map (set, reason, from_line, to_file, to_line)
return map;
}
/* Translate a logical line number into a (source file, line) pair. */
/* Given a logical line, returns the map from which the corresponding
(source file, line) pair can be deduced. Since the set is built
chronologically, the logical lines are monotonic increasing, and so
the list is sorted and we can use a binary search. */
struct line_map *
lookup_line (set, line)

View File

@ -44,7 +44,11 @@ struct line_maps
unsigned int used;
};
/* Reason for adding a line change with add_line_map (). */
/* Reason for adding a line change with add_line_map (). LC_ENTER is
when including a new file, e.g. a #include directive in C.
LC_LEAVE is when reaching a file's end. LC_RENAME is when a file
name or line number changes for neither of the above reasons
(e.g. a #line directive in C). */
enum lc_reason {LC_ENTER = 0, LC_LEAVE, LC_RENAME};
/* Initialize a line map set. */
@ -56,7 +60,7 @@ extern void free_line_maps
PARAMS ((struct line_maps *));
/* Add a mapping of logical source line to physical source file and
line number. Ther text pointed to by TO_FILE must have a lifetime
line number. The text pointed to by TO_FILE must have a lifetime
at least as long as the final call to lookup_line ().
FROM_LINE should be monotonic increasing across calls to this
@ -80,7 +84,8 @@ extern struct line_map *lookup_line
/* Non-zero if the map is at the bottom of the include stack. */
#define MAIN_FILE_P(MAP) ((MAP)->included_from < 0)
/* The current line map. */
/* The current line map. Saves a call to lookup_line if the caller is
sure he is in the scope of the current map. */
#define CURRENT_LINE_MAP(MAPS) ((MAPS)->maps + (MAPS)->used - 1)
#endif /* !GCC_LINE_MAP_H */

View File

@ -1,3 +1,7 @@
2001-08-05 Neil Booth <neil@daikokuya.demon.co.uk>
* gcc.dg/cpp/tr-sign.c: New testcase.
2001-08-05 Neil Booth <neil@daikokuya.demon.co.uk>
* gcc.dg/cpp/19951025-1.c: Revert.

View File

@ -0,0 +1,18 @@
/* Copyright (C) 2001 Free Software Foundation, Inc. */
/* { dg-do preprocess { target i?86-*-* } } */
/* { dg-options "-traditional" } */
/* Tests that traditional numbers are signed, unless otherwise
specified. This test assumes a 32 bit target.
Neil Booth, 5 Aug 2001. Inspired by PR 3824. */
#if 0xffffffff >= 0
# error 0xffffffff /* { dg-bogus "0xffffffff" "0xffffffff positive" } */
#endif
#if 0xffffffffU <= 0
# error 0xffffffffU /* { dg-bogus "0xffffffffU" "0xffffffffU negative" } */
#endif

View File

@ -231,6 +231,8 @@ parse_number (olen)
return ERROR;
}
/* Traditionally, all numbers are signed. However, we make it
unsigned if requested with a suffix. */
yylval.integer.unsignedp = 0;
if (len >= 3 && (!strncmp (p, "0x", 2) || !strncmp (p, "0X", 2))) {
@ -277,10 +279,6 @@ parse_number (olen)
return ERROR;
}
/* If too big to be signed, consider it unsigned. */
if (n < 0)
yylval.integer.unsignedp = 1;
lexptr = p;
yylval.integer.value = n;
return INT;