* par_sco.adb (Traverse_Handled_Statement_Sequence): Do not emit SCO's
for null statements that do not come from source.
* sinfo.ads: Clarify documentation of Comes_From_Source
2009-11-30 Vincent Celier <celier@adacore.com>
* prj-nmsc.adb (Add_Source): Use Display_Name for both projects when
displaying the paths in error message.
2009-11-30 Emmanuel Briot <briot@adacore.com>
* adaint.h, adaint.c (file_attributes): force the use of unsigned char.
On some platforms, "char" is signed, on others unsigned, so we
explicitly specify the one we expect
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154826
138bc75d-0d04-0410-961f-
82ee72b054a4
+2009-11-30 Ed Schonberg <schonberg@adacore.com>
+
+ * par_sco.adb (Traverse_Handled_Statement_Sequence): Do not emit SCO's
+ for null statements that do not come from source.
+ * sinfo.ads: Clarify documentation of Comes_From_Source
+
+2009-11-30 Vincent Celier <celier@adacore.com>
+
+ * prj-nmsc.adb (Add_Source): Use Display_Name for both projects when
+ displaying the paths in error message.
+
+2009-11-30 Emmanuel Briot <briot@adacore.com>
+
+ * adaint.h, adaint.c (file_attributes): force the use of unsigned char.
+ On some platforms, "char" is signed, on others unsigned, so we
+ explicitly specify the one we expect
+
2009-11-30 Matthew Heaney <heaney@adacore.com>
* a-coinve.adb (Insert): Move exception handler closer to point where
#define MAYBE_TO_PTR32(argv) argv
#endif
+const char ATTR_UNSET = 127;
+
void
__gnat_reset_attributes
(struct file_attributes* attr)
{
- attr->exists = -1;
+ attr->exists = ATTR_UNSET;
- attr->writable = -1;
- attr->readable = -1;
- attr->executable = -1;
+ attr->writable = ATTR_UNSET;
+ attr->readable = ATTR_UNSET;
+ attr->executable = ATTR_UNSET;
- attr->regular = -1;
- attr->symbolic_link = -1;
- attr->directory = -1;
+ attr->regular = ATTR_UNSET;
+ attr->symbolic_link = ATTR_UNSET;
+ attr->directory = ATTR_UNSET;
attr->timestamp = (OS_Time)-2;
attr->file_length = -1;
int
__gnat_file_exists_attr (char* name, struct file_attributes* attr)
{
- if (attr->exists == -1) {
+ if (attr->exists == ATTR_UNSET) {
#ifdef __MINGW32__
/* On Windows do not use __gnat_stat() because of a bug in Microsoft
_stat() routine. When the system time-zone is set with a negative
int
__gnat_is_regular_file_attr (char* name, struct file_attributes* attr)
{
- if (attr->regular == -1) {
+ if (attr->regular == ATTR_UNSET) {
__gnat_stat_to_attr (-1, name, attr);
}
int
__gnat_is_directory_attr (char* name, struct file_attributes* attr)
{
- if (attr->directory == -1) {
+ if (attr->directory == ATTR_UNSET) {
__gnat_stat_to_attr (-1, name, attr);
}
int
__gnat_is_readable_file_attr (char* name, struct file_attributes* attr)
{
- if (attr->readable == -1) {
+ if (attr->readable == ATTR_UNSET) {
#if defined (_WIN32) && !defined (RTX)
TCHAR wname [GNAT_MAX_PATH_LEN + 2];
GENERIC_MAPPING GenericMapping;
int
__gnat_is_writable_file_attr (char* name, struct file_attributes* attr)
{
- if (attr->writable == -1) {
+ if (attr->writable == ATTR_UNSET) {
#if defined (_WIN32) && !defined (RTX)
TCHAR wname [GNAT_MAX_PATH_LEN + 2];
GENERIC_MAPPING GenericMapping;
int
__gnat_is_executable_file_attr (char* name, struct file_attributes* attr)
{
- if (attr->executable == -1) {
+ if (attr->executable == ATTR_UNSET) {
#if defined (_WIN32) && !defined (RTX)
TCHAR wname [GNAT_MAX_PATH_LEN + 2];
GENERIC_MAPPING GenericMapping;
int
__gnat_is_symbolic_link_attr (char* name, struct file_attributes* attr)
{
- if (attr->symbolic_link == -1) {
+ if (attr->symbolic_link == ATTR_UNSET) {
#if defined (__vxworks) || defined (__nucleus__)
attr->symbolic_link = 0;
*/
struct file_attributes {
- char exists;
+ unsigned char exists;
- char writable;
- char readable;
- char executable;
+ unsigned char writable;
+ unsigned char readable;
+ unsigned char executable;
- char symbolic_link;
- char regular;
- char directory;
+ unsigned char symbolic_link;
+ unsigned char regular;
+ unsigned char directory;
OS_Time timestamp;
long file_length;
Handler : Node_Id;
begin
- if Present (N) then
+
+ -- for package bodies without a statement part, the parser adds an
+ -- empty one, to normalize the representation. The null statement
+ -- therein, which does not come from source, does not get a SCO.
+
+ if Present (N)
+ and then Comes_From_Source (N)
+ then
Traverse_Declarations_Or_Statements (Statements (N));
if Present (Exception_Handlers (N)) then
Location, Project);
Error_Msg_Name_1 := Project.Name;
- Error_Msg_Name_2 := Name_Id (Path.Name);
+ Error_Msg_Name_2 := Name_Id (Path.Display_Name);
Error_Msg
(Data.Flags, "\ project %%, %%", Location, Project);
-- reasons.
-- Comes_From_Source (Flag2)
- -- This flag is on for any nodes built by the scanner or parser from the
- -- source program, and off for any nodes built by the analyzer or
- -- expander. It indicates that a node comes from the original source.
- -- This flag is defined in Atree.
+ -- This flag is set if the node comes directly from an explicit construct
+ -- in the source. It is normally on for any nodes built by the scanner or
+ -- parser from the source program, with the exception that in a few cases
+ -- the parser adds nodes to normalize the representation (in particular
+ -- a null statement is added to a package body if there is no begin/end
+ -- initialization section.
+ --
+ -- Most nodes inserted by the analyzer or expander are not considered
+ -- as coming from source, so the flag is off for such nodes. In a few
+ -- cases, the expander constructs nodes closely equivalent to nodes
+ -- from the source program (e.g. the allocator built for build-in-place
+ -- case), and the Comes_From_Source flag is deliberately set.
-- Error_Posted (Flag3)
-- This flag is used to avoid multiple error messages being posted on or