[clang] 8fb7cfc - Revert "[ObjC generics] Fix not inheriting type bounds in categories/extensions."
Volodymyr Sapsai via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 7 17:43:30 PDT 2020
Author: Volodymyr Sapsai
Date: 2020-04-07T17:41:30-07:00
New Revision: 8fb7cfcea97af440830d256cc18ccd978f218e1d
URL: https://github.com/llvm/llvm-project/commit/8fb7cfcea97af440830d256cc18ccd978f218e1d
DIFF: https://github.com/llvm/llvm-project/commit/8fb7cfcea97af440830d256cc18ccd978f218e1d.diff
LOG: Revert "[ObjC generics] Fix not inheriting type bounds in categories/extensions."
This reverts commit a8c8b627f23f204fb621bd2a8c495cfc8bc16ae7. It causes
intermittent
Clang :: SemaObjC/parameterized_classes_subst.m
test failures on various bots.
Added:
Modified:
clang/include/clang/AST/ASTContext.h
clang/lib/AST/ASTContext.cpp
clang/lib/AST/Type.cpp
clang/lib/Sema/SemaDeclObjC.cpp
clang/test/SemaObjC/parameterized_classes_collection_literal.m
clang/test/SemaObjC/parameterized_classes_subst.m
Removed:
################################################################################
diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h
index 6360f18217c7..6813ab58874e 100644
--- a/clang/include/clang/AST/ASTContext.h
+++ b/clang/include/clang/AST/ASTContext.h
@@ -1442,8 +1442,6 @@ class ASTContext : public RefCountedBase<ASTContext> {
QualType getObjCTypeParamType(const ObjCTypeParamDecl *Decl,
ArrayRef<ObjCProtocolDecl *> protocols) const;
- void adjustObjCTypeParamBoundType(const ObjCTypeParamDecl *Orig,
- ObjCTypeParamDecl *New) const;
bool ObjCObjectAdoptsQTypeProtocols(QualType QT, ObjCInterfaceDecl *Decl);
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp
index 06dcb6fa0580..1e81e0a67b4d 100644
--- a/clang/lib/AST/ASTContext.cpp
+++ b/clang/lib/AST/ASTContext.cpp
@@ -4874,17 +4874,6 @@ ASTContext::getObjCTypeParamType(const ObjCTypeParamDecl *Decl,
return QualType(newType, 0);
}
-void ASTContext::adjustObjCTypeParamBoundType(const ObjCTypeParamDecl *Orig,
- ObjCTypeParamDecl *New) const {
- New->setTypeSourceInfo(getTrivialTypeSourceInfo(Orig->getUnderlyingType()));
- // Update TypeForDecl after updating TypeSourceInfo.
- auto NewTypeParamTy = cast<ObjCTypeParamType>(New->getTypeForDecl());
- SmallVector<ObjCProtocolDecl *, 8> protocols;
- protocols.append(NewTypeParamTy->qual_begin(), NewTypeParamTy->qual_end());
- QualType UpdatedTy = getObjCTypeParamType(New, protocols);
- New->setTypeForDecl(UpdatedTy.getTypePtr());
-}
-
/// ObjCObjectAdoptsQTypeProtocols - Checks that protocols in IC's
/// protocol list adopt all protocols in QT's qualified-id protocol
/// list.
diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp
index 7c65378261ad..3428437c3146 100644
--- a/clang/lib/AST/Type.cpp
+++ b/clang/lib/AST/Type.cpp
@@ -3534,7 +3534,6 @@ void ObjCTypeParamType::Profile(llvm::FoldingSetNodeID &ID,
const ObjCTypeParamDecl *OTPDecl,
ArrayRef<ObjCProtocolDecl *> protocols) {
ID.AddPointer(OTPDecl);
- ID.AddPointer(OTPDecl->getUnderlyingType().getAsOpaquePtr());
ID.AddInteger(protocols.size());
for (auto proto : protocols)
ID.AddPointer(proto);
diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp
index 6db57898e378..934e1a23141c 100644
--- a/clang/lib/Sema/SemaDeclObjC.cpp
+++ b/clang/lib/Sema/SemaDeclObjC.cpp
@@ -938,7 +938,8 @@ static bool checkTypeParamListConsistency(Sema &S,
// Override the new type parameter's bound type with the previous type,
// so that it's consistent.
- S.Context.adjustObjCTypeParamBoundType(prevTypeParam, newTypeParam);
+ newTypeParam->setTypeSourceInfo(
+ S.Context.getTrivialTypeSourceInfo(prevTypeParam->getUnderlyingType()));
continue;
}
@@ -965,7 +966,8 @@ static bool checkTypeParamListConsistency(Sema &S,
}
// Update the new type parameter's bound to match the previous one.
- S.Context.adjustObjCTypeParamBoundType(prevTypeParam, newTypeParam);
+ newTypeParam->setTypeSourceInfo(
+ S.Context.getTrivialTypeSourceInfo(prevTypeParam->getUnderlyingType()));
}
return false;
diff --git a/clang/test/SemaObjC/parameterized_classes_collection_literal.m b/clang/test/SemaObjC/parameterized_classes_collection_literal.m
index 034d2e8da217..472746e09db9 100644
--- a/clang/test/SemaObjC/parameterized_classes_collection_literal.m
+++ b/clang/test/SemaObjC/parameterized_classes_collection_literal.m
@@ -29,9 +29,7 @@ + (instancetype)arrayWithObjects:(const T [])objects count:(NSUInteger)cnt;
@end
@interface NSDictionary<K, V> : NSObject <NSCopying>
-+ (instancetype)dictionaryWithObjects:(const V [])objects
- forKeys:(const K <NSCopying> [])keys
- count:(NSUInteger)cnt;
++ (instancetype)dictionaryWithObjects:(const V [])objects forKeys:(const K [])keys count:(NSUInteger)cnt;
@end
void testArrayLiteral(void) {
@@ -52,9 +50,3 @@ void testDictionaryLiteral(void) {
@"world" : @"blah" // expected-warning{{object of type 'NSString *' is not compatible with dictionary value type 'NSNumber *'}}
};
}
-
-void testCastingInDictionaryLiteral(NSString *arg) {
- NSDictionary *dict = @{
- (id)arg : @"foo",
- };
-}
diff --git a/clang/test/SemaObjC/parameterized_classes_subst.m b/clang/test/SemaObjC/parameterized_classes_subst.m
index b6d884760d29..d14a6e9deb40 100644
--- a/clang/test/SemaObjC/parameterized_classes_subst.m
+++ b/clang/test/SemaObjC/parameterized_classes_subst.m
@@ -467,17 +467,3 @@ - (void)mapUsingBlock:(id (^)(id))block {
- (void)mapUsingBlock2:(id)block { // expected-warning{{conflicting parameter types in implementation}}
}
@end
-
-// --------------------------------------------------------------------------
-// Use a type parameter as a type argument.
-// --------------------------------------------------------------------------
-// Type bounds in a category/extension are omitted. rdar://problem/54329242
- at interface ParameterizedContainer<T : id<NSCopying>>
-- (ParameterizedContainer<T> *)inInterface;
- at end
- at interface ParameterizedContainer<T> (Cat)
-- (ParameterizedContainer<T> *)inCategory;
- at end
- at interface ParameterizedContainer<U> ()
-- (ParameterizedContainer<U> *)inExtension;
- at end
More information about the cfe-commits
mailing list