[flang-commits] [flang] ea66b46 - [flang] Separate temporary and user-specified object files

Andrzej Warzynski via flang-commits flang-commits at lists.llvm.org
Thu Jan 6 08:39:41 PST 2022


Author: Andrzej Warzynski
Date: 2022-01-06T16:38:39Z
New Revision: ea66b46dde31c9c4a52b025b7c6bdf8fa3872641

URL: https://github.com/llvm/llvm-project/commit/ea66b46dde31c9c4a52b025b7c6bdf8fa3872641
DIFF: https://github.com/llvm/llvm-project/commit/ea66b46dde31c9c4a52b025b7c6bdf8fa3872641.diff

LOG: [flang] Separate temporary and user-specified object files

This patch updates the `flang` bash scripts to differentiate between
object files provided by the user and intermediate object files
generated by the script. The latter are an "implementation detail" that
should not be visible to the end user (i.e. deleted before the scripts
exits). The former should be preserved.

Fixes https://github.com/flang-compiler/f18-llvm-project/issues/1348

Differential Revision: https://reviews.llvm.org/D116590

Added: 
    

Modified: 
    flang/tools/f18/flang

Removed: 
    


################################################################################
diff  --git a/flang/tools/f18/flang b/flang/tools/f18/flang
index 25397f377a112..6176a7501a973 100755
--- a/flang/tools/f18/flang
+++ b/flang/tools/f18/flang
@@ -123,14 +123,15 @@ parse_args()
 #   $2 - Fortran source files extracted from $1 (array, name reference)
 #   $3 - other source files extracted from $1 (array, name reference)
 #   $4 - object files extracted from $1 (array, name reference)
-#   $4 - lib files extracted from $1 (array, name reference)
+#   $5 - lib files extracted from $1 (array, name reference)
 # =============================================================================
 categorise_files()
 {
   local -n -r all_files=$1
   local -n fortran_sources=$2
   local -n other_sources=$3
-  local -n libs=$4
+  local -n objects=$4
+  local -n libs=$5
 
   for current_file in "${all_files[@]}"; do
     file_ext=${current_file##*.}
@@ -144,7 +145,7 @@ categorise_files()
     elif [[ $file_ext == "a" ]] || [[ $file_ext == "so" ]]; then
       libs+=($current_file)
     elif [[ $file_ext == "o" ]]; then
-      object_files+=($current_file)
+      objects+=($current_file)
     else
       other_sources+=($current_file)
     fi
@@ -330,6 +331,7 @@ main() {
     exit 0
   fi
 
+  # Source, object and library files provided by the user
   local fortran_source_files=()
   local other_source_files=()
   local object_files=()
@@ -388,6 +390,8 @@ main() {
 
   # STEP 2: Compile Fortran Source Files
   readonly ext_fc="${F18_FC:-gfortran}"
+  # Temporary object files generated by this script. To be deleted at the end.
+  local temp_object_files=()
   for idx in "${!fortran_source_files[@]}"; do
     # We always have to specify the output name with `-o <out_obj_file>`. This
     # is because we are using the unparsed rather than the original source file
@@ -402,7 +406,7 @@ main() {
       echo flang: in "$PWD", "$ext_fc" failed with exit status "$ret_status": "$ext_fc" "${ext_fc_options[@]}" "$@" >&2
          exit "$ret_status"
     fi
-    object_files+=(${out_obj_file})
+    temp_object_files+=(${out_obj_file})
   done
 
   # Delete the unparsed files
@@ -425,7 +429,7 @@ main() {
       echo flang: in "$PWD", "$ext_fc" failed with exit status "$ret_status": "$ext_fc" "${ext_fc_options[@]}" "$@" >&2
          exit "$ret_status"
     fi
-    object_files+=(${out_obj_file})
+    temp_object_files+=(${out_obj_file})
   done
 
   # STEP 4: Link
@@ -433,7 +437,7 @@ main() {
     exit 0;
   fi
 
-  if [[ ${#object_files[@]} -ge 1 ]]; then
+  if [[ ${#temp_object_files[@]} -ge 1 ]] || [[ ${#object_files[@]} -ge 1 ]] ; then
     # If $OUTPUT_FILE was specified, use it for the output name.
     if [[ ! -z ${OUTPUT_FILE:+x} ]]; then
       output_definition="-o $OUTPUT_FILE"
@@ -442,7 +446,7 @@ main() {
     fi
 
     set +e
-    $ext_fc "${ext_fc_options[@]}" "${object_files[@]}" "${lib_files[@]}" ${output_definition:+$output_definition}
+    $ext_fc "${ext_fc_options[@]}" "${object_files[@]}" "${temp_object_files[@]}" "${lib_files[@]}" ${output_definition:+$output_definition}
     ret_status=$?
     set -e
     if [[ $ret_status != 0 ]]; then
@@ -453,7 +457,7 @@ main() {
 
   # Delete intermediate object files
   for idx in "${!fortran_source_files[@]}"; do
-    rm "${object_files[$idx]}"
+    rm "${temp_object_files[$idx]}"
   done
 }
 


        


More information about the flang-commits mailing list