This document contains the release notes for the Clang C/C++/Objective-C
frontend, part of the LLVM Compiler Infrastructure, release 5.0.0. Here we
describe the status of Clang in some detail, including major
improvements from the previous release and new feature work. For the
general LLVM release notes, see the LLVM
documentation. All LLVM
releases may be downloaded from the LLVM releases web
site.

For more information about Clang or LLVM, including information about
the latest release, please check out the main please see the Clang Web
Site or the LLVM Web
Site.

Note that if you are reading this file from a Subversion checkout or the
main Clang web page, this document applies to the next release, not
the current one. To see the release notes for a specific release, please
see the releases page.

Some of the major new features and improvements to Clang are listed
here. Generic improvements to Clang as a whole or to its underlying
infrastructure are described first, followed by language-specific
sections with improvements to Clang’s support for those languages.

-Wcast-qual was implemented for C++. C-style casts are now properly
diagnosed.

-Wunused-lambda-capture warns when a variable explicitly captured
by a lambda is not used in the body of the lambda.

-Wstrict-prototypes is a new warning that warns about non-prototype
function and block declarations and types in C and Objective-C.

-Wunguarded-availability is a new warning that warns about uses of new
APIs that were introduced in a system whose version is newer than the
deployment target version. A new Objective-C expression @available has
been introduced to perform system version checking at runtime. This warning
is off by default to prevent unexpected warnings in existing projects.
However, its less strict sibling -Wunguarded-availability-new is on by
default. It warns about unguarded uses of APIs only when they were introduced
in or after macOS 10.13, iOS 11, tvOS 11 or watchOS 4.

The -Wdocumentation warning now allows the use of \param and
\returns documentation directives in the documentation comments for
declarations with a function or a block pointer type.

The compiler no longer warns about unreachable __builtin_unreachable
statements.

Clang now guarantees that a readwrite property is synthesized when an
ambiguous property (i.e. a property that’s declared in multiple protocols)
is synthesized. The -Wprotocol-property-synthesis-ambiguity warning that
warns about incompatible property types is now promoted to an error when
there’s an ambiguity between readwrite and readonly properties.

Clang now prohibits synthesis of ambiguous properties with incompatible
explicit property attributes. The following property attributes are
checked for differences: copy, retain/strong, atomic,
getter and setter.

Libclang now provides code-completion results for more C++ constructs
and keywords. The following keywords/identifiers are now included in the
code-completion results: static_assert, alignas, constexpr,
final, noexcept, override and thread_local.

Libclang now provides code-completion results for members from dependent
classes. For example:

template<typenameT>voidappendValue(std::vector<T>&dest,constT&value){dest.// Relevant completion results are now shown after '.'}

Note that code-completion results are still not provided when the member
expression includes a dependent base expression. For example:

The static analyzer now supports using the
z3 theorem prover from Microsoft Research
as an external constraint solver. This allows reasoning over more complex
queries, but performance is ~15x slower than the default range-based
constraint solver. To enable the z3 solver backend, clang must be built with
the CLANG_ANALYZER_BUILD_Z3=ON option, and the
-Xanalyzer-analyzer-constraints=z3 arguments passed at runtime.

The Undefined Behavior Sanitizer has a new check for pointer overflow. This
check is on by default. The flag to control this functionality is
-fsanitize=pointer-overflow.

Pointer overflow is an indicator of undefined behavior: when a pointer
indexing expression wraps around the address space, or produces other
unexpected results, its result may not point to a valid object.

UBSan has several new checks which detect violations of nullability
annotations. These checks are off by default. The flag to control this group
of checks is -fsanitize=nullability. The checks can be individially enabled
by -fsanitize=nullability-arg (which checks calls),
-fsanitize=nullability-assign (which checks assignments), and
-fsanitize=nullability-return (which checks return statements).

UBSan can now detect invalid loads from bitfields and from ObjC BOOLs.

UBSan can now avoid emitting unnecessary type checks in C++ class methods and
in several other cases where the result is known at compile-time. UBSan can
also avoid emitting unnecessary overflow checks in arithmetic expressions
with promoted integer operands.

A wide variety of additional information is available on the Clang web
page. The web page contains versions of the
API documentation which are up-to-date with the Subversion version of
the source code. You can access versions of these documents specific to
this release by going into the “clang/docs/” directory in the Clang
tree.

If you have any questions or comments about Clang, please feel free to
contact us via the mailing
list.