Skip to content

Commit 713b45c

Browse files
bschommerxavierleroy
authored andcommitted
Fix computing of output filenames.
At some places the ".c" was hard coded as suffix for computing the output filenames. This lead to problems if for example `-S`or `-c` is used with preprocessed files. Bug 33196
1 parent 26a9afb commit 713b45c

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

driver/Driver.ml

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ let object_filename sourcename suff =
3838

3939
(* From CompCert C AST to asm *)
4040

41-
let compile_c_file sourcename ifile ofile =
41+
let compile_c_file sourcename ~sourcesuffix ifile ofile =
4242
(* Prepare to dump Clight, RTL, etc, if requested *)
4343
let set_dest dst opt ext =
44-
dst := if !opt then Some (output_filename sourcename ".c" ext)
44+
dst := if !opt then Some (output_filename sourcename sourcesuffix ext)
4545
else None in
4646
set_dest Cprint.destination option_dparse ".parsed.c";
4747
set_dest PrintCsyntax.destination option_dcmedium ".compcert.c";
@@ -73,23 +73,23 @@ let compile_c_file sourcename ifile ofile =
7373

7474
(* From C source to asm *)
7575

76-
let compile_i_file sourcename preproname =
76+
let compile_i_file sourcename ~sourcesuffix preproname =
7777
if !option_interp then begin
7878
Machine.config := Machine.compcert_interpreter !Machine.config;
7979
let csyntax = parse_c_file sourcename preproname in
8080
Interp.execute csyntax;
8181
""
8282
end else if !option_S then begin
83-
compile_c_file sourcename preproname
84-
(output_filename ~final:true sourcename ".c" ".s");
83+
compile_c_file sourcename ~sourcesuffix:sourcesuffix preproname
84+
(output_filename ~final:true sourcename sourcesuffix ".s");
8585
""
8686
end else begin
8787
let asmname =
8888
if !option_dasm
89-
then output_filename sourcename ".c" ".s"
89+
then output_filename sourcename sourcesuffix ".s"
9090
else tmp_file ".s" in
91-
compile_c_file sourcename preproname asmname;
92-
let objname = object_filename sourcename ".c" in
91+
compile_c_file sourcename ~sourcesuffix:sourcesuffix preproname asmname;
92+
let objname = object_filename sourcename sourcesuffix in
9393
assemble asmname objname;
9494
objname
9595
end
@@ -107,14 +107,14 @@ let process_c_file sourcename =
107107
else
108108
tmp_file ".i" in
109109
preprocess sourcename preproname;
110-
compile_i_file sourcename preproname
110+
compile_i_file sourcename ~sourcesuffix:".c" preproname
111111
end
112112

113113
(* Processing of a .i / .p file (preprocessed C) *)
114114

115-
let process_i_file sourcename =
115+
let process_i_file sourcename ~sourcesuffix =
116116
ensure_inputfile_exists sourcename;
117-
compile_i_file sourcename sourcename
117+
compile_i_file sourcename ~sourcesuffix:sourcesuffix sourcename
118118

119119
(* Processing of .S and .s files *)
120120

@@ -379,9 +379,11 @@ let cmdline_actions =
379379
Suffix ".c", Self (fun s ->
380380
push_action process_c_file s; incr num_source_files; incr num_input_files);
381381
Suffix ".i", Self (fun s ->
382-
push_action process_i_file s; incr num_source_files; incr num_input_files);
382+
push_action (process_i_file ~sourcesuffix:".i") s;
383+
incr num_source_files; incr num_input_files);
383384
Suffix ".p", Self (fun s ->
384-
push_action process_i_file s; incr num_source_files; incr num_input_files);
385+
push_action (process_i_file ~sourcesuffix:".p") s;
386+
incr num_source_files; incr num_input_files);
385387
Suffix ".s", Self (fun s ->
386388
push_action process_s_file s; incr num_source_files; incr num_input_files);
387389
Suffix ".S", Self (fun s ->

0 commit comments

Comments
 (0)