llvm-project/clang
Volodymyr Sapsai 02c2ab3d88 [ObjC generics] Fix not inheriting type bounds in categories/extensions.
When a category/extension doesn't repeat a type bound, corresponding
type parameter is substituted with `id` when used as a type argument. As
a result, in the added test case it was causing errors like

> type argument 'T' (aka 'id') does not satisfy the bound ('id<NSCopying>') of type parameter 'T'

We are already checking that type parameters should be consistent
everywhere (see `checkTypeParamListConsistency`) and update
`ObjCTypeParamDecl` to have correct underlying type. And when we use the
type parameter as a method return type or a method parameter type, it is
substituted to the bounded type. But when we use the type parameter as a
type argument, we check `ObjCTypeParamType` that ignores the updated
underlying type and remains `id`.

Fix by desugaring `ObjCTypeParamType` to the underlying type, the same
way we are doing with `TypedefType`.

rdar://problem/54329242

Reviewers: erik.pilkington, ahatanak

Reviewed By: erik.pilkington

Subscribers: jkorous, dexonsmith, ributzka, cfe-commits

Differential Revision: https://reviews.llvm.org/D66696

llvm-svn: 374202
2019-10-09 19:29:13 +00:00
..
INPUTS
bindings [TestCommit] Trivial change to test commit access. 2019-09-19 09:24:42 +00:00
cmake [CMake] Clang: Don't use object libraries with Xcode 2019-10-04 18:17:58 +00:00
docs [NFC] Reverting changes from test commit. 2019-10-09 15:12:22 +00:00
examples Fixup build of clang-interpreter example after change in r370122. 2019-08-28 02:13:24 +00:00
include [ObjC generics] Fix not inheriting type bounds in categories/extensions. 2019-10-09 19:29:13 +00:00
lib [ObjC generics] Fix not inheriting type bounds in categories/extensions. 2019-10-09 19:29:13 +00:00
runtime [GWP-ASan] Mutex implementation [2]. 2019-05-30 19:45:32 +00:00
test [ObjC generics] Fix not inheriting type bounds in categories/extensions. 2019-10-09 19:29:13 +00:00
tools [clang-offload-bundler] Support `.cui` and `.d`. 2019-10-09 13:53:37 +00:00
unittests [clang-format] Update noexcept reference qualifiers detection 2019-10-09 14:46:08 +00:00
utils [ARM] Fix arm_neon.h with -flax-vector-conversions=none 2019-10-09 17:57:59 +00:00
www [c++20] P1152R4: warn on any simple-assignment to a volatile lvalue 2019-10-09 02:04:54 +00:00
.arcconfig
.clang-format
.clang-tidy
.gitignore
CMakeLists.txt [clang] [cmake] Support LLVM_DISTRIBUTION_COMPONENTS in stand-alone build 2019-10-07 18:14:56 +00:00
CODE_OWNERS.TXT
INSTALL.txt
LICENSE.TXT
ModuleInfo.txt
NOTES.txt
README.txt [NFC] Test commit 2019-06-12 07:50:48 +00:00

README.txt

//===----------------------------------------------------------------------===//
// C Language Family Front-end
//===----------------------------------------------------------------------===//

Welcome to Clang.  This is a compiler front-end for the C family of languages
(C, C++, Objective-C, and Objective-C++) which is built as part of the LLVM
compiler infrastructure project.

Unlike many other compiler frontends, Clang is useful for a number of things
beyond just compiling code: we intend for Clang to be host to a number of
different source-level tools.  One example of this is the Clang Static Analyzer.

If you're interested in more (including how to build Clang) it is best to read
the relevant web sites.  Here are some pointers:

Information on Clang:             http://clang.llvm.org/
Building and using Clang:         http://clang.llvm.org/get_started.html
Clang Static Analyzer:            http://clang-analyzer.llvm.org/
Information on the LLVM project:  http://llvm.org/

If you have questions or comments about Clang, a great place to discuss them is
on the Clang development mailing list:
  http://lists.llvm.org/mailman/listinfo/cfe-dev

If you find a bug in Clang, please file it in the LLVM bug tracker:
  http://llvm.org/bugs/