public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [patch, fortran] Fix PR 54033, problems with -I
@ 2012-07-26 17:16 Thomas Koenig
  2012-07-26 18:20 ` Janis Johnson
  0 siblings, 1 reply; 11+ messages in thread
From: Thomas Koenig @ 2012-07-26 17:16 UTC (permalink / raw)
  To: fortran, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 529 bytes --]

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.

[-- Attachment #2: p1.diff --]
[-- Type: text/x-patch, Size: 921 bytes --]

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);

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch, fortran] Fix PR 54033, problems with -I
  2012-07-26 17:16 [patch, fortran] Fix PR 54033, problems with -I Thomas Koenig
@ 2012-07-26 18:20 ` Janis Johnson
  2012-07-27 20:31   ` Thomas Koenig
  0 siblings, 1 reply; 11+ messages in thread
From: Janis Johnson @ 2012-07-26 18:20 UTC (permalink / raw)
  To: Thomas Koenig; +Cc: fortran, gcc-patches

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

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch, fortran] Fix PR 54033, problems with -I
  2012-07-26 18:20 ` Janis Johnson
@ 2012-07-27 20:31   ` Thomas Koenig
  2012-07-27 22:15     ` Janis Johnson
  0 siblings, 1 reply; 11+ messages in thread
From: Thomas Koenig @ 2012-07-27 20:31 UTC (permalink / raw)
  To: janisjo; +Cc: Janis Johnson, fortran, gcc-patches

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

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch, fortran] Fix PR 54033, problems with -I
  2012-07-27 20:31   ` Thomas Koenig
@ 2012-07-27 22:15     ` Janis Johnson
  2012-07-29 12:00       ` [patch, fortran] Fix PR 54033, problems with -I, with test cases Thomas Koenig
  0 siblings, 1 reply; 11+ messages in thread
From: Janis Johnson @ 2012-07-27 22:15 UTC (permalink / raw)
  To: Thomas Koenig; +Cc: janisjo, fortran, gcc-patches

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

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [patch, fortran] Fix PR 54033, problems with -I, with test cases
  2012-07-27 22:15     ` Janis Johnson
@ 2012-07-29 12:00       ` Thomas Koenig
  2012-07-31 13:50         ` Tobias Burnus
  0 siblings, 1 reply; 11+ messages in thread
From: Thomas Koenig @ 2012-07-29 12:00 UTC (permalink / raw)
  To: fortran, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 729 bytes --]

Hello world,

here is an updated patch for PR 54033, this time with test cases.
Thanks to Janis for pointing me in the right direction with these.

Regression-tested. OK for trunk?

Thomas

2012-07-29  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.

2012-07-29  Thomas König  <tkoenig@gcc.gnu.org>

         PR fortran/54033
         * gfortran.dg/include_6.f90:  New test case.
         * gfortran.dg/include_7.f90:  New test case.
         * gfortran.dg/include_3.f90:  Add dg-warning for missing directory.



[-- Attachment #2: include_6.f90 --]
[-- Type: text/x-fortran, Size: 121 bytes --]

! { dg-do compile }
! { dg-options "-I gfortran.log" }
! { dg-warning "is not a directory" "" { target *-*-* } 0 }
end 


[-- Attachment #3: include_7.f90 --]
[-- Type: text/x-fortran, Size: 144 bytes --]

! { dg-do compile }
! { dg-options "-I nothere" }
! { dg-warning "Nonexistent include directory" "missing directory" { target *-*-* } 0 }
end 


[-- Attachment #4: p3.diff --]
[-- Type: text/x-patch, Size: 1343 bytes --]

Index: fortran/scanner.c
===================================================================
--- fortran/scanner.c	(Revision 189754)
+++ fortran/scanner.c	(Arbeitskopie)
@@ -311,12 +311,30 @@ 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 ("Nonexistent include directory \"%s\"", 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);
Index: testsuite/gfortran.dg/include_3.f95
===================================================================
--- testsuite/gfortran.dg/include_3.f95	(Revision 189754)
+++ testsuite/gfortran.dg/include_3.f95	(Arbeitskopie)
@@ -24,3 +24,4 @@ end function
 
 ! { dg-do compile }
 ! { dg-options "-fpreprocessed -g3" }
+! { dg-warning "Nonexistent include directory" "missing directory" { target *-*-* } 0 }

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch, fortran] Fix PR 54033, problems with -I, with test cases
  2012-07-29 12:00       ` [patch, fortran] Fix PR 54033, problems with -I, with test cases Thomas Koenig
@ 2012-07-31 13:50         ` Tobias Burnus
  2012-08-02  8:54           ` Richard Guenther
  0 siblings, 1 reply; 11+ messages in thread
From: Tobias Burnus @ 2012-07-31 13:50 UTC (permalink / raw)
  To: Thomas Koenig; +Cc: fortran, gcc-patches

On 07/29/2012 11:24 AM, Thomas Koenig wrote:
> here is an updated patch for PR 54033, this time with test cases.
> Thanks to Janis for pointing me in the right direction with these.
> Regression-tested. OK for trunk?

Ok. Thanks for the patch - and to Janis for the first review.

Can you eliminate the extra line before "else if"?

Tobias

> 2012-07-29 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.
>
> 2012-07-29  Thomas König  <tkoenig@gcc.gnu.org>
>
>         PR fortran/54033
>         * gfortran.dg/include_6.f90:  New test case.
>         * gfortran.dg/include_7.f90:  New test case.
>         * gfortran.dg/include_3.f90:  Add dg-warning for missing 
> directory.
>
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch, fortran] Fix PR 54033, problems with -I, with test cases
  2012-07-31 13:50         ` Tobias Burnus
@ 2012-08-02  8:54           ` Richard Guenther
  2012-08-02  9:41             ` Tobias Burnus
  0 siblings, 1 reply; 11+ messages in thread
From: Richard Guenther @ 2012-08-02  8:54 UTC (permalink / raw)
  To: Tobias Burnus; +Cc: Thomas Koenig, fortran, gcc-patches

On Tue, Jul 31, 2012 at 3:47 PM, Tobias Burnus <burnus@net-b.de> wrote:
> On 07/29/2012 11:24 AM, Thomas Koenig wrote:
>>
>> here is an updated patch for PR 54033, this time with test cases.
>> Thanks to Janis for pointing me in the right direction with these.
>> Regression-tested. OK for trunk?
>
>
> Ok. Thanks for the patch - and to Janis for the first review.
>
> Can you eliminate the extra line before "else if"?

Seems to break testing, all testcases emit

Warning: Nonexistent include directory "finclude"^M

now and thus all testcases fail like

FAIL: gfortran.dg/alloc_comp_basics_1.f90  -O0  (test for excess errors)

Richard.

> Tobias
>
>
>> 2012-07-29 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.
>>
>> 2012-07-29  Thomas König  <tkoenig@gcc.gnu.org>
>>
>>         PR fortran/54033
>>         * gfortran.dg/include_6.f90:  New test case.
>>         * gfortran.dg/include_7.f90:  New test case.
>>         * gfortran.dg/include_3.f90:  Add dg-warning for missing
>> directory.
>>
>>
>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch, fortran] Fix PR 54033, problems with -I, with test cases
  2012-08-02  8:54           ` Richard Guenther
@ 2012-08-02  9:41             ` Tobias Burnus
  2012-08-02 20:08               ` Thomas Koenig
  0 siblings, 1 reply; 11+ messages in thread
From: Tobias Burnus @ 2012-08-02  9:41 UTC (permalink / raw)
  To: Richard Guenther; +Cc: Thomas Koenig, fortran, gcc-patches

On 08/02/2012 10:54 AM, Richard Guenther wrote:
> Seems to break testing, all testcases emit
>
> Warning: Nonexistent include directory "finclude"^M
>
> now and thus all testcases fail like
>
> FAIL: gfortran.dg/alloc_comp_basics_1.f90  -O0  (test for excess errors)

First, I actually wonder why it only lists "finclude" and not the full 
pathname.

I think the problem is that gfortran (the driver) passes something like
    -fintrinsic-modules-path 
/$PREFIX/lib64/gcc/x86_64-unknown-linux-gnu/4.8.0/finclude
to the actual compiler (f951).

That directory only exists if the compiler is installed but not if one 
runs the test suite without installing it. I wonder how the OpenMP tests 
handle it - there one needs the files from that directory. (It currently 
contains the following files: omp_lib.f90 omp_lib.h  omp_lib_kinds.mod  
omp_lib.mod.) Answer: Theose seemingly include "$BUILD/$triplet/libgomp" 
in the -I path, which also contain those files. (That probably clashes 
with "use, intrinsic :: omp_lib", but that shouldn't matter.)

I am not sure whether it is the best solution, but one possibility would 
be to ignore -fintrinsic-modules-path for the warning. (That assumes 
that the warning is (almost) never needed for an installed compiler.)

Tobias

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch, fortran] Fix PR 54033, problems with -I, with test cases
  2012-08-02  9:41             ` Tobias Burnus
@ 2012-08-02 20:08               ` Thomas Koenig
  2012-08-03 17:10                 ` Thomas Koenig
  0 siblings, 1 reply; 11+ messages in thread
From: Thomas Koenig @ 2012-08-02 20:08 UTC (permalink / raw)
  To: Tobias Burnus; +Cc: Richard Guenther, fortran, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 841 bytes --]

Hi Tobias,

 > I am not sure whether it is the best solution, but one possibility would
> be to ignore -fintrinsic-modules-path for the warning. (That assumes
> that the warning is (almost) never needed for an installed compiler.)

I think this is the right approach.  The attached patch does this.
Regression-tested with the finclude directory from the installation.

OK for trunk?

	Thomas

2012-08-02  Thomas König  <tkoenig@gcc.gnu.org>

         PR fortran/54033
         * scanner.c (add_path_to_list):  New argument warn.  Don't
         warn if it is true.
         (gfc_add_include_path):  Warn if directory is missing.
         (gfc_add_intrinsic_modules_path):  Do not warn if directory
         is missing.
         * optinons.c (gfc_handle_option):  Do not add directory
         for intrinsic modules to normal include path.


[-- Attachment #2: regfix.diff --]
[-- Type: text/x-patch, Size: 1952 bytes --]

Index: scanner.c
===================================================================
--- scanner.c	(Revision 190054)
+++ scanner.c	(Arbeitskopie)
@@ -307,7 +307,7 @@ gfc_scanner_done_1 (void)
 
 static void
 add_path_to_list (gfc_directorylist **list, const char *path,
-		  bool use_for_modules, bool head)
+		  bool use_for_modules, bool head, bool warn)
 {
   gfc_directorylist *dir;
   const char *p;
@@ -324,8 +324,11 @@ add_path_to_list (gfc_directorylist **list, const
 	gfc_warning_now ("Include directory \"%s\": %s", path,
 			 xstrerror(errno));
       else
-	/* FIXME:  Also support -Wmissing-include-dirs.  */
-	gfc_warning_now ("Nonexistent include directory \"%s\"", path);
+	{
+	  /* FIXME:  Also support -Wmissing-include-dirs.  */
+	  if (warn)
+	    gfc_warning_now ("Nonexistent include directory \"%s\"", path);
+	}
       return;
     }
   else if (!S_ISDIR (st.st_mode))
@@ -363,7 +366,7 @@ add_path_to_list (gfc_directorylist **list, const
 void
 gfc_add_include_path (const char *path, bool use_for_modules, bool file_dir)
 {
-  add_path_to_list (&include_dirs, path, use_for_modules, file_dir);
+  add_path_to_list (&include_dirs, path, use_for_modules, file_dir, true);
 
   /* For '#include "..."' these directories are automatically searched.  */
   if (!file_dir)
@@ -374,7 +377,7 @@ gfc_add_include_path (const char *path, bool use_f
 void
 gfc_add_intrinsic_modules_path (const char *path)
 {
-  add_path_to_list (&intrinsic_modules_dirs, path, true, false);
+  add_path_to_list (&intrinsic_modules_dirs, path, true, false, false);
 }
 
 
Index: options.c
===================================================================
--- options.c	(Revision 189754)
+++ options.c	(Arbeitskopie)
@@ -819,7 +819,6 @@ gfc_handle_option (size_t scode, const char *arg,
       break;
 
     case OPT_fintrinsic_modules_path:
-      gfc_add_include_path (arg, false, false);
       gfc_add_intrinsic_modules_path (arg);
       break;
 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch, fortran] Fix PR 54033, problems with -I, with test cases
  2012-08-02 20:08               ` Thomas Koenig
@ 2012-08-03 17:10                 ` Thomas Koenig
  2012-08-04 17:31                   ` H.J. Lu
  0 siblings, 1 reply; 11+ messages in thread
From: Thomas Koenig @ 2012-08-03 17:10 UTC (permalink / raw)
  To: Tobias Burnus; +Cc: Richard Guenther, fortran, gcc-patches

Hi,

> OK for trunk?

I will be on holiday starting tomorrow, so I would like to commit
this today, if possible (with a mistake in the ChangeLog noted
by Uros fixed.  Thanks!)

If not, somebody please commit this (or another fix).

Thomas

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [patch, fortran] Fix PR 54033, problems with -I, with test cases
  2012-08-03 17:10                 ` Thomas Koenig
@ 2012-08-04 17:31                   ` H.J. Lu
  0 siblings, 0 replies; 11+ messages in thread
From: H.J. Lu @ 2012-08-04 17:31 UTC (permalink / raw)
  To: Thomas Koenig; +Cc: Tobias Burnus, Richard Guenther, fortran, gcc-patches

On Fri, Aug 3, 2012 at 10:09 AM, Thomas Koenig <tkoenig@netcologne.de> wrote:
> Hi,
>
>> OK for trunk?
>
>
> I will be on holiday starting tomorrow, so I would like to commit
> this today, if possible (with a mistake in the ChangeLog noted
> by Uros fixed.  Thanks!)
>
> If not, somebody please commit this (or another fix).
>

I will commit it after verifying that it fixes the problem.

Thanks.


-- 
H.J.

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2012-08-04 17:31 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-26 17:16 [patch, fortran] Fix PR 54033, problems with -I Thomas Koenig
2012-07-26 18:20 ` Janis Johnson
2012-07-27 20:31   ` Thomas Koenig
2012-07-27 22:15     ` Janis Johnson
2012-07-29 12:00       ` [patch, fortran] Fix PR 54033, problems with -I, with test cases Thomas Koenig
2012-07-31 13:50         ` Tobias Burnus
2012-08-02  8:54           ` Richard Guenther
2012-08-02  9:41             ` Tobias Burnus
2012-08-02 20:08               ` Thomas Koenig
2012-08-03 17:10                 ` Thomas Koenig
2012-08-04 17:31                   ` H.J. Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).