llvm-project/clang
John McCall 460ce58fa6 Define weak and __weak to mean ARC-style weak references, even in MRC.
Previously, __weak was silently accepted and ignored in MRC mode.
That makes this a potentially source-breaking change that we have to
roll out cautiously.  Accordingly, for the time being, actual support
for __weak references in MRC is experimental, and the compiler will
reject attempts to actually form such references.  The intent is to
eventually enable the feature by default in all non-GC modes.
(It is, of course, incompatible with ObjC GC's interpretation of
__weak.)

If you like, you can enable this feature with
  -Xclang -fobjc-weak
but like any -Xclang option, this option may be removed at any point,
e.g. if/when it is eventually enabled by default.

This patch also enables the use of the ARC __unsafe_unretained qualifier
in MRC.  Unlike __weak, this is being enabled immediately.  Since
variables are essentially __unsafe_unretained by default in MRC,
the only practical uses are (1) communication and (2) changing the
default behavior of by-value block capture.

As an implementation matter, this means that the ObjC ownership
qualifiers may appear in any ObjC language mode, and so this patch
removes a number of checks for getLangOpts().ObjCAutoRefCount
that were guarding the processing of these qualifiers.  I don't
expect this to be a significant drain on performance; it may even
be faster to just check for these qualifiers directly on a type
(since it's probably in a register anyway) than to do N dependent
loads to grab the LangOptions.

rdar://9674298

llvm-svn: 251041
2015-10-22 18:38:17 +00:00
..
INPUTS
bindings bindings: add new C++ function attribute accessors 2015-10-12 03:10:20 +00:00
cmake [CMake] Set CLANG_LINKS_TO_CREATE in Apple-stage2.cmake so that we create cc and c++ links. 2015-09-18 18:11:18 +00:00
docs Sample Profiles - Fix location of binary encoding documentation. NFC. 2015-10-19 15:53:17 +00:00
examples analyzer-plugin/MainCallChecker.cpp: s/generateSink/generateErrorNode/, corresponding to r247859. 2015-09-16 22:57:23 +00:00
include Define weak and __weak to mean ARC-style weak references, even in MRC. 2015-10-22 18:38:17 +00:00
lib Define weak and __weak to mean ARC-style weak references, even in MRC. 2015-10-22 18:38:17 +00:00
runtime [CMake] Make external compiler-rt install scripts relative to CMAKE_INSTALL_PREFIX. 2015-10-20 16:39:25 +00:00
test Define weak and __weak to mean ARC-style weak references, even in MRC. 2015-10-22 18:38:17 +00:00
tools [CMake] Make clang/tools subdirectories controlled via options 2015-10-20 18:12:12 +00:00
unittests [Tooling] Add a utility function to replace one nested name with another. 2015-10-22 15:04:10 +00:00
utils [analyzer] Bug identification 2015-10-22 11:53:04 +00:00
www [analyzer] Update links to developer.apple.com. 2015-09-18 16:12:16 +00:00
.arcconfig Revert r242365. 2015-07-16 00:32:26 +00:00
.clang-format
.clang-tidy
.gitignore Revert r242365. 2015-07-16 00:32:26 +00:00
CMakeLists.txt [CMake] Make clang/tools subdirectories controlled via options 2015-10-20 18:12:12 +00:00
CODE_OWNERS.TXT Update code owners for AST matchers / libtooling. 2015-09-08 10:31:09 +00:00
INSTALL.txt [docs] NFC: Fix line formatting in INSTALL.txt 2015-09-13 20:17:18 +00:00
LICENSE.TXT Update copyright year to 2015. 2015-03-12 01:36:10 +00:00
Makefile [autoconf] Fixing reversed logic introduced r245304. 2015-08-18 21:23:44 +00:00
ModuleInfo.txt
NOTES.txt
README.txt Update mailing list references to lists.llvm.org 2015-08-05 03:55:23 +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/