Patchwork [fortran] Fix PR 54033, problems with -I

login
register
mail settings
Submitter Thomas Koenig
Date July 26, 2012, 5:16 p.m.
Message ID <50117B5D.8030304@netcologne.de>
Download mbox | patch
Permalink /patch/173464/
State New
Headers show

Comments

Thomas Koenig - July 26, 2012, 5:16 p.m.
Hello world,

the attached, rather obvious patch emits warnings for several
cases where there is something wrong with include directories.
No test case because I couldn't figure out how to test for a
warning with no line number.

OK for trunk?

	Thomas

2012-07-26  Thomas K├Ânig  <tkoenig@gcc.gnu.org>

         PR fortran/54033
         * scanner.c (add_path_to_list): Emit warning if an error occurs
         for an include path, if it is not present or if it is not a
         directory.  Do not add the path in these cases.
Janis Johnson - July 26, 2012, 6:20 p.m.
On 07/26/2012 10:16 AM, Thomas Koenig wrote:

> No test case because I couldn't figure out how to test for a
> warning with no line number.

Try using line number 0.

Janis
Thomas Koenig - July 27, 2012, 8:06 p.m.
Hi Janis,

> On 07/26/2012 10:16 AM, Thomas Koenig wrote:
>
>> No test case because I couldn't figure out how to test for a
>> warning with no line number.
>
> Try using line number 0.

That didn't work for me. Using

! { dg-do compile }
! { dg-options "-I include_6.f90 -I missing_dir" }
! { dg-warning "not a directory" "missing directory" target *-*-* 0 }
! { dg-warning "does not exist" "nonexisting directory" target *-*-* 0 }
end

got me

Warning: Include directory "include_6.f90" does not exist^M
Warning: Include directory "missing_dir" does not exist^M
output is:
Warning: Include directory "include_6.f90" does not exist^M
Warning: Include directory "missing_dir" does not exist^M

FAIL: gfortran.dg/include_6.f90  -O  (test for excess errors)
Excess errors:
:0:0: Warning: Include directory "include_6.f90" does not exist
:0:0: Warning: Include directory "missing_dir" does not exist

and

! { dg-do compile }
! { dg-options "-I include_6.f90 -I missing_dir" }
! { dg-warning "not a directory" "missing directory" target *-*-* 0 }
! { dg-warning "does not exist" "nonexisting directory" target *-*-* 0 }
! { dg-excess-errors "Include directory" }
end

resulted in an XFAIL:

Warning: Include directory "include_6.f90" does not exist^M
Warning: Include directory "missing_dir" does not exist^M
output is:
Warning: Include directory "include_6.f90" does not exist^M
Warning: Include directory "missing_dir" does not exist^M

XFAIL: gfortran.dg/include_6.f90  -O  (test for excess errors)
Excess errors:
:0:0: Warning: Include directory "include_6.f90" does not exist
:0:0: Warning: Include directory "missing_dir" does not exist

so dg-excess-errors seems to imply XFAIL.

The problem may be related to the fact that, when we process the
options, we do not yet have a file name, so dejagnu may have trouble
parsing the warning.

Any other ideas?

	Thomas
Janis Johnson - July 27, 2012, 10 p.m.
On 07/27/2012 01:06 PM, Thomas Koenig wrote:
> Hi Janis,
> 
>> On 07/26/2012 10:16 AM, Thomas Koenig wrote:
>>
>>> No test case because I couldn't figure out how to test for a
>>> warning with no line number.
>>
>> Try using line number 0.
> 
> That didn't work for me. Using
> 
> ! { dg-do compile }
> ! { dg-options "-I include_6.f90 -I missing_dir" }
> ! { dg-warning "not a directory" "missing directory" target *-*-* 0 }
> ! { dg-warning "does not exist" "nonexisting directory" target *-*-* 0 }
> end
> 
> got me
> 
> Warning: Include directory "include_6.f90" does not exist^M
> Warning: Include directory "missing_dir" does not exist^M
> output is:
> Warning: Include directory "include_6.f90" does not exist^M
> Warning: Include directory "missing_dir" does not exist^M
> 
> FAIL: gfortran.dg/include_6.f90  -O  (test for excess errors)
> Excess errors:
> :0:0: Warning: Include directory "include_6.f90" does not exist
> :0:0: Warning: Include directory "missing_dir" does not exist

Use "{ target *-*-* }" instead of "target *-*-*".

Notice that the two warnings have the same text, so the directive
looking for "not a directory" will fail.

Janis

Patch

Index: scanner.c
===================================================================
--- scanner.c	(Revision 189754)
+++ scanner.c	(Arbeitskopie)
@@ -311,12 +311,31 @@  add_path_to_list (gfc_directorylist **list, const
 {
   gfc_directorylist *dir;
   const char *p;
-
+  struct stat st;
+  
   p = path;
   while (*p == ' ' || *p == '\t')  /* someone might do "-I include" */
     if (*p++ == '\0')
       return;
 
+  if (stat (p, &st))
+    {
+      if (errno != ENOENT)
+	gfc_warning_now ("Include directory \"%s\": %s", path,
+			 xstrerror(errno));
+      else
+	/* FIXME:  Also support -Wmissing-include-dirs.  */
+	gfc_warning_now ("Include directory \"%s\" does not exist",
+			 path);
+      return;
+    }
+
+  else if (!S_ISDIR (st.st_mode))
+    {
+      gfc_warning_now ("\"%s\" is not a directory", path);
+      return;
+    }
+
   if (head || *list == NULL)
     {
       dir = XCNEW (gfc_directorylist);