Commit Graph

1028 Commits

Author SHA1 Message Date
Hans Wennborg f1a7425bd9 clang-cl: Support building DLLs (PR17083)
This adds driver support for building DLLs (the /LD and /LDd flags).
It basically does two things: runtime selection and passing -dll and
-implib to the linker.

llvm-svn: 190428
2013-09-10 20:18:04 +00:00
Hans Wennborg 81f74480b3 clang-cl: use -fdiagnostics-format=msvc by default
This allows for navigating to errors within the MSVC IDE by clicking
on the diagnostics.

llvm-svn: 190378
2013-09-10 01:07:07 +00:00
Hans Wennborg 2102df96a6 clang-cl: parse (but don't support) the /o flag
Apparently folks run into this (PR17097). The flag is not supported by
MSVC either, but we should parse it so we don't get confused when it occurs.

This changes the clang-cl output for "clang-cl /c /o foo.obj" from:

  clang-cl.exe: error: no such file or directory: '/o'
  clang-cl.exe: error: no such file or directory: 'foo.obj'

to:

  clang-cl.exe: warning: argument unused during compilation: '/o bajs.obj'

llvm-svn: 190323
2013-09-09 19:04:49 +00:00
Hans Wennborg 0b596b8f4d clang-cl: ignore /RTC options (PR17129)
I don't think Clang intends to implement this functionality.
ASan should be used instead. Since /RTC is often passed by default
from MSBuild, ignore the option to avoid bloating the output.

llvm-svn: 190202
2013-09-06 20:26:25 +00:00
Hans Wennborg 0a096a0a3b clang-cl: Use .obj as extension for unnamed object files (PR17095)
We already use .obj as extension when the user provides a stem file
name (via /Fo), but were failing in the most basic case when the file
name is based on the input file.

llvm-svn: 190071
2013-09-05 17:05:56 +00:00
Chandler Carruth 576a369f65 Support suppressing unused arguments warnings as a core option so that
it works in the CL flavor driver.

llvm-svn: 190040
2013-09-05 10:09:03 +00:00
Richard Smith 282b4492db Tweak implementation of -Wwrite-strings to better match the behavior of current GCCs:
* In C, as before, if the "warning flag" is enabled, warnings are produced by
   forcing string literals to have const-qualified types (the produced warnings
   are *not* -Wwrite-strings warnings). However, more recent GCCs (at least 4.4
   onwards) now take -w into account here, so we now do the same.

 * In C++, this flag is entirely sane: it behaves just like any other warning
   flag. Stop triggering -fconst-strings here. This is a bit cleaner, but there's
   no real functionality change except in the case where -Xclang -fno-const-strings
   is also specified.

llvm-svn: 190006
2013-09-04 22:50:31 +00:00
NAKAMURA Takumi ee9fba2042 clang/test/Driver/working-directory.c: Exclude msys bash rather than tweaking expressions.
llvm-svn: 189927
2013-09-04 09:37:12 +00:00
Reid Kleckner f3ad720130 clang-cl: Make -W a core option so we can adjust clang warnings.
llvm-svn: 189882
2013-09-03 23:18:43 +00:00
Rafael Espindola 8a777db90c Pass -target instead of using "REQUIRES: clang-driver".
llvm-svn: 189822
2013-09-03 16:05:48 +00:00
Rafael Espindola 11b9581d43 Disable this on mingw again.
I will investigate why it still fails, but for now this gets the bots green.

llvm-svn: 189807
2013-09-03 14:09:54 +00:00
Rafael Espindola 0c9fa3f982 Use -### instead of -ccc-print-options.
Convert the last few tests using -ccc-print-options to -### and remove
-ccc-print-options.

llvm-svn: 189802
2013-09-03 13:26:49 +00:00
Renato Golin 47aeab5cbe Fix gnueeabi typo in tests
llvm-svn: 189759
2013-09-02 14:11:33 +00:00
Hans Wennborg d024c1c803 clang-cl: Pass -incremental:no to linker when using ASan
llvm-svn: 189664
2013-08-30 10:50:52 +00:00
Renato Golin 8d5f31432e use the last passed -munaligned-access / -mno-unaligned-access
Passing inconsistent munaligned-access / mno-unaligned-access
flags, intentionally resulted in a warning and the flag
no-unaligned-access being used.

Gcc does, at least in practice, use the last flag in such a
case. This patch updates clang behaviour accordingly; use the
last flag or base alignment behaviour on the target (which
llvm will do if no flag is explicitly passed)

Patch by Jeroen Hofstee.

llvm-svn: 189542
2013-08-28 23:56:07 +00:00
Hans Wennborg 0517e75164 clang-cl: Pass -debug to the linker when using -fsanitize=address
llvm-svn: 189496
2013-08-28 17:36:07 +00:00
Hal Finkel 108c46a7bf Revert r189440 - Disable loop vectorizer unrolling when no unrolling requested
As Chandler pointed out, we should not be using -backend-option because this
will cause crashes for users of the tooling interface, etc. A better way to fix
this will be to provide the unrolling pass-manager flag to the loop vectorizer
directly.

Original commit message:

Disable loop vectorizer unrolling when no unrolling requested

In addition to the regular loop unrolling transformation, the loop vectorizer
can also unroll loops. If no unrolling has specifically been requested (by
-fno-unroll-loops), and the loop vectorizer will be used, then add the backend
option to (also) prevent the loop vectorizer from unrolling loops.

I confirmed with Nadav (off list) that disabling vectorizer loop unrolling when
-fno-unroll-loops is provided is the desired behavior.

llvm-svn: 189441
2013-08-28 05:21:45 +00:00
Hal Finkel 7d0867f48c Disable loop vectorizer unrolling when no unrolling requested
In addition to the regular loop unrolling transformation, the loop vectorizer
can also unroll loops. If no unrolling has specifically been requested (by
-fno-unroll-loops), and the loop vectorizer will be used, then add the backend
option to (also) prevent the loop vectorizer from unrolling loops.

I confirmed with Nadav (off list) that disabling vectorizer loop unrolling when
-fno-unroll-loops is provided is the desired behavior.

llvm-svn: 189440
2013-08-28 04:40:22 +00:00
Hans Wennborg 65f1752875 clang-cl: Support -fsanitize=address
This exposes the -fsanitize=address option and adds the runtime library
to the link command.

Differential Revision: http://llvm-reviews.chandlerc.com/D1526

llvm-svn: 189389
2013-08-27 18:10:21 +00:00
Rafael Espindola ad70d9683e Warn that -O4 is the same as -O3.
We error on -O5 and higher. While it is tempting to do the same for -O4, I
agree with Jordan Rose: we should warn for a release at least first.

llvm-svn: 189369
2013-08-27 16:58:15 +00:00
Chandler Carruth 1f2b2f8d45 Teach the Linux toolchain about more modern Gentoo installations of GCC
which add another wrinkle to the installation of the libstdc++ headers.

Add at least some basic testing of the weirdnesses of Gentoo's layout.

llvm-svn: 189212
2013-08-26 08:59:53 +00:00
Rafael Espindola e8025644b2 Produce an error when trying to link with -emit-llvm.
llvm-svn: 189193
2013-08-25 14:27:09 +00:00
Renato Golin 171b6b19f1 Tests for ARM aligned access + reserved R9
Patch by Jeroen Hofstee.

llvm-svn: 189190
2013-08-25 13:01:50 +00:00
Rafael Espindola 493f045e75 Don't imply -flto with -O4.
We now saturate at -O3.

llvm-svn: 189149
2013-08-23 21:49:00 +00:00
Rafael Espindola eb26547177 Move -mfpmath handling to -cc1 and implement it for x86.
The original idea was to implement it all on the driver, but to do that the
driver needs to know the sse level and to do that it has to know the default
features of a cpu.

Benjamin Kramer pointed out that if one day we decide to implement support for
' __attribute__ ((__target__ ("arch=core2")))', then the frontend needs to
keep its knowledge of default features of a cpu.

To avoid duplicating which part of clang handles default cpu features,
it is probably better to handle -mfpmath in the frontend.

For ARM this patch is just a small improvement. Instead of a cpu list, we
check if neon is enabled, which allows us to reject things like

-mcpu=cortex-a9 -mfpu=vfp -mfpmath=neon

For X86, since LLVM doesn't support an independent ssefp feature, we just
make sure the selected -mfpmath matches the sse level.

llvm-svn: 188939
2013-08-21 21:59:03 +00:00
Rafael Espindola 4396480358 Move the logic for selecting the last feature in the command line to the driver.
This is a partial revert of r188817 now that the driver handles -target-feature
in a single place.

llvm-svn: 188910
2013-08-21 17:34:32 +00:00
Rafael Espindola 28e1f4b625 Centralize the handling of -target-feature.
No functionality change other than changing the order of -target-feature
relative to other -cc1 command line arguments.

llvm-svn: 188906
2013-08-21 16:39:20 +00:00
Rafael Espindola db0fcfbfae Centralize the logic for handling -m* options and fix pr16943.
This moves the logic for handling -mfoo -mno-foo from the driver to -cc1. It
also changes -cc1 to apply the options in order, fixing pr16943.

The handling of -mno-mmx -msse is now an explicit special case.

llvm-svn: 188817
2013-08-20 18:57:55 +00:00
Tim Northover 244950d641 ARM: add test for last commit
This time I managed to forget the test.

Patch still by Stephen Kelly.

llvm-svn: 188797
2013-08-20 13:19:43 +00:00
NAKAMURA Takumi 99941a9558 clang/test/Driver/cl-options.c: Remove the feature "clang-driver". It has been working since r188331.
llvm-svn: 188790
2013-08-20 12:16:48 +00:00
NAKAMURA Takumi 5a13d0f175 clang/test/Driver: Remove the feature "clang-driver" since gcc-as has not been used with -integrated-as since r177360.
llvm-svn: 188789
2013-08-20 12:16:42 +00:00
NAKAMURA Takumi 422a3b4570 clang/test/Driver: Remove the feature "clang-driver" in three tests since they might work as expected since their first commit.
llvm-svn: 188788
2013-08-20 12:16:35 +00:00
Reid Kleckner f9486598b5 clang-cl: Ignore the /wd n flag for disabling a warning
Clang doesn't have a table mapping cl.exe to clang warnings.  While some
warnings like -Wsign-compare exist in both compilers, the majority do
not correspond and should usually be ignored.

llvm-svn: 188732
2013-08-19 23:57:44 +00:00
Reid Kleckner a04cdbb97c clang-cl: Add /MP[n] to the list of unsupported and ignored flags
This flag tells cl.exe to use up to n processes to compile the provided
source files.  I have no plans to implement this in clang.

llvm-svn: 188729
2013-08-19 23:52:36 +00:00
Hans Wennborg c0fbccc885 clang-cl: Expose the -Xclang option
llvm-svn: 188685
2013-08-19 18:32:59 +00:00
Alexey Samsonov 0c127d7c71 Re-apply r188666
llvm-svn: 188675
2013-08-19 13:59:22 +00:00
NAKAMURA Takumi 053704f959 clang/Driver: [PR12920] Don't forward any -W arguments to gcc-as and gcc-ld.
AFAIK, there are no -W options for gcc-as and gcc-ld.
It caused failure to build clang with gcc-4.7 on cygwin.

FIXME: Could we recategorize Options for gcc-as and gcc-ld?
llvm-svn: 188668
2013-08-19 11:51:51 +00:00
Alexey Samsonov bca169c185 Revert r188666: it breaks the buildbots
llvm-svn: 188667
2013-08-19 11:42:54 +00:00
Alexey Samsonov 828e5e141d Fix PR16768: properly report malformed sanitizer blacklist file contents
llvm-svn: 188666
2013-08-19 10:41:30 +00:00
Robert Lytton a7d1d865e5 XCore target: correct test layout
llvm-svn: 188663
2013-08-19 09:46:32 +00:00
Alexey Samsonov 22735c8a57 Explicitly specify triple in driver test from r188660
llvm-svn: 188662
2013-08-19 09:45:19 +00:00
Alexey Samsonov 609213f9eb Move SanitizerArgs to the clang Driver
Summary:
This change turns SanitizerArgs into high-level options
stored in the Driver, which are parsed lazily. This fixes an issue of multiple copies of the same diagnostic message produced by sanitizer arguments parser.

Reviewers: rsmith

Reviewed By: rsmith

CC: chandlerc, eugenis, cfe-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D1341

llvm-svn: 188660
2013-08-19 09:14:21 +00:00
Adrian Prantl e1f1f20e92 Relax testcase for r188400 to not test for forward-slashes as path separators.
llvm-svn: 188414
2013-08-14 22:10:17 +00:00
Shuxin Yang 9b49f22500 Fix grammar mistake.
Thank Richard Smith for figuring out this problem.

llvm-svn: 188408
2013-08-14 20:07:23 +00:00
Shuxin Yang 83930ac0b7 Do no use -emit-llvm for -flto.
Tested on multiple OSes.

llvm-svn: 188406
2013-08-14 19:45:49 +00:00
Benjamin Kramer 9f56828c5d Testcase for r188400.
llvm-svn: 188405
2013-08-14 19:45:27 +00:00
Hans Wennborg be4a6768f1 Driver: Forward -Wl, and -Xlink arguments when using windows linker
Differential Revision: http://llvm-reviews.chandlerc.com/D1394

llvm-svn: 188346
2013-08-14 01:24:35 +00:00
Hans Wennborg 2e27459d6c clang-cl: Support /link option and set target to win32
This adds support for the /link option, which forwards
subsequent arguments to the linker.

The test for this will only work when targetting win32.
Since that's the only target where clang-cl makes sense,
use that target by default.

Differential Revision: http://llvm-reviews.chandlerc.com/D1388

llvm-svn: 188331
2013-08-13 23:38:57 +00:00
Nick Lewycky bbd6db8032 Link in the ubsan runtime when building shared objects.
llvm-svn: 188325
2013-08-13 22:32:35 +00:00
Arnold Schwaighofer 7f994ce294 Move logic to enable the vectorizer to clang
We used to decide whether to really vectorize depending on the optimization
level in PassManagerBuilder.

This patch moves this decision to the clang driver. We look at the optimization
level and whether the f(no-)vectorize is set and decide whether to vectorize.

This allows us to simplify the logic in PassManagerBuilder to just a check for
whether the vectorizer should run or not.

We now do the right thing for:
$ clang -O1 -fvectorize
$ clang -fno-vectorize -O3

llvm-svn: 188280
2013-08-13 15:46:23 +00:00
Robert Lytton 0e07649ae5 Add XCore target
llvm-svn: 188258
2013-08-13 09:43:10 +00:00
Hans Wennborg f3cf49fb15 clang-cl: Consolidate tests for /Fo and /Fe into cl-outputs.c
llvm-svn: 188213
2013-08-12 22:19:13 +00:00
Hans Wennborg 207fcf0e7b clang-cl: Support the /Fe option
This is used to name the linked output file.

Differential Revision: http://llvm-reviews.chandlerc.com/D1344

llvm-svn: 188210
2013-08-12 21:56:42 +00:00
Hans Wennborg 0d0b19cbe1 clang-cl: Expand warning about /TC and /TP override, and expand test
llvm-svn: 188190
2013-08-12 18:34:17 +00:00
Jack Carter 44ff1e5673 [Mips] MSA frontend option support
This patch adds -mmsa and -mno-msa to the options supported by 
clang to enable and disable support for MSA.

When MSA is enabled, a predefined macro '__mips_msa' is defined to 1.

Patch by Daniel Sanders

llvm-svn: 188184
2013-08-12 17:20:29 +00:00
Tim Northover 19ae1175ae Fix FileCheck --check-prefix lines.
Various tests had sprung up over the years which had --check-prefix=ABC on the
RUN line, but "CHECK-ABC:" later on. This happened to work before, but was
strictly incorrect. FileCheck is getting stricter soon though.

Patch by Ron Ofir.

llvm-svn: 188174
2013-08-12 12:51:05 +00:00
NAKAMURA Takumi d3c9b9f9b4 clang/test/Driver/cl-options.c: Suppress this on cygming due to -fno-builtin.
llvm-svn: 188126
2013-08-10 00:59:43 +00:00
Alexey Samsonov 71c197b81c Fixup for r188058: assume hasAsanZeroBaseShadow() is false if ASan is not needed
llvm-svn: 188068
2013-08-09 10:56:42 +00:00
Hans Wennborg 0fd6207d37 clang-cl: Support /showIncludes
This option prints information about #included files to stderr. Clang could
already do it, this patch just teaches the existing code about the /showIncludes
style and adds the flag.

Differential Revision: http://llvm-reviews.chandlerc.com/D1333

llvm-svn: 188037
2013-08-09 00:32:23 +00:00
Hans Wennborg 56eb4b654f clang-cl: Map /Oi[-] to -f[no-]builtin
Differential Revision: http://llvm-reviews.chandlerc.com/D1328

llvm-svn: 188027
2013-08-08 23:44:01 +00:00
Hans Wennborg 614f707362 clang-cl: use MS C++ ABI
Differential Revision: http://llvm-reviews.chandlerc.com/D1329

llvm-svn: 188000
2013-08-08 19:54:30 +00:00
Reid Kleckner 6beca0e1cf Revert "clang-cl: Hook up /Za to prevent adding oldnames.lib dependency"
This reverts commit r187991 and adjusts the comment.  /Za is much more
involved, and we don't want to give anyone the impression we actually
support it.

llvm-svn: 187998
2013-08-08 19:33:10 +00:00
Hans Wennborg 61db3478dc clang-cl: Hook up /Za to prevent adding oldnames.lib dependency
The /Za flag should probably do more, but let's start with this.

Differential Revision: http://llvm-reviews.chandlerc.com/D1320

llvm-svn: 187991
2013-08-08 16:54:31 +00:00
Chandler Carruth 54c2910692 The only useful loop unrolling flag to give realistically is
'-fno-unroll-loops'. The option to the backend is even called
'DisableUnrollLoops'. This is precisely the form that Clang *didn't*
support. We didn't recognize the flag, we didn't pass it to the CC1
layer, and even if we did we wouldn't use it. Clang only inspected the
positive form of the flag, and only did so to enable loop unrolling when
the optimization level wasn't high enough. This only occurs for an
optimization level that even has a chance of running the loop unroller
when optimizing for size.

This commit wires up the 'no' variant, and switches the code to actually
follow the standard flag pattern of using the last flag and allowing
a flag in either direction to override the default.

I think this is still wrong. I don't know why we disable the loop
unroller entirely *from Clang* when optimizing for size, as the loop
unrolling pass *already has special logic* for the case where the
function is attributed as optimized for size! We should really be
trusting that. Maybe in a follow-up patch, I don't really want to change
behavior here.

llvm-svn: 187969
2013-08-08 08:34:35 +00:00
Hans Wennborg 75958c41e2 clang-cl: Support the run-time selection options (/MD, /MT et al.)
These flags set some preprocessor macros and injects a dependency
on the runtime library into the object file, which later is picked up
by the linker.

This also adds a new CC1 flag for adding a dependent library.

Differential Revision: http://llvm-reviews.chandlerc.com/D1315

llvm-svn: 187945
2013-08-08 00:17:41 +00:00
Hans Wennborg 0a0faa98d1 clang-cl: Use .obj as object file extension instead of .o
Differential Revision: http://llvm-reviews.chandlerc.com/D1302

llvm-svn: 187840
2013-08-07 00:32:15 +00:00
Hans Wennborg 2b89a2692c clang-cl: Implement support for the /Fo option
This implements support for the /Fo option, which is used
to set the filename or output dir for object files.

Differential Revision: http://llvm-reviews.chandlerc.com/D1302

llvm-svn: 187820
2013-08-06 22:11:28 +00:00
Larisse Voufo 4154f46c5a Fixing commit r187768: Moved diagnosis of forward declarations of variable templates from Parser to Sema.
llvm-svn: 187770
2013-08-06 03:57:41 +00:00
Larisse Voufo 21de36ba66 Moved diagnosis of forward declarations of variable templates from Parser to Sema.
llvm-svn: 187768
2013-08-06 03:43:07 +00:00
NAKAMURA Takumi cecdabb0bf clang/test/Driver/crash-report.c: Mark it as XFAIL:mingw32, for now. Investigating.
I met a message, "fatal error: file 'nul' modified since it was first processed".

llvm-svn: 187767
2013-08-06 03:31:55 +00:00
Hans Wennborg 6ee64d52cf clang-cl: Implement the /Tc, /TC, /Tp and /TP options.
These are used to specify source files, and whether to treat source
files as C or C++.

Differential Revision: http://llvm-reviews.chandlerc.com/D1290

llvm-svn: 187760
2013-08-06 00:20:31 +00:00
Bob Wilson 3d27dad728 Only use the Darwin linker's -export_dynamic option with supported versions.
Related to <rdar://problem/14578094>.

llvm-svn: 187680
2013-08-02 22:25:34 +00:00
Hans Wennborg 96d5484219 Re-commit r187637: "clang-cl: add more options"
> This adds a bunch of options to clang-cl. Notably, this includes
> all the options that get passed when doing a default build of a
> command-line project with msbuild.exe in Debug and Release modes,
> and I believe all flags from Reid's original patch.

The original commit was reverted in r187640 after it broke the Mac build.

This should now be fixed, by Clang r187668, LLVM r187675, and putting
a -- before %s in the test.

llvm-svn: 187679
2013-08-02 22:24:50 +00:00
Hans Wennborg 007af3d14c Revert r187537 "clang-cl: add more options"
It broke the "phase1 - sanity" buildbot. Reverting until
we can figure out what's going on.

And Eric says it broke all current Mac builds actually.

llvm-svn: 187640
2013-08-02 01:29:28 +00:00
Hans Wennborg 5762a04f12 clang-cl: add more options
This adds a bunch of options to clang-cl. Notably, this includes
all the options that get passed when doing a default build of a
command-line project with msbuild.exe in Debug and Release modes,
and I believe all flags from Reid's original patch.

Differential Revision: http://llvm-reviews.chandlerc.com/D1264

llvm-svn: 187637
2013-08-02 00:30:15 +00:00
Hans Wennborg a203b50317 Options: Use AliasArgs for -O -> -O2 translation.
This way we can do the translation in the .td file rather than manually.

llvm-svn: 187583
2013-08-01 16:21:57 +00:00
Hans Wennborg 28c96319c8 Make -m[no-]pascal-strings an alias of -f[no]pascal-strings in the .td file
This way we don't have to translate it manually in Clang::ConstructJob.

Differential Revision: http://llvm-reviews.chandlerc.com/D1249

llvm-svn: 187547
2013-07-31 23:39:13 +00:00
Hans Wennborg 1907610d4e clang-cl: add the /c, /W0 and /W1 options
This adds a few more clang-cl options. It also exposes two core clang
options to the clang-cl mode: we need to be able to claim --driver_mode
so it doesn't show up as unused in cl mode, and we need -### for tests.

Differential Revision: http://llvm-reviews.chandlerc.com/D1232

llvm-svn: 187527
2013-07-31 20:51:53 +00:00
Chandler Carruth cc512ed678 With help from chapuni on IRC, I think this is right now. =] The issue
is that the command is quoted differently from the arguments. The
command has '\' and the argument has '\\'. This is made unclear because
FileCheck escapes the single matched '\' when it prints the contents of
the variable, thus fooling me into thinking it had matched '\\' as
intended. The solution is to bind the gcc_install variable in the
argument list rather than out of the command. To do so we also have to
be a bit more careful so that we don't get stray other things into the
'.*' regex.

Also, because of the argument difference, '\\\\' is the correct
formulation before crtbegin, go back to that.

llvm-svn: 187489
2013-07-31 11:14:13 +00:00
Chandler Carruth 8cf38db199 Run an experiment to try to understand the windows failure better by
replacing one variable with the regex. This won't fix anything, but will
hopefully shed light on the nature of the failure.

llvm-svn: 187488
2013-07-31 10:54:11 +00:00
Chandler Carruth 8f8729446f Try only two slashes as that seems to be working elsewhere in this
testcase.

llvm-svn: 187487
2013-07-31 10:34:48 +00:00
Chandler Carruth d5bb1b511c Re-enable the cross-linux test on windows after making it tolerant of
the path separator used when locating crtbegin.o.

I'll watch the bots to see if there are other issues lurking here.

llvm-svn: 187486
2013-07-31 10:02:58 +00:00
NAKAMURA Takumi 8cefa8275a clang/test/Driver/cross-linux.c is suppressed on win32 for now. Investigating.
llvm-svn: 187483
2013-07-31 04:56:19 +00:00
Chandler Carruth 7f8042c8f3 Find a better compromise with the default library search paths used by
Clang when linking and using a GCC installation from a GCC
cross-compiler.

This was desired already by two special case platforms (Android and
Mips), and turns out to be generally (if frustratingly) true. I've added
a substantial comment to the code clarifying the underlying assumptions
of doing actual cross compiles with Clang (or GCC for that matter!) and
help avoid further confusion here.

The end result is to realize that fully general form of PR12478 cannot
be resolved while we support existing cross-compiling GCC toolchains,
and linking with them (namely, linking against their libgcc and
libstdc++ installs). GCC installs these target libraries under
a target-specific prefix but one that may not be available within the
actual sysroot in use. When linking in this world, GCC works and Clang
should as well, but caveat emptor: DSOs from this tree must be
replicated and rpath-fixed to be found at runtime within the sysroot.

I've extended the cross compile test cases to cover these issues by
pointing them at a sysroot and actually checking the library search
paths.

llvm-svn: 187466
2013-07-31 00:37:07 +00:00
NAKAMURA Takumi 2c6cf7d54a clang/test/Driver/qa_override.c: Resurrect a part of r187376. It still requires the feature 'clang-driver' for cygming.
llvm-svn: 187405
2013-07-30 07:47:58 +00:00
Chandler Carruth 35e64ba03a Make this test not try to write on object file and test all of the
output rather than just part of it.

Also, remove the frighteningly ancient comment about not working with
the gcc-driver. (!!!)

llvm-svn: 187376
2013-07-29 20:29:53 +00:00
Hans Wennborg 4a9ca978b0 test/Driver/cl.c, remove quotes around /help
The quotes (from r187330) didn't really help here, the trick was to disable
the test on MSYS builds. This removes those quotes, changes back the comment
to explain why /? has to be quoted specifically, and moves the REQUIRES
line to the top of the file because that's important.

llvm-svn: 187366
2013-07-29 18:40:38 +00:00
NAKAMURA Takumi c91dd312a4 clang/test/Driver/cl.c: Don't attempt slash switches on msys bash.
llvm-svn: 187337
2013-07-29 01:37:10 +00:00
Rafael Espindola 9f0da2f152 Try single quotes to fix the msys bot:
It was still failing with double quotes:

http://bb.pgr.jp/builders/clang-i686-msys/builds/698/steps/test_clang/logs/Clang%20%3A%3A%20Driver__cl.c

llvm-svn: 187330
2013-07-28 17:13:24 +00:00
Hans Wennborg 944780974e Fix test/Driver/cl.c.
This test would fail in weird ways on systems with a one-letter filename
in the root directory, because the shell would helpfully expand /? to e.g. /n.

Make sure this doesn't happen by adding quotes.

llvm-svn: 187295
2013-07-27 06:19:03 +00:00
Hans Wennborg 6ddc6901ef clang-cl: add support for the /? and /help options
This establishes a new Flag in Options.td, which can be assigned to
options that should be made available in clang's cl.exe compatible
mode, and updates the Driver to make use of the flag.

(The whitespace change to CMakeLists forces the build to re-run CMake
 and pick up the include dependency on the new .td file. This makes the
 build work if someone moves backwards in commit history after this change.)

Differential Revision: http://llvm-reviews.chandlerc.com/D1215

llvm-svn: 187280
2013-07-27 00:23:45 +00:00
Rafael Espindola 98bbc0241b Add not to a command that is expected to fail.
llvm-svn: 187203
2013-07-26 14:10:55 +00:00
NAKAMURA Takumi ead9b7de86 Rework r187192, to tweak expressions to be tolerant of DOSish paths. XFAILs can be removed.
llvm-svn: 187194
2013-07-26 10:13:27 +00:00
NAKAMURA Takumi 23f1e88b0f clang/test/Driver/linux-header-search.cpp: Add XFAILs, for now. I'll fix them later.
llvm-svn: 187192
2013-07-26 08:28:35 +00:00
Bill Schmidt 778d387684 [PowerPC] Support powerpc64le as a syntax-checking target.
This patch provides basic support for powerpc64le as an LLVM target.
However, use of this target will not actually generate little-endian
code.  Instead, use of the target will cause the correct little-endian
built-in defines to be generated, so that code that tests for
__LITTLE_ENDIAN__, for example, will be correctly parsed for
syntax-only testing.  Code generation will otherwise be the same as
powerpc64 (big-endian), for now.

The patch leaves open the possibility of creating a little-endian
PowerPC64 back end, but there is no immediate intent to create such a
thing.

The new test case variant ensures that correct built-in defines for
little-endian code are generated.

llvm-svn: 187180
2013-07-26 01:36:11 +00:00
Eli Friedman bf44f366a1 Fix gcc search for cross-compiler on Ubuntu 13.04.
Just more craziness to find crtbegin.o etc.

Patch by Stephen Kelly.

llvm-svn: 187175
2013-07-26 00:53:40 +00:00
David Blaikie 9260ed6c06 Don't forward all assembler arguments untouched to -cc1as
Use the same filtering for assembly arguments to -cc1as as we do for
-cc1, this allows a consistent (& more useful) diagnostic experience for
users (rather than getting an error from -cc1as (which a user shouldn't
really be thinking about) about --foo, they get an error from clang
about --foo in -Wa,)

I'm sort of surprised by the separation of -cc1as & the separate
argument handling, etc, but at least this removes a little bit of the
duplication.

llvm-svn: 187156
2013-07-25 21:19:01 +00:00
Eli Bendersky c95cfe876e Pass -fno-math-builtin from the Clang driver to -cc1 for the l32 arch.
llvm-svn: 187061
2013-07-24 18:20:14 +00:00
Rafael Espindola 03085c7184 Remove support for CCC_ADD_ARGS. QA_OVERRIDE_GCC3_OPTIONS supersedes it.
llvm-svn: 186983
2013-07-23 19:55:06 +00:00
Rafael Espindola 8c4245455a Remove the -ccc-echo option that is now unused.
llvm-svn: 186970
2013-07-23 17:58:53 +00:00
Hans Wennborg a93246b265 Expand test/Driver/at_file.c test to check that PR16209 is fixed.
It was fixed by r186603.

llvm-svn: 186962
2013-07-23 17:26:56 +00:00
Rafael Espindola 33c37f67df Convert another test to -###.
llvm-svn: 186949
2013-07-23 15:57:21 +00:00
Rafael Espindola f9bc4a02c7 Add missing quotes for -###.
Sorry about forgetting to include this in the previous patch.

llvm-svn: 186946
2013-07-23 15:20:22 +00:00
Rafael Espindola bf0d338e41 Use -### instead of -ccc-echo.
This is still a fairly odd test. Clang wants to run gcc for assembling. At
least with -### it only prints that instead of actually trying to run it with
-ccc-echo.

llvm-svn: 186945
2013-07-23 15:17:51 +00:00
Hans Wennborg e4b031ca03 Add a cl.exe compatible driver mode
The mode doesn't actually do anything yet, but this provides a
way to get into it.

llvm-svn: 186720
2013-07-19 20:33:20 +00:00
Akira Hatanaka 0aa60efe9c [mips] Add support for command-line options -mno-check-zero-division and
-mcheck-zero-division.

llvm-svn: 186710
2013-07-19 18:58:48 +00:00
Benjamin Kramer 875356ade3 Fix test to actually check things.
llvm-svn: 186701
2013-07-19 17:49:21 +00:00
Richard Sandiford 4652d893bc [SystemZ] Add -march= command-line option
llvm-svn: 186694
2013-07-19 16:51:51 +00:00
Richard Sandiford 896f8db0bd [SystemZ] Enable frame-pointer elimination for -O1 and above
Copies the x86 behavior.

llvm-svn: 186674
2013-07-19 14:06:49 +00:00
Hans Wennborg 70850d83dc Turn Driver::CCCIsCXX and CCCIsCPP into a single Mode enum,
and add a new option --driver-mode= to control it explicitly.

The CCCIsCXX and CCCIsCPP flags were non-overlapping, i.e. there
are currently really three modes that Clang can run in: gcc, g++
or cpp, so it makes sense to represent them as an enum.

Having a command line flag to control it helps testing.

llvm-svn: 186605
2013-07-18 20:29:38 +00:00
Reid Kleckner 61b23b7edc [Driver] Use LLVM's response file parser because it can read UTF-16
MSBuild writes response files as UTF-16 little endian with a byte order
mark.  With this change, clang will be able to read them, although we
still can't parse any of their flags.

Adds a UTF-16-LE response file with a BOM for testing.

Differential Revision: http://llvm-reviews.chandlerc.com/D1137

llvm-svn: 186603
2013-07-18 20:00:53 +00:00
Hans Wennborg ddef2e6c82 FileCheckize test/Driver/immediate-options.c
llvm-svn: 186438
2013-07-16 18:27:29 +00:00
Rafael Espindola 5c6c707e53 Require a shell for this test.
Some versions of python will expand the glob used in the test, others wont,
causing the test to fail when run with LIT_USE_INTERNAL_SHELL=1.

llvm-svn: 185653
2013-07-04 16:23:44 +00:00
Rafael Espindola 925213b0fa Add 'not' to commands that are expected to fail.
This is at least good documentation, but also opens the possibility of
using pipefail.

llvm-svn: 185652
2013-07-04 16:16:58 +00:00
Rafael Espindola be8a91b771 Replace 'grep foo | count 0' with 'not grep foo'.
This avoids depending on pipefail not being used.

llvm-svn: 185648
2013-07-04 15:22:16 +00:00
Manman Ren 825e8e41ad Update testing cases to check dwarf-2 for Darwin.
llvm-svn: 185577
2013-07-03 20:45:07 +00:00
Bill Schmidt 3d11a3061a Provide test case for commit r185544.
Verify that assembling an empty file does not auto-include altivec.h.

llvm-svn: 185563
2013-07-03 18:21:12 +00:00
Manman Ren 38db092083 Debug Info: set default to gdwarf-2 for Darwin.
Darwin systems currently do not support dwarf version 3 or above. When we are
ready, we can bump the default to gdwarf-4 for Darwin.

For other systems, the default is dwarf version 3, if everything goes smoothly,
we can bump the version to 4.

rdar://13591116

llvm-svn: 185483
2013-07-02 23:15:25 +00:00
Joey Gouly 7db275b947 Add support for passing v8fp options via -mfpu.
llvm-svn: 185075
2013-06-27 13:19:54 +00:00
Joey Gouly d077bc6a20 Add support for passing '-target armv8' through the Driver.
llvm-svn: 184970
2013-06-26 17:19:48 +00:00
NAKAMURA Takumi 66b694490e clang/test/Driver/pth.c: Fix r184942, a regexp like "\\\\" is redundant here. Should be matched to single \ with '\\'.
llvm-svn: 184952
2013-06-26 15:03:20 +00:00
Rafael Espindola 8d593183b5 Try to fix this test on the msys buildbot.
llvm-svn: 184942
2013-06-26 13:02:16 +00:00
Rafael Espindola 358256c77a Remove PathV1.h usage from ToolChains.cpp.
llvm-svn: 184902
2013-06-26 02:13:00 +00:00
Rafael Espindola 49ddb8675b Accept both / and \\ to fix the windows bots.
llvm-svn: 184790
2013-06-24 22:07:15 +00:00
NAKAMURA Takumi f5a240b0bf clang/test/Driver/coverage-ld.c: Tweak expressions to match dosish pathsep on win32 hosts.
llvm-svn: 184726
2013-06-24 13:19:20 +00:00
Chandler Carruth e4458b3204 The profile library must come before the C library so that it can use
atexit.

llvm-svn: 184708
2013-06-24 09:38:45 +00:00
Chandler Carruth 363817092e Fix the addition of Clang's profile runtime library to the link step
when specifying --coverage (or related) flags.

The system for doing this was based on the old LLVM-hosted profile_rt
library, and hadn't been updated for Linux to use the new compiler-rt
library. Also, it couldn't possibly work on multiarch or biarch systems
in many cases. The whole thing now works much the same as the sanitizer
libraries that are built and used out of the compiler-rt repo.

Note that other target OSes haven't been updated because I don't know if
they're doing anything special with the installation path of profile_rt.
I suspect however that *all* of these are wrong and would encourage
maintainers of each target to take a hard look at how compiler-rt
runtime libraries are linked on their platforms.

llvm-svn: 184666
2013-06-23 11:28:48 +00:00
Chandler Carruth 7c2544216f Slightly loosen the test as there are other linker invocation patterns.
llvm-svn: 184663
2013-06-23 08:39:08 +00:00
Chandler Carruth b8ffa031df Add and tighten up tests for cross compiling tool selection. This now
verifies that we run the assembler and linker in the correct mode, and
that we can successfully use a bi-arch variant of a GCC installation in
a generic cross compilation invocation of Clang.

llvm-svn: 184662
2013-06-23 08:24:15 +00:00
Chandler Carruth d6c62b66b5 Update a comment to clarify that searching the target triple bin
directory for programs used by the driver is actually the standard
behavior we want to be compatible with GCC cross compilers -- it isn't
specific to SUSE or any other distro.

Also start fleshing out testing of the different cross compilation
patterns, both with a new very bare-bones tree of cross compilers and by
extending the multilib trees. Currently, we don't correctly model doing
a cross compile using the non-triple target of a bi-arch GCC install,
but I'll add support for that (and tests) next.

llvm-svn: 184499
2013-06-20 23:37:54 +00:00
Evgeniy Stepanov edc91428a2 Add -fno-assume-sane-operator-new when building with MSan.
A workaroudn for PR16386. MSan's operator new aften has side-effects that are
miscompiled without this flag.

llvm-svn: 184410
2013-06-20 10:49:46 +00:00
Chandler Carruth 274b6f0c87 Update two options to my proposed syntax for user-facing driver options:
-gcc-toolchain foo  ->  --gcc-toolchain=foo
  -target foo         ->  --target=foo

I've added legacy aliases for the original spellings. I've updated the
canonical tests to check both spellings, and switched all of the
-gcc-toolchain usages elsewhere in the test suite to use the new one.
I've updated some of the usages of -target to the new syntax, but will
finish that in a separate entirely mechanical change once I'm sure this
won't get rolled back for some reason (It touches a *huge* number of RUN
lines in the test suite unsurprisingly).

A nice result is that the three most common flags I end up using when
doing cross compiles are all now consistent: --target=, --sysroot=, and
--gcc-toolchain=.

llvm-svn: 184408
2013-06-20 09:42:40 +00:00
Richard Smith 8e5e97690d Fix typo in r184308.
llvm-svn: 184391
2013-06-20 01:33:59 +00:00
Reid Kleckner 3793d5ed30 [Driver] Don't forward source file input args to gcc
gcc's inputs are already added by the InputInfoList passed to
Action::ConstructJob.

Fixes a regression from r183989.  This was manifesting when targetting
mingw as an extra input argument to gcc when assembling.  It presumably
affects other situations where clang calls gcc.

Prior to r183989, forwardToGCC() was returning false because the INPUT
option defined in OptParser.td had the DriverOption flag set on it.
LLVM's Option library does not set this flag for INPUT.

Reviewers: espindola

Differential Revision: http://llvm-reviews.chandlerc.com/D999

llvm-svn: 184308
2013-06-19 15:09:06 +00:00
Manman Ren 9691f7fa35 Debug Info: support for gdwarf-2 gdwarf-3 gdwarf-4
These options will add a module flag with name "Dwarf Version".
The behavior flag is currently set to Warning, so when two values disagree,
a warning will be emitted.

llvm-svn: 184276
2013-06-19 01:46:49 +00:00
Eric Christopher eec89c202e Accept and ignore -fdebug-types-section for now. This will be used
later with dwarf4 type hashing.

llvm-svn: 184152
2013-06-18 00:03:50 +00:00
Eric Christopher 2062ec68b7 FileCheck-ize.
llvm-svn: 184151
2013-06-18 00:03:46 +00:00
Eric Christopher ac0217424c When we're compiling with -pg make sure to link with gcrt1.o on linux. Be
sure to do this always, this matches the behavior for the gcc driver.

Fixes PR16251.

Based on a patch by Qiao Yang.

llvm-svn: 183591
2013-06-07 23:25:01 +00:00
Eric Christopher 30aa6b6243 If we're splitting the dwarf for fission and don't want to use the
integrated assembler then go ahead and still split the dwarf anyhow.

Add two tests, one to exercise existing behavior of not splitting
when we're just emitting assembly files and the other to test
that we split when we're not in integrated as mode.

llvm-svn: 183355
2013-06-05 23:58:15 +00:00
Rafael Espindola 044f783bc0 Default to PIE and using stack protection on OpenBSD.
Patch by Matthew Dempsky.

llvm-svn: 183295
2013-06-05 04:28:55 +00:00
NAKAMURA Takumi ad3af1ae4d clang/test/Driver/dyld-prefix.c: Exclude MSYS bash.
llvm-svn: 182769
2013-05-28 12:18:56 +00:00
Peter Collingbourne 9d9e1fc479 Driver: implement --dyld-prefix option.
This option is used to select a dynamic loader prefix to be used
at runtime. Currently this is implemented for the Linux toolchain.

Differential Revision: http://llvm-reviews.chandlerc.com/D851

llvm-svn: 182744
2013-05-27 21:40:20 +00:00
Sergey Matveev 1814e9eae3 Add -fsanitize=leak to driver options.
If -fsanitize=leak is specified, link the program with the
LeakSanitizer runtime. Ignore this option when -fsanitize=address is specified,
because AddressSanitizer has this functionality built in.

llvm-svn: 182729
2013-05-27 11:17:01 +00:00
Evgeniy Stepanov 758b5071d1 Add -lrt to sanitizer link arguments.
Sanitizer runtime intercepts functions from librt. Not doing this will fail
if the librt dependency is not present at program startup (ex. comes from a
dlopen()ed library).

llvm-svn: 182645
2013-05-24 14:28:03 +00:00
Chandler Carruth 0d4b9e61de Fix a logic bug in the handling of -fmath-errno in the driver. We would
imply -fno-math-errno if the user passed -fno-fast-math OR -ffast-math,
regardless of in which order and regardless of the tool chain default.

I've fixed this to follow the logic:

1) If the last dominating flag is -fno-math-errno, -ffast-math, or
   -Ofast, then do not use math-errno.
2) If the last dominating flag is an explicit -fmath-errno, do use
   math-errno.
3) Otherwise, use the toolchain default.

This, for example, allows the flag sequence
'-ffast-math ... -fno-fast-math' with no mention of '-fmath-errno' or
'-fno-math-errno' to preserve the toolchain default. Most notably, this
should prevent users trying to disable fast-math optimizations on Darwin
and BSD platforms from simultaneously enabling (pointless) -fmath-errno.

I've enhanced the tests (after more reorganization) to cover this and
other weird permutations of flags and targets.

llvm-svn: 182203
2013-05-18 20:47:36 +00:00
Chandler Carruth 40746dfe8f Slight reorganization of the fast-math tests which test for errno
setting. Consolidate the collection of tests that enable -fmath-errno
and share a single CHECK line for simplicity.

llvm-svn: 182202
2013-05-18 20:27:06 +00:00
Simon Atanasyan c580b3248c [Mips] Add -mldc1-sdc1 / -mno-ldc1-sdc1 command line options.
llvm-svn: 181660
2013-05-11 06:33:44 +00:00
Tom Stellard b38600c4a9 R600: Update GPU variants in -mcpu option
We've added the RS880 variant in the LLVM backend to represent an R600
GPU with no vertex cache, so we need to update the GPU mappings for
-mcpu.

llvm-svn: 181202
2013-05-06 16:12:05 +00:00
Chad Rosier 357672316b [driver] Allow multiple -arch options with -save-temps by adding the arch name
to the temporary files.
rdar://13218604

llvm-svn: 180813
2013-04-30 22:01:21 +00:00
Rafael Espindola 6d3709430f Use {{.*}}suffix instead of [[TC]] in places where we print the toolchain
path with /. This matches linux-ld.c and should finish fixing this test on
windows.

llvm-svn: 180786
2013-04-30 13:08:15 +00:00