Skip to content

Commit fd48c02

Browse files
committed
---
yaml --- r: 346742 b: refs/heads/master c: 8b49988 h: refs/heads/master
1 parent d42fc82 commit fd48c02

16 files changed

+459
-303
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: 248efb2bfb976702127fbeb300fae7c164ba07c4
2+
refs/heads/master: 8b4998825a8af7bf2753f75a11f8dfff9aa45ddd
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/include/swift/Runtime/Metadata.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,14 @@ void swift_initClassMetadata(ClassMetadata *self,
597597
const TypeLayout * const *fieldTypes,
598598
size_t *fieldOffsets);
599599

600+
SWIFT_RUNTIME_EXPORT SWIFT_CC(swift)
601+
MetadataDependency
602+
swift_initClassMetadata2(ClassMetadata *self,
603+
ClassLayoutFlags flags,
604+
size_t numFields,
605+
const TypeLayout * const *fieldTypes,
606+
size_t *fieldOffsets);
607+
600608
#if SWIFT_OBJC_INTEROP
601609
/// Initialize various fields of the class metadata.
602610
///
@@ -612,6 +620,14 @@ void swift_updateClassMetadata(ClassMetadata *self,
612620
size_t numFields,
613621
const TypeLayout * const *fieldTypes,
614622
size_t *fieldOffsets);
623+
624+
SWIFT_RUNTIME_EXPORT SWIFT_CC(swift)
625+
MetadataDependency
626+
swift_updateClassMetadata2(ClassMetadata *self,
627+
ClassLayoutFlags flags,
628+
size_t numFields,
629+
const TypeLayout * const *fieldTypes,
630+
size_t *fieldOffsets);
615631
#endif
616632

617633
/// Given class metadata, a class descriptor and a method descriptor, look up

trunk/include/swift/Runtime/RuntimeFunctions.def

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,6 +808,34 @@ FUNCTION(UpdateClassMetadata,
808808
SizeTy->getPointerTo()),
809809
ATTRS(NoUnwind))
810810

811+
// struct FieldInfo { size_t Size; size_t AlignMask; };
812+
// MetadataDependency swift_initClassMetadata2(Metadata *self,
813+
// ClassLayoutFlags flags,
814+
// size_t numFields,
815+
// TypeLayout * const *fieldTypes,
816+
// size_t *fieldOffsets);
817+
FUNCTION(InitClassMetadata2,
818+
swift_initClassMetadata2, SwiftCC,
819+
RETURNS(TypeMetadataDependencyTy),
820+
ARGS(TypeMetadataPtrTy, SizeTy, SizeTy,
821+
Int8PtrPtrTy->getPointerTo(),
822+
SizeTy->getPointerTo()),
823+
ATTRS(NoUnwind))
824+
825+
// struct FieldInfo { size_t Size; size_t AlignMask; };
826+
// MetadataDependency swift_updateClassMetadata2(Metadata *self,
827+
// ClassLayoutFlags flags,
828+
// size_t numFields,
829+
// TypeLayout * const *fieldTypes,
830+
// size_t *fieldOffsets);
831+
FUNCTION(UpdateClassMetadata2,
832+
swift_updateClassMetadata2, SwiftCC,
833+
RETURNS(TypeMetadataDependencyTy),
834+
ARGS(TypeMetadataPtrTy, SizeTy, SizeTy,
835+
Int8PtrPtrTy->getPointerTo(),
836+
SizeTy->getPointerTo()),
837+
ATTRS(NoUnwind))
838+
811839
// void *swift_lookUpClassMethod(Metadata *metadata,
812840
// ClassDescriptor *description,
813841
// MethodDescriptor *method);

trunk/lib/Sema/CSGen.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,20 +1429,27 @@ namespace {
14291429
diag::super_with_no_base_class);
14301430
}
14311431

1432-
Type resolveTypeReferenceInExpression(TypeRepr *rep) {
1432+
Type resolveTypeReferenceInExpression(TypeRepr *repr) {
1433+
TypeLoc loc(repr);
1434+
return resolveTypeReferenceInExpression(loc);
1435+
}
1436+
1437+
Type resolveTypeReferenceInExpression(TypeLoc &loc) {
14331438
TypeResolutionOptions options(TypeResolverContext::InExpression);
14341439
options |= TypeResolutionFlags::AllowUnboundGenerics;
1435-
return TypeResolution::forContextual(CS.DC).resolveType(rep,
1436-
options);
1440+
bool hadError = CS.TC.validateType(
1441+
loc, TypeResolution::forContextual(CS.DC), options);
1442+
return hadError ? Type() : loc.getType();
14371443
}
14381444

14391445
Type visitTypeExpr(TypeExpr *E) {
14401446
Type type;
14411447
// If this is an implicit TypeExpr, don't validate its contents.
1442-
if (E->getTypeLoc().wasValidated()) {
1443-
type = E->getTypeLoc().getType();
1444-
} else if (auto *rep = E->getTypeRepr()) {
1445-
type = resolveTypeReferenceInExpression(rep);
1448+
auto &typeLoc = E->getTypeLoc();
1449+
if (typeLoc.wasValidated()) {
1450+
type = typeLoc.getType();
1451+
} else if (typeLoc.hasLocation()) {
1452+
type = resolveTypeReferenceInExpression(typeLoc);
14461453
}
14471454

14481455
if (!type || type->hasError()) return Type();

trunk/lib/Sema/TypeCheckPattern.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -773,13 +773,6 @@ static bool validateParameterType(ParamDecl *decl, TypeResolution resolution,
773773
}
774774
}
775775

776-
// If this parameter declaration is marked as `@autoclosure`
777-
// let's make sure that its parameter type is indeed a function,
778-
// this decision couldn't be made based on type representative
779-
// alone because it may be later resolved into an invalid type.
780-
if (decl->isAutoClosure())
781-
hadError |= !(Ty && Ty->is<FunctionType>());
782-
783776
if (hadError)
784777
TL.setInvalidType(TC.Context);
785778

0 commit comments

Comments
 (0)