From ff9e56a94f37789b5c6a95807f6b386ee06f4c63 Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Wed, 1 Aug 2012 21:43:50 +0000 Subject: [PATCH] re PR fortran/54033 (gfortran: Passing file as include directory - add diagnostic and ICE with -cpp) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2012-08-01 Thomas König 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-08-01 Thomas König 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. From-SVN: r190054 --- gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/scanner.c | 19 ++++++++++++++++++- gcc/testsuite/ChangeLog | 7 +++++++ gcc/testsuite/gfortran.dg/include_3.f95 | 1 + gcc/testsuite/gfortran.dg/include_6.f90 | 5 +++++ gcc/testsuite/gfortran.dg/include_7.f90 | 5 +++++ 6 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/include_6.f90 create mode 100644 gcc/testsuite/gfortran.dg/include_7.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 08dce7f3f58..a2b69d45757 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2012-08-01 Thomas König + + 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-31 Janus Weil PR fortran/42418 diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c index 4fad58b9148..d4a27a84532 100644 --- a/gcc/fortran/scanner.c +++ b/gcc/fortran/scanner.c @@ -311,12 +311,29 @@ add_path_to_list (gfc_directorylist **list, const char *path, { 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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0537caf2209..5c05d52e60d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2012-08-01 Thomas König + + 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. + 2012-08-01 Tom de Vries * gcc.dg/tree-ssa/vrp76.c: New test. diff --git a/gcc/testsuite/gfortran.dg/include_3.f95 b/gcc/testsuite/gfortran.dg/include_3.f95 index fba07cbb1f6..1e429c41aaf 100644 --- a/gcc/testsuite/gfortran.dg/include_3.f95 +++ b/gcc/testsuite/gfortran.dg/include_3.f95 @@ -24,3 +24,4 @@ end function ! { dg-do compile } ! { dg-options "-fpreprocessed -g3" } +! { dg-warning "Nonexistent include directory" "missing directory" { target *-*-* } 0 } diff --git a/gcc/testsuite/gfortran.dg/include_6.f90 b/gcc/testsuite/gfortran.dg/include_6.f90 new file mode 100644 index 00000000000..0bac3909b8a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/include_6.f90 @@ -0,0 +1,5 @@ +! { dg-do compile } +! { dg-options "-I gfortran.log" } +! { dg-warning "is not a directory" "" { target *-*-* } 0 } +end + diff --git a/gcc/testsuite/gfortran.dg/include_7.f90 b/gcc/testsuite/gfortran.dg/include_7.f90 new file mode 100644 index 00000000000..9a30945f109 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/include_7.f90 @@ -0,0 +1,5 @@ +! { dg-do compile } +! { dg-options "-I nothere" } +! { dg-warning "Nonexistent include directory" "missing directory" { target *-*-* } 0 } +end +