| ... | ... | @@ -4687,19 +4687,19 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: std.Pr |
| 4687 | 4687 | |
| 4688 | 4688 | try argv.appendSlice(&[_][]const u8{ self_exe_path, "clang" }); |
| 4689 | 4689 | // if "ext" is explicit, add "-x <lang>". Otherwise let clang do its thing. |
| 4690 | | if (c_object.src.ext != null) { |
| 4690 | if (c_object.src.ext != null or ext.clangNeedsLanguageOverride()) { |
| 4691 | 4691 | try argv.appendSlice(&[_][]const u8{ "-x", switch (ext) { |
| 4692 | 4692 | .assembly => "assembler", |
| 4693 | 4693 | .assembly_with_cpp => "assembler-with-cpp", |
| 4694 | 4694 | .c => "c", |
| 4695 | | .cpp => "c++", |
| 4696 | 4695 | .h => "c-header", |
| 4696 | .cpp => "c++", |
| 4697 | 4697 | .hpp => "c++-header", |
| 4698 | .m => "objective-c", |
| 4698 | 4699 | .hm => "objective-c-header", |
| 4700 | .mm => "objective-c++", |
| 4699 | 4701 | .hmm => "objective-c++-header", |
| 4700 | 4702 | .cu => "cuda", |
| 4701 | | .m => "objective-c", |
| 4702 | | .mm => "objective-c++", |
| 4703 | 4703 | else => fatal("language '{s}' is unsupported in this context", .{@tagName(ext)}), |
| 4704 | 4704 | } }); |
| 4705 | 4705 | } |
| ... | ... | @@ -5840,6 +5840,36 @@ pub const FileExt = enum { |
| 5840 | 5840 | manifest, |
| 5841 | 5841 | unknown, |
| 5842 | 5842 | |
| 5843 | pub fn clangNeedsLanguageOverride(ext: FileExt) bool { |
| 5844 | return switch (ext) { |
| 5845 | .h, |
| 5846 | .hpp, |
| 5847 | .hm, |
| 5848 | .hmm, |
| 5849 | => true, |
| 5850 | |
| 5851 | .c, |
| 5852 | .cpp, |
| 5853 | .cu, |
| 5854 | .m, |
| 5855 | .mm, |
| 5856 | .ll, |
| 5857 | .bc, |
| 5858 | .assembly, |
| 5859 | .assembly_with_cpp, |
| 5860 | .shared_library, |
| 5861 | .object, |
| 5862 | .static_library, |
| 5863 | .zig, |
| 5864 | .def, |
| 5865 | .rc, |
| 5866 | .res, |
| 5867 | .manifest, |
| 5868 | .unknown, |
| 5869 | => false, |
| 5870 | }; |
| 5871 | } |
| 5872 | |
| 5843 | 5873 | pub fn clangSupportsDiagnostics(ext: FileExt) bool { |
| 5844 | 5874 | return switch (ext) { |
| 5845 | 5875 | .c, .cpp, .h, .hpp, .hm, .hmm, .m, .mm, .cu, .ll, .bc => true, |