Skip to content

Commit 4d7babd

Browse files
authored
---
yaml --- r: 348796 b: refs/heads/master c: 4b646bf h: refs/heads/master
1 parent d9a1e5e commit 4d7babd

File tree

5 files changed

+76
-193
lines changed

5 files changed

+76
-193
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 085439781b3aff4b19eeb8b23bd83f954e178eec
2+
refs/heads/master: 4b646bff4cfd1d13efb2d775f812176bc7009f23
33
refs/heads/master-next: 203b3026584ecad859eb328b2e12490099409cd5
44
refs/tags/osx-passed: b6b74147ef8a386f532cf9357a1bde006e552c54
55
refs/tags/swift-2.2-SNAPSHOT-2015-12-01-a: 6bb18e013c2284f2b45f5f84f2df2887dc0f7dea

trunk/lib/AST/GenericSignatureBuilder.cpp

Lines changed: 0 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -599,127 +599,6 @@ namespace {
599599
};
600600
}
601601

602-
namespace std {
603-
// FIXME: Egregious hack to work around a bogus static_assert in
604-
// llvm::GraphWriter. Good thing nobody else cares about this trait...
605-
template<>
606-
struct is_pointer<EquivalenceClassVizNode>
607-
: std::integral_constant<bool, true> { };
608-
}
609-
610-
namespace llvm {
611-
// Visualize the same-type constraints within an equivalence class.
612-
template<>
613-
struct GraphTraits<const EquivalenceClass *> {
614-
using NodeRef = EquivalenceClassVizNode;
615-
616-
static NodeRef getEntryNode(const EquivalenceClass *equivClass) {
617-
return { equivClass, equivClass->members.front()->getDependentType({ }) };
618-
}
619-
620-
class nodes_iterator {
621-
using BaseIterator = PotentialArchetype * const *;
622-
623-
const EquivalenceClass *equivClass;
624-
BaseIterator base;
625-
626-
public:
627-
using difference_type = ptrdiff_t;
628-
using value_type = EquivalenceClassVizNode;
629-
using reference = value_type;
630-
using pointer = value_type*;
631-
using iterator_category = std::forward_iterator_tag;
632-
633-
nodes_iterator(const EquivalenceClass *equivClass, BaseIterator base)
634-
: equivClass(equivClass), base(base) { }
635-
636-
BaseIterator &getBase() { return base; }
637-
const BaseIterator &getBase() const { return base; }
638-
639-
reference operator*() const {
640-
return { equivClass, (*getBase())->getDependentType({ }) };
641-
}
642-
643-
nodes_iterator& operator++() {
644-
++getBase();
645-
return *this;
646-
}
647-
648-
nodes_iterator operator++(int) {
649-
nodes_iterator result = *this;
650-
++(*this);
651-
return result;
652-
}
653-
654-
friend bool operator==(const nodes_iterator &lhs,
655-
const nodes_iterator &rhs) {
656-
return lhs.getBase() == rhs.getBase();
657-
}
658-
659-
friend bool operator!=(const nodes_iterator &lhs,
660-
const nodes_iterator &rhs) {
661-
return lhs.getBase() != rhs.getBase();
662-
}
663-
};
664-
665-
static nodes_iterator nodes_begin(const EquivalenceClass *equivClass) {
666-
return nodes_iterator(equivClass, equivClass->members.begin());
667-
}
668-
669-
static nodes_iterator nodes_end(const EquivalenceClass *equivClass) {
670-
return nodes_iterator(equivClass, equivClass->members.end());
671-
}
672-
673-
static unsigned size(const EquivalenceClass *equivClass) {
674-
return equivClass->members.size();
675-
}
676-
677-
using ChildIteratorType = EquivalenceClassVizIterator;
678-
679-
static ChildIteratorType child_begin(NodeRef node) {
680-
auto base = node.first->sameTypeConstraints.data();
681-
auto baseEnd = base + node.first->sameTypeConstraints.size();
682-
return ChildIteratorType(node, base, baseEnd);
683-
}
684-
685-
static ChildIteratorType child_end(NodeRef node) {
686-
auto base = node.first->sameTypeConstraints.data();
687-
auto baseEnd = base + node.first->sameTypeConstraints.size();
688-
return ChildIteratorType(node, baseEnd, baseEnd);
689-
}
690-
};
691-
692-
template <>
693-
struct DOTGraphTraits<const EquivalenceClass *>
694-
: public DefaultDOTGraphTraits
695-
{
696-
DOTGraphTraits(bool = false) { }
697-
698-
static std::string getGraphName(const EquivalenceClass *equivClass) {
699-
return "Equivalence class for '" +
700-
equivClass->members.front()->getDebugName() + "'";
701-
}
702-
703-
std::string getNodeLabel(EquivalenceClassVizNode node,
704-
const EquivalenceClass *equivClass) const {
705-
return node.second.getString();
706-
}
707-
708-
static std::string getEdgeAttributes(EquivalenceClassVizNode node,
709-
EquivalenceClassVizIterator iter,
710-
const EquivalenceClass *equivClass) {
711-
if (iter.getBase()->source->kind
712-
== RequirementSource::NestedTypeNameMatch)
713-
return "color=\"blue\"";
714-
715-
if (iter.getBase()->source->isDerivedRequirement())
716-
return "color=\"gray\"";
717-
718-
return "color=\"red\"";
719-
}
720-
};
721-
} // end namespace llvm
722-
723602
namespace {
724603
/// Retrieve the type described by the given unresolved tyoe.
725604
Type getUnresolvedType(GSBUnresolvedType type,
@@ -2370,37 +2249,6 @@ void EquivalenceClass::dump(llvm::raw_ostream &out,
23702249
rewriteRoot->dump(out);
23712250
}
23722251
}
2373-
2374-
{
2375-
out << "---GraphViz output for same-type constraints---\n";
2376-
2377-
// Render the output
2378-
std::string graphviz;
2379-
{
2380-
llvm::raw_string_ostream graphvizOut(graphviz);
2381-
llvm::WriteGraph(graphvizOut, this);
2382-
}
2383-
2384-
// Clean up the output to turn it into an undirected graph.
2385-
// FIXME: This is horrible, GraphWriter should be able to support
2386-
// undirected graphs.
2387-
auto digraphPos = graphviz.find("digraph");
2388-
if (digraphPos != std::string::npos) {
2389-
// digraph -> graph
2390-
graphviz.erase(graphviz.begin() + digraphPos,
2391-
graphviz.begin() + digraphPos + 2);
2392-
}
2393-
2394-
// Directed edges to undirected edges: -> to --
2395-
while (true) {
2396-
auto arrowPos = graphviz.find("->");
2397-
if (arrowPos == std::string::npos) break;
2398-
2399-
graphviz.replace(arrowPos, 2, "--");
2400-
}
2401-
2402-
out << graphviz;
2403-
}
24042252
}
24052253

24062254
void EquivalenceClass::dump(GenericSignatureBuilder *builder) const {

trunk/lib/IRGen/GenObjC.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,11 @@ IRGenModule::getObjCProtocolGlobalVars(ProtocolDecl *proto) {
364364
protocolLabel->setSection(GetObjCSectionName("__objc_protolist",
365365
"coalesced,no_dead_strip"));
366366

367+
// Mark used to prevent DCE of public unreferenced protocols to ensure
368+
// that they are available for external use when a used module is used
369+
// as a library.
370+
addUsedGlobal(protocolLabel);
371+
367372
// Introduce a variable to reference the protocol.
368373
auto *protocolRef =
369374
new llvm::GlobalVariable(Module, Int8PtrTy, /*constant*/ false,
@@ -375,6 +380,11 @@ IRGenModule::getObjCProtocolGlobalVars(ProtocolDecl *proto) {
375380
protocolRef->setSection(GetObjCSectionName("__objc_protorefs",
376381
"coalesced,no_dead_strip"));
377382

383+
// Mark used to prevent DCE of public unreferenced protocols to ensure
384+
// that they are available for external use when a used module is used
385+
// as a library.
386+
addUsedGlobal(protocolRef);
387+
378388
ObjCProtocolPair pair{protocolRecord, protocolRef};
379389
ObjCProtocols.insert({proto, pair});
380390

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -enable-objc-interop -parse-as-library -emit-ir %s | %FileCheck %s
2+
3+
// It tests whether the vars @"\01l_OBJC_LABEL_PROTOCOL_$__TtP18objc_protocol_vars1T_"
4+
// and @"\01l_OBJC_PROTOCOL_REFERENCE_$__TtP18objc_protocol_vars1T_" are in llvm.used.
5+
//
6+
// import Foundation
7+
// @objc
8+
// public protocol T: AnyObject {
9+
//
10+
// var current: Int32 { get }
11+
//
12+
// func clone() -> T
13+
//
14+
//}
15+
sil_stage canonical
16+
17+
import Builtin
18+
import Swift
19+
import SwiftShims
20+
21+
import Foundation
22+
23+
@objc public protocol T : AnyObject {
24+
@objc var current: Int32 { get }
25+
@objc func clone() -> T
26+
}
27+
28+
// CHECK: @llvm.used = appending global [{{.*}}] [{{.*}}, i8* bitcast (i8** @"\01l_OBJC_LABEL_PROTOCOL_$__TtP18objc_protocol_vars1T_" to i8*), i8* bitcast (i8** @"\01l_OBJC_PROTOCOL_REFERENCE_$__TtP18objc_protocol_vars1T_" to i8*), {{.*}}], {{.*}}
29+

trunk/utils/build-windows.bat

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ cmake "%source_root%\llvm"^
145145
-DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE%^
146146
-DCMAKE_C_COMPILER=cl^
147147
-DCMAKE_CXX_COMPILER=cl^
148-
-DCMAKE_INSTALL_PREFIX=%install_directory%^
148+
-DCMAKE_INSTALL_PREFIX:PATH=%install_directory%^
149149
-DLLVM_DEFAULT_TARGET_TRIPLE=x86_64-unknown-windows-msvc^
150150
-DLLVM_ENABLE_PDB:BOOL=YES^
151151
-DLLVM_ENABLE_ASSERTIONS:BOOL=YES^
@@ -215,27 +215,27 @@ cmake "%source_root%\swift"^
215215
-DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE%^
216216
-DCMAKE_C_COMPILER=cl^
217217
-DCMAKE_CXX_COMPILER=cl^
218-
-DCMAKE_INSTALL_PREFIX=%install_directory%^
219-
-DClang_DIR=%build_root%\llvm\lib\cmake\clang^
220-
-DSWIFT_PATH_TO_CMARK_BUILD=%build_root%\cmark^
221-
-DSWIFT_PATH_TO_CMARK_SOURCE=%source_root%\cmark^
222-
-DSWIFT_PATH_TO_LIBDISPATCH_SOURCE=%source_root%\swift-corelibs-libdispatch^
223-
-DLLVM_DIR=%build_root%\llvm\lib\cmake\llvm^
224-
-DSWIFT_INCLUDE_DOCS=NO^
225-
-DSWIFT_WINDOWS_x86_64_ICU_UC_INCLUDE=%source_root%\icu-%icu_version%\include\unicode^
226-
-DSWIFT_WINDOWS_x86_64_ICU_UC=%source_root%\icu-%icu_version%\lib64\icuuc.lib^
227-
-DSWIFT_WINDOWS_x86_64_ICU_I18N_INCLUDE=%source_root%\icu-%icu_version%\include^
228-
-DSWIFT_WINDOWS_x86_64_ICU_I18N=%source_root%\icu-%icu_version%\lib64\icuin.lib^
229-
-DSWIFT_BUILD_DYNAMIC_STDLIB=YES^
230-
-DSWIFT_BUILD_DYNAMIC_SDK_OVERLAY=YES^
231-
-DSWIFT_BUILD_STATIC_STDLIB=NO^
232-
-DSWIFT_BUILD_STATIC_SDK_OVERLAY=NO^
233-
-DLLVM_INSTALL_TOOLCHAIN_ONLY=YES^
234-
-DSWIFT_BUILD_SOURCEKIT=YES^
235-
-DSWIFT_ENABLE_SOURCEKIT_TESTS=NO^
218+
-DCMAKE_INSTALL_PREFIX:PATH=%install_directory%^
219+
-DClang_DIR:PATH=%build_root%\llvm\lib\cmake\clang^
220+
-DSWIFT_PATH_TO_CMARK_BUILD:PATH=%build_root%\cmark^
221+
-DSWIFT_PATH_TO_CMARK_SOURCE:PATH=%source_root%\cmark^
222+
-DSWIFT_PATH_TO_LIBDISPATCH_SOURCE:PATH=%source_root%\swift-corelibs-libdispatch^
223+
-DLLVM_DIR:PATH=%build_root%\llvm\lib\cmake\llvm^
224+
-DSWIFT_INCLUDE_DOCS:BOOL=NO^
225+
-DSWIFT_WINDOWS_x86_64_ICU_UC_INCLUDE:PATH=%source_root%\icu-%icu_version%\include\unicode^
226+
-DSWIFT_WINDOWS_x86_64_ICU_UC:PATH=%source_root%\icu-%icu_version%\lib64\icuuc.lib^
227+
-DSWIFT_WINDOWS_x86_64_ICU_I18N_INCLUDE:PATH=%source_root%\icu-%icu_version%\include^
228+
-DSWIFT_WINDOWS_x86_64_ICU_I18N:PATH=%source_root%\icu-%icu_version%\lib64\icuin.lib^
229+
-DSWIFT_BUILD_DYNAMIC_STDLIB:BOOL=YES^
230+
-DSWIFT_BUILD_DYNAMIC_SDK_OVERLAY:BOOL=YES^
231+
-DSWIFT_BUILD_STATIC_STDLIB:BOOL=NO^
232+
-DSWIFT_BUILD_STATIC_SDK_OVERLAY:BOOL=NO^
233+
-DLLVM_INSTALL_TOOLCHAIN_ONLY:BOOL=YES^
234+
-DSWIFT_BUILD_SOURCEKIT:BOOL=YES^
235+
-DSWIFT_ENABLE_SOURCEKIT_TESTS:BOOL=NO^
236236
-DSWIFT_INSTALL_COMPONENTS="autolink-driver;compiler;clang-resource-dir-symlink;stdlib;sdk-overlay;editor-integration;tools;sourcekit-inproc;swift-remote-mirror;swift-remote-mirror-headers"^
237237
-DSWIFT_PARALLEL_LINK_JOBS=8^
238-
-DPYTHON_EXECUTABLE=%PYTHON_HOME%\python.exe^
238+
-DPYTHON_EXECUTABLE:PATH=%PYTHON_HOME%\python.exe^
239239
-DCMAKE_CXX_FLAGS:STRING="/GS- /Oy"^
240240
-DCMAKE_EXE_LINKER_FLAGS:STRING=/INCREMENTAL:NO^
241241
-DCMAKE_SHARED_LINKER_FLAGS:STRING=/INCREMENTAL:NO %exitOnError%
@@ -271,21 +271,17 @@ cmake "%source_root%\lldb"^
271271
-DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE%^
272272
-DCMAKE_C_COMPILER=clang-cl^
273273
-DCMAKE_CXX_COMPILER=clang-cl^
274-
-DCMAKE_INSTALL_PREFIX=%install_directory%^
275-
-DLLDB_PATH_TO_CMARK_SOURCE=%source_root%\cmark^
276-
-DLLDB_PATH_TO_CLANG_SOURCE=%source_root%\clang^
277-
-DLLDB_PATH_TO_LLVM_SOURCE=%source_root%\llvm^
278-
-DLLDB_PATH_TO_SWIFT_SOURCE=%source_root%\swift^
279-
-DLLDB_PATH_TO_CMARK_BUILD=%build_root%\cmark^
280-
-DLLDB_PATH_TO_CLANG_BUILD=%build_root%\llvm^
281-
-DLLDB_PATH_TO_LLVM_BUILD=%build_root%\llvm^
282-
-DLLDB_PATH_TO_SWIFT_BUILD=%build_root%\swift^
283-
-DLLVM_ENABLE_ASSERTIONS=YES^
284-
-DLLVM_ALLOW_STATIC_BINDINGS=YES^
285-
-DPYTHON_HOME=%PYTHON_HOME%^
274+
-DCMAKE_INSTALL_PREFIX:PATH=%install_directory%^
275+
-DLLVM_DIR:PATH=%build_root%\llvm\lib\cmake\llvm^
276+
-DClang_DIR:PATH=%build_root%\llvm\lib\cmake\clang^
277+
-DSwift_DIR:PATH=%build_root%\swift\lib\cmake\swift^
278+
-DLLVM_ENABLE_ASSERTIONS:BOOL=YES^
279+
-DLLDB_ALLOW_STATIC_BINDINGS:BOOL=YES^
280+
-DPYTHON_HOME:PATH=%PYTHON_HOME%^
286281
-DCMAKE_CXX_FLAGS:STRING="/GS- /Oy"^
287282
-DCMAKE_EXE_LINKER_FLAGS:STRING=/INCREMENTAL:NO^
288-
-DCMAKE_SHARED_LINKER_FLAGS:STRING=/INCREMENTAL:NO %exitOnError%
283+
-DCMAKE_SHARED_LINKER_FLAGS:STRING=/INCREMENTAL:NO^
284+
-DLLDB_INCLUDE_TESTS:BOOL=NO %exitOnError%
289285

290286
popd
291287

@@ -296,7 +292,7 @@ goto :eof
296292
endlocal
297293

298294

299-
:build_lldb
295+
:build_libdispatch
300296
:: Configures, builds, and installs Dispatch
301297
setlocal enableextensions enabledelayedexpansion
302298

@@ -308,13 +304,13 @@ cmake "%source_root%\swift-corelibs-libdispatch"^
308304
-DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE%^
309305
-DCMAKE_C_COMPILER=clang-cl^
310306
-DCMAKE_CXX_COMPILER=clang-cl^
311-
-DCMAKE_SWIFT_COMPILER=%install_directory%\bin\swiftc.exe^
312-
-DSwift_DIR=%build_root%\swift\lib\cmake\swift^
313-
-DCMAKE_INSTALL_PREFIX=%install_directory%^
314-
-DBUILD_SHARED_LIBS=YES^
315-
-DENABLE_TESTING=NO^
307+
-DCMAKE_SWIFT_COMPILER:PATH=%install_directory%\bin\swiftc.exe^
308+
-DSwift_DIR:PATH=%build_root%\swift\lib\cmake\swift^
309+
-DCMAKE_INSTALL_PREFIX:PATH=%install_directory%^
310+
-DBUILD_SHARED_LIBS:BOOL=YES^
311+
-DENABLE_TESTING:BOOL=NO^
316312
-DCMAKE_C_COMPILER_TARGET=x86_64-unknown-windows-msvc^
317-
-DENABLE_SWIFT=YES^
313+
-DENABLE_SWIFT:BOOL=YES^
318314
-DCMAKE_CXX_FLAGS:STRING="/GS- /Oy"^
319315
-DCMAKE_EXE_LINKER_FLAGS:STRING=/INCREMENTAL:NO^
320316
-DCMAKE_SHARED_LINKER_FLAGS:STRING=/INCREMENTAL:NO %exitOnError%

0 commit comments

Comments
 (0)