mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 13:45:27 +08:00
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:
parent
67821e3a9e
commit
6604e6f38d
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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 */
|
||||
|
@ -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.
|
||||
|
18
gcc/testsuite/gcc.dg/cpp/tr-sign.c
Normal file
18
gcc/testsuite/gcc.dg/cpp/tr-sign.c
Normal 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
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user