dblaikie added a comment.

(pulling this out from an inline comment, because it's hard to quote/smaller 
than it needs to be for more complex discussions):

> Oh, thanks for finding this. It is pretty bad that I didn't image we can 
> specify multiple input module units in one command line.
>
>> What if you specify multiple source files on the command line without -c? 
>> Without -o you get test1.pcm and test2.pcm, but with -o foo you get foo.pcm 
>> overwriting foo.pcm. Perhaps if the output file specified isn't a .o file, 
>> we should ignore the -o and use the input-filename based naming? I guess we 
>> could reject this situation outright, and require the user to run multiple 
>> separate compilations. Though keeping features composable is nice.
>
> Now the name of the module file will be the same with the input file no 
> matter if we specified -o or not. With -o specified, the module files will be 
> generated into the same directory with the output file. Without -o specified, 
> the module files will be generated in the working directory. It'll still be 
> problematic if the user specify two inputs with the same name in two 
> different directory, the module file of the latter will overwrite the former 
> one. But I guess we don't need to handle such cases?
>
>> For instance - how does this interact with Apple's multiarch support (eg: 
>> clang++ test.cppm -fmodule-output -arch i386 -arch x86_64 -target 
>> x86_64_apple_darwin) - from my testing, without specifying an output file, 
>> you get something semi-usable/not simply incorrect: test-i386.pcm and 
>> test-x86_64.pcm. But if you try to name the output file you get foo.pcm and 
>> then another foo.pcm that overwrites the previous one. I think this could be 
>> taken care of if the suffix handling code was delegated down towards the 
>> else block that starts with SmallString<128> Output(getDefaultImageName());
>
> In the new implementation, I image we'll generate test-i386.pcm and 
> test-x86_64.pcm even if we specified -o with -fmodule-output. But the weird 
> thing is that when I tried to reproduce your example, the compiler told me 
> the other archs are ignored. I'm not sure if I set something wrong or I must 
> do it in Apple machine.
>
> BTW, I am not sure if I misunderstand you, but the else block that starts 
> with SmallString<128> Output(getDefaultImageName()); handles about IMAGE 
> types, which looks irreverent to me.



>> how does this interact with Apple's multiarch support
>
> Good question. What does split dwarf do in this case? Are differently named 
> outputs generated or is a multi-arch dwarf file produced (assuming they 
> exist)?

Split DWARF isn't supported on Darwin/MacOS/whatever it's called - the MachO 
debug info distribution model looks more like, but isn't quite, Split DWARF 
already (it keeps the debug info in .o files, doesn't link them into the final 
executable - and you can make a separate debug info archive with `dsymutil`).

> Rejecting the command line if it specifies multiple -arch options with 
> -fmodule-output= seems fair to me (unless/until support for multi-arch .pcm 
> files is added).

Yeah, trying to see if

>> I'm not sure if I set something wrong or I must do it in Apple machine.
>
> I don't recall for sure, but I think Apple Clang is needed. We noticed 
> differences between community Clang and Apple Clang while I was at Coverity, 
> but I don't recall the details.

I don't think this needs Apple Clang, but it does need a Darwin triple. I was 
reproducing/examining the behavior with `clang++ test.cppm -fmodule-output 
-arch i386 -arch x86_64 -### -target x86_64-apple-darwin`.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D137058/new/

https://reviews.llvm.org/D137058

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to