Skip to content

Commit d9a1e5e

Browse files
committed
---
yaml --- r: 348795 b: refs/heads/master c: 0854397 h: refs/heads/master i: 348793: d6cffc9 348791: e7e3726
1 parent 93d7cfa commit d9a1e5e

File tree

6 files changed

+196
-79
lines changed

6 files changed

+196
-79
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: 333f0db8b221ba084b8c59b96f7f784b7b0a856c
2+
refs/heads/master: 085439781b3aff4b19eeb8b23bd83f954e178eec
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: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,127 @@ 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+
602723
namespace {
603724
/// Retrieve the type described by the given unresolved tyoe.
604725
Type getUnresolvedType(GSBUnresolvedType type,
@@ -2249,6 +2370,37 @@ void EquivalenceClass::dump(llvm::raw_ostream &out,
22492370
rewriteRoot->dump(out);
22502371
}
22512372
}
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+
}
22522404
}
22532405

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

trunk/lib/IRGen/GenObjC.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -364,11 +364,6 @@ 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-
372367
// Introduce a variable to reference the protocol.
373368
auto *protocolRef =
374369
new llvm::GlobalVariable(Module, Int8PtrTy, /*constant*/ false,
@@ -380,11 +375,6 @@ IRGenModule::getObjCProtocolGlobalVars(ProtocolDecl *proto) {
380375
protocolRef->setSection(GetObjCSectionName("__objc_protorefs",
381376
"coalesced,no_dead_strip"));
382377

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-
388378
ObjCProtocolPair pair{protocolRecord, protocolRef};
389379
ObjCProtocols.insert({proto, pair});
390380

trunk/lib/SILOptimizer/Mandatory/OSLogOptimization.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -792,10 +792,10 @@ bool isAutoGeneratedInitOfOSLogMessage(SILFunction &fun) {
792792
Decl *decl = declContext->getAsDecl();
793793
if (!decl)
794794
return false;
795-
ConstructorDecl *cdecl = dyn_cast<ConstructorDecl>(decl);
796-
if (!cdecl)
795+
ConstructorDecl *ctor = dyn_cast<ConstructorDecl>(decl);
796+
if (!ctor)
797797
return false;
798-
DeclContext *parentContext = cdecl->getParent();
798+
DeclContext *parentContext = ctor->getParent();
799799
if (!parentContext)
800800
return false;
801801
NominalTypeDecl *typeDecl = parentContext->getSelfNominalTypeDecl();

trunk/test/IRGen/objc_protocol_vars.sil

Lines changed: 0 additions & 29 deletions
This file was deleted.

trunk/utils/build-windows.bat

Lines changed: 40 additions & 36 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:PATH=%install_directory%^
148+
-DCMAKE_INSTALL_PREFIX=%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: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^
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^
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:PATH=%PYTHON_HOME%\python.exe^
238+
-DPYTHON_EXECUTABLE=%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,17 +271,21 @@ 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: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%^
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%^
281286
-DCMAKE_CXX_FLAGS:STRING="/GS- /Oy"^
282287
-DCMAKE_EXE_LINKER_FLAGS:STRING=/INCREMENTAL:NO^
283-
-DCMAKE_SHARED_LINKER_FLAGS:STRING=/INCREMENTAL:NO^
284-
-DLLDB_INCLUDE_TESTS:BOOL=NO %exitOnError%
288+
-DCMAKE_SHARED_LINKER_FLAGS:STRING=/INCREMENTAL:NO %exitOnError%
285289

286290
popd
287291

@@ -292,7 +296,7 @@ goto :eof
292296
endlocal
293297

294298

295-
:build_libdispatch
299+
:build_lldb
296300
:: Configures, builds, and installs Dispatch
297301
setlocal enableextensions enabledelayedexpansion
298302

@@ -304,13 +308,13 @@ cmake "%source_root%\swift-corelibs-libdispatch"^
304308
-DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE%^
305309
-DCMAKE_C_COMPILER=clang-cl^
306310
-DCMAKE_CXX_COMPILER=clang-cl^
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^
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^
312316
-DCMAKE_C_COMPILER_TARGET=x86_64-unknown-windows-msvc^
313-
-DENABLE_SWIFT:BOOL=YES^
317+
-DENABLE_SWIFT=YES^
314318
-DCMAKE_CXX_FLAGS:STRING="/GS- /Oy"^
315319
-DCMAKE_EXE_LINKER_FLAGS:STRING=/INCREMENTAL:NO^
316320
-DCMAKE_SHARED_LINKER_FLAGS:STRING=/INCREMENTAL:NO %exitOnError%

0 commit comments

Comments
 (0)