Commit Graph

1784 Commits

Author SHA1 Message Date
Vinicius Vendramini
f6c7815799 Add a few fixes mentioned in the code review. 2018-11-14 13:38:01 -02:00
Vinicius Vendramini
e123750c12 Add option to dump AST to files
This adds two things:
- Calling `swiftc -dump-ast foo.swift [...] -o foo.ast` will dump the AST to the file `foo.ast`, instead of dumping it to `stderr` as usual.
- Calling `swiftc -dump-ast -output-file-map=outputFileMap.json *.swift [...]`, given an `outputFileMap.json` file that contains entries in the form `"ast-dump": "foo.ast"`, will dump the ASTs of the input files to their respective output files in the file map.

This should serve as a valid workaround to a bug mentioned in [the forums](https://forums.swift.org/t/error-when-dumping-the-ast-for-hundreds-of-files/17578) where the AST dump functionality crashes when called with too many input files. A few implementation details were also discussed in the same forum post.

As an aside, this also fixes a comment in `include/swift/Basic/PrimarySpecificPaths.h` that was incorrect.
2018-11-14 13:38:01 -02:00
Rahul Malik
d3cc043e58 Add Undefined Behavior sanitizer to Swift Driver (#18553)
This change allows the swift driver to link the ubsan runtime if
`-sanitize=undefined` is specified.
This is useful for sanitizing linked Objective-C code.
2018-11-13 12:11:56 -08:00
Arnold Schwaighofer
963c64e3e7 Add @_private(from: "SourceFile.swift") imports
A module compiled with `-enable-private-imports` allows other modules to
import private declarations if the importing source file uses an
``@_private(from: "SourceFile.swift") import statement.

rdar://29318654
2018-11-08 08:00:47 -08:00
Michael Gottesman
a761d7c0ba Revert "Revert "Revert "[Build System: CMake] make add_swift_library a wrapper to add_llvm_library"""
This reverts commit 121f5b64be.

Sorry to revert this again. This commit makes some pretty big changes. After
messing with the merge-conflict created by this internally, I did not feel
comfortable landing this now. I talked with Saleem and he agreed with me that
this was the right thing to do.
2018-11-06 13:24:00 -08:00
Dave Lee
0829b8a4b5 [Driver] Remove unused OutputFileMap param (#20349) 2018-11-06 10:45:17 -08:00
Graydon Hoare
e272ece309 Merge pull request #20170 from graydon/text-interface-to-module
Switch from .sid files to using FILE_DEPENDENCY records in INPUT_BLOCK
2018-11-06 07:52:09 -08:00
Saleem Abdulrasool
121f5b64be Revert "Revert "[Build System: CMake] make add_swift_library a wrapper to add_llvm_library""
This reverts commit 103f9a8246.
2018-11-05 14:37:40 -08:00
Ted Kremenek
7af28e88f4 Merge pull request #19860 from spevans/pr_sr_8876
SR-8876: Always build libicu on Linux
2018-11-02 13:41:17 -07:00
Xi Ge
103f9a8246 Revert "[Build System: CMake] make add_swift_library a wrapper to add_llvm_library" 2018-11-02 12:49:07 -07:00
Simon Evans
3b2ebeecf4 SR-8876: Always build libicu on Linux
- Uses version 61.1 from ICU Github unicode-org/icu repository.

- Updates mixin_linux_installation to add libicu option.

- Use -j when building libicu.

- When buiding ICU, use --with-library-suffix=swift
  This suffixes the ICU symbols with _swift.

  The libaries are now named libicuucswift, libicui18nswift
  and libicudataswift.

- Add the contents of uconfig.h.prepend into uconfig.h. This avoids
  passing the renaming CFLAGS to swift and swift-corelibs-foundation.

Also resolves:

SR-5618: libicu compilation should happen in parallel respecting -j.
2018-11-02 17:37:12 +00:00
Graydon Hoare
4938b002b4 [ModuleInterface] Remove SwiftParseableInterfaceDeps files, use INPUT_BLOCK. 2018-11-01 10:51:16 -07:00
Saleem Abdulrasool
39dde93c88 add_swift_host_library: rename LINK_LIBRARIES to LINK_LIBS 2018-10-31 12:46:31 -07:00
David Ungar
0c2c7566c3 Merge pull request #20078 from davidungar/manual-rebasing-exp-deps
[Experimental Dependencies] Add -enable-experimental-dependencies and push it through.
2018-10-29 22:55:58 -07:00
David Ungar
19caf599cb Review fixes 2018-10-29 10:27:53 -07:00
David Ungar
1f4dfce598 Add -enable-experimental-dependencies and push it through. 2018-10-28 00:39:36 -07:00
Michael Gottesman
3f17bb6ddf Carefully split the build's invocation of add_swift_library into host/target variants.
The key thing here is that all of the underlying code is exactly the same. I
purposely did not debride anything. This is to ensure that I am not touching too
much and increasing the probability of weird errors from occurring. Thus the
exact same code should be executed... just the routing changed.
2018-10-27 12:58:51 -07:00
Saleem Abdulrasool
f85d8ae216 Merge pull request #19875 from Kaiede/i686Toolchain
Change Default Linker to Gold for x86
2018-10-23 17:34:30 -07:00
Graydon Hoare
dc006e883a [ModuleInterface] Add new SwiftParseableInterfaceDeps file type (.sid). 2018-10-18 00:31:24 -07:00
swift-ci
cb5d34e7c7 Merge pull request #19476 from drodriguez/android-aarch64-compiler 2018-10-14 19:02:23 -07:00
Adam Thayer
250aa60166 Change Default Linker to Gold for x86
For the same reasons that ARM 32-bit Linux needs gold, we should be using the same linker by default for x86/i686.
2018-10-14 12:57:35 -07:00
Graydon Hoare
410fc10045 [ModuleInterface] Conditionalize .swiftinterface loading by -enable-parseable-module-interface 2018-10-11 23:56:19 -07:00
Graydon Hoare
4f315363f8 [ModuleInterface] Change TY_SwiftModuleInterfaceFile to TY_SwiftParseableInterfaceFile 2018-10-11 23:56:19 -07:00
Graydon Hoare
29fa909d20 [Driver] Add an assert to check assumption on allowsResponseFiles. 2018-10-09 15:13:05 -07:00
Daniel Rodríguez Troitiño
02e26d2810 [android] Remove compiler check for ARMv7.
Allows the compiler to target AArch64.
2018-10-09 13:38:47 -07:00
Graydon Hoare
0f26b9c12d [Driver] <rdar://43955209> Remove obsolete/fragile batch mode 'repartitioning' code. 2018-10-09 13:31:41 -07:00
Jordan Rose
45557ee2f6 [Driver] Disallow emitting swiftinterfaces with bridging headers
There's no place to put the bridging header in a swiftinterface, and
they don't make sense with the intended use case of distribution.
Just disallow it up front.

rdar://problem/44113493
2018-10-04 18:02:09 -07:00
Jordan Rose
c38fcc1e96 [Driver] Expose -emit-parseable-module-interface[-path]
Commit to a command line option spelling so that build systems can
start testing it. I deliberately picked one of the longer names we
were considering because we can always decide to add a shorter alias,
but can't decide a shorter name was too generic.

Like the other supplementary output flags,
-emit-parseable-module-interface-path will emit a .swiftinterface file
to a particular path, while -emit-parseable-module-interface will put
it next to the main output (the one specified with -o).

rdar://problem/43776945
2018-10-04 17:50:04 -07:00
Jordan Rose
73d5ebaad2 Rename "textual interface" to "parseable interface" (#19713)
We already have something called "module interfaces" -- it's the
generated interface view that you can see in Xcode, the interface
that's meant for developers using a library. Of course, that's also a
textual format. To reduce confusion, rename the new module stability
feature to "parseable [module] interfaces".
2018-10-04 17:49:55 -07:00
Tony Allevato
0f8a765baa Add response file support for more Swift jobs. (#19449)
This enables response files for any jobs that invoke `swift` or another
toolchain tool that goes through the same driver code path, like
`swift-autolink-extract`.
2018-09-24 14:54:51 -07:00
Jordan Rose
ac4a92a968 Merge pull request #19292 from jrose-apple/get-out-the-map
Minor improvements to the use of StringMap/StringSet
2018-09-14 10:52:59 -07:00
David Ungar
3a8d4dcb26 Merge pull request #19314 from davidungar/rdar-44142091-fix-without-test
Rdar 44142091 fix without test
2018-09-14 09:09:27 -07:00
Saleem Abdulrasool
4baa775726 Merge pull request #19297 from compnerd/unreachable
litter the tree with `llvm_unreachable`
2018-09-14 09:04:56 -07:00
David Ungar
7792179925 Fix spaces in filenames in response files. 2018-09-13 22:17:34 -07:00
David Ungar
e44d8a9dfb Add -driver-force-response-files to enable testing. 2018-09-13 21:57:11 -07:00
Graydon Hoare
5a563f59af [Stats] Add SWIFTC_MAXIMUM_DETERMINISM to inhibit parallelism everywhere. 2018-09-13 16:15:49 -07:00
Saleem Abdulrasool
d281b98220 litter the tree with llvm_unreachable
This silences the instances of the warning from Visual Studio about not all
codepaths returning a value.  This makes the output more readable and less
likely to lose useful warnings.  NFC.
2018-09-13 15:26:14 -07:00
Jordan Rose
71760bcc4e Replace StringMap with DenseMap when the keys don't need to be owned
StringMap always copies its strings into its own storage. A DenseMap
of StringRefs has the same caveats as any other use of StringRef, but
in the cases I've changed the string has very clear ownership that
outlives the map.

No functionality change, but should reduce memory usage and malloc
traffic a little.
2018-09-13 15:15:27 -07:00
Doug Gregor
e670ac42d9 Add command-line option -warn-implicit-overrides.
When provided, this flag warns about implicit overrides, where a
declaration overrides another declaration but is not marked with the
‘override’ keyword. The warning can be suppressed by either providing
‘override’ or ‘@_nonoverride’.

At present, this only happens with overrides in protocols.
2018-09-04 16:42:06 -07:00
Jordan Rose
6ffe644cfc Merge pull request #18973 from jrose-apple/interfacepalm
Generate swiftinterface files next to the stdlib swiftmodules, for testing purposes.
2018-08-28 14:56:02 -07:00
Jordan Rose
e4e4f3e4f5 Break Driver's dep on Frontend: make createCompilerInvocation uglier
But not even that much uglier; at all three call sites this will save
an allocation, and for the most important one (SourceKit) we can now
avoid creating a temporary CompilerInvocation just to copy into a
longer-lived one.

With this change, Driver no longer depends on Frontend, which means...
well, slightly faster builds of the compiler itself, but not much
else.
2018-08-27 20:47:58 -07:00
Jordan Rose
e224e31720 Break almost all dependencies of Driver on Frontend
- Sink OutputFileMap{.h,.cpp} and ReferenceDependencyKeys.h to Basic
- Remove unnecessary includes of Frontend.h.
2018-08-27 20:47:58 -07:00
Jordan Rose
845e8bef5f [Driver] Add -experimental-emit-interface for textual interfaces
This will eventually become plain old -emit-interface, but we don't
want people to be using it just yet. This is just for testing.
2018-08-24 18:02:48 -07:00
Jordan Rose
4d9b85b670 [Driver] Drop redundant arguments in various helper functions
The OutputInfo, ToolChain, and Triple can all be retrieved from the
Compilation, so now that we're passing one of those around we don't
need to pass the others explicitly.

No functionality change.
2018-08-24 18:02:48 -07:00
Shoaib Meenai
4b9a1b510c [cmake] Clean up FindICU.cmake
- Get rid of the singular (*_INCLUDE_DIR and *_LIBRARY) variables and
  standardize on the plural ones, since that's also what's used by
  CMake's FindICU module (which was added in 3.7).
- Use PKG_CONFIG_FOUND instead of PKGCONFIG_FOUND, since that's what's
  documented in CMake's FindPkgConfig module. (The latter will be set by
  the find_package call, so it's not incorrect, but it's clearer to use
  the documented variable.)
- Search for the headers and libraries even if pkg-config can't find the
  module, since e.g. we might have ICU somewhere in our CMake search
  path but might not have the pkg-config module for it. We're only using
  the pkg-config results as search hints anyway. (This might result in
  an empty HINTS argument to find_path and find_library, but CMake seems
  to handle that fine.) *This should be the only functional change.*
- Remove ICU_${MODULE}_DEFINITIONS, since it's never used anywhere.
- Don't add the *_INCLUDEDIR and *_LIBDIR variables to the hints, since
  they should be the same as the corresponding *_INCLUDE_DIRS and
  *_LIBRARY_DIRS variables (since we're only searching for a single
  module).

The only intended functional change, as mentioned above, is that we can
now successfully find ICU if its include and library directories are in
the CMake search path but its pkg-config module isn't, which might be
the case in certain cross-compilation or hermetic build scenarios. (It's
compounded by CMake only looking for pkg-config modules in
CMAKE_PREFIX_PATH and not CMAKE_SYSTEM_PREFIX_PATH, which I asked about
in https://cmake.org/pipermail/cmake/2018-August/068109.html).
2018-08-24 12:48:09 -07:00
swift-ci
71f0248b0a Merge remote-tracking branch 'origin/master' into master-next 2018-08-06 11:07:55 -07:00
Jordan Rose
634cf7e4a0 Merge pull request #18266 from keith/ks/linker-order
Unify linker argument order across platforms
2018-08-06 08:36:53 -07:00
swift-ci
c648e2d214 Merge remote-tracking branch 'origin/master' into master-next 2018-07-31 08:50:06 -07:00
Graydon Hoare
ff88c7f369 Merge pull request #18362 from graydon/rdar-41271283-batch-mode-limit-memory-pressure-on-large-modules
[BatchMode] <rdar://41271283> Limit memory pressure on large modules.
2018-07-31 08:46:35 -07:00
swift-ci
f7b8996498 Merge remote-tracking branch 'origin/master' into master-next 2018-07-30 20:59:23 -07:00