Clang Download Mac

Posted on by admin

The Clang Static Analyzer is a source code analysis tool that finds bugs inC, C++, and Objective-C programs.

Currently it can be run either from the command line or if you use macOS then within Xcode. Wheninvoked from the command line, it is intended to be run in tandem with a buildof a codebase.

The analyzer is 100% open source and is part of the Clang project. Like the rest of Clang, theanalyzer is implemented as a C++ library that can be used by other tools andapplications.

Download

Mac OS X

  • Latest build (10.8+):
  • This build can be used both from the command line and from within Xcode
  • Installation and usage

Other Platforms

For other platforms, please follow the instructions for building the analyzer from source code.

Viewing static analyzer results in a web browser

If clang is not installed, then install it and restart Atom: Mac OS X: Install the latest Xcode along with the latest Command Line Tools (they are installed automatically when you run clang in Terminal for the first time, or manually by running xcode-select-install. Windows: Download Clang 3.9.1 for Windows. Please select “Add LLVM to the. Upgrade to build the macOS version 8.x of the ML C using Apple clang 11.3.1 on Mojave or cross-compiling using clang 8 on Ubuntu 20.04.

What is Static Analysis?

The term 'static analysis' is conflated, but here we use it to meana collection of algorithms and techniques used to analyze source code in orderto automatically find bugs. The idea is similar in spirit to compiler warnings(which can be useful for finding coding errors) but to take that idea a stepfurther and find bugs that are traditionally found using run-time debuggingtechniques such as testing.

Static analysis bug-finding tools have evolved over the last several decadesfrom basic syntactic checkers to those that find deep bugs by reasoning aboutthe semantics of code. The goal of the Clang Static Analyzer is to provide aindustrial-quality static analysis framework for analyzing C, C++, andObjective-C programs that is freely available, extensible, and has a high quality of implementation.

Part of Clang and LLVM

As its name implies, the Clang Static Analyzer is built on top of Clang and LLVM.Strictly speaking, the analyzer is part of Clang, as Clang consists of a set ofreusable C++ libraries for building powerful source-level tools. The staticanalysis engine used by the Clang Static Analyzer is a Clang library, and hasthe capability to be reused in different contexts and by different clients.

Important Points to Consider

While we believe that the static analyzer is already very useful for findingbugs, we ask you to bear in mind a few points when using it.

Work-in-Progress

The analyzer is a continuous work-in-progress. There are many plannedenhancements to improve both the precision and scope of its analysis algorithmsas well as the kinds of bugs it will find. While there are fundamentallimitations to what static analysis can do, we have a long way to go beforehitting that wall.

Slower than Compilation

Clang format mac

Operationally, using static analysis toautomatically find deep program bugs is about trading CPU time for the hardeningof code. Because of the deep analysis performed by state-of-the-art staticanalysis tools, static analysis can be much slower than compilation.

While the Clang Static Analyzer is being designed to be as fast andlight-weight as possible, please do not expect it to be as fast as compiling aprogram (even with optimizations enabled). Some of the algorithms needed to findbugs require in the worst case exponential time.

The Clang Static Analyzer runs in a reasonable amount of time by bothbounding the amount of checking work it will do as well as using cleveralgorithms to reduce the amount of work it must do to find bugs.

False Positives

Static analysis is not perfect. It can falsely flag bugs in a program wherethe code behaves correctly. Because some code checks require more analysisprecision than others, the frequency of false positives can vary widely betweendifferent checks. Our long-term goal is to have the analyzer have a low falsepositive rate for most code on all checks.

Please help us in this endeavor by reporting falsepositives. False positives cannot be addressed unless we know aboutthem.

More Checks

Static analysis is not magic; a static analyzer can only find bugs that ithas been specifically engineered to find. If there are specific kinds of bugsyou would like the Clang Static Analyzer to find, please feel free tofile feature requests or contribute your ownpatches.

libc++ is an implementation of the C++ standard library, targeting C++11, C++14 and above.

All of the code in libc++ is dual licensed under the MIT license and the UIUC License (a BSD-like license).

New Documentation Coming Soon!

Looking for documentation on how to use, build and test libc++? If so checkout the new libc++ documentation.

Features and Goals

  • Correctness as defined by the C++11 standard.
  • Fast execution.
  • Minimal memory use.
  • Fast compile times.
  • ABI compatibility with gcc's libstdc++ for some low-level features such as exception objects, rtti and memory allocation.
  • Extensive unit tests.

Why a new C++ Standard Library for C++11?

After its initial introduction, many people have asked 'why start a new library instead of contributing to an existing library?' (like Apache's libstdcxx, GNU's libstdc++, STLport, etc). There are many contributing reasons, but some of the major ones are:

Clang Download Mac
  • From years of experience (including having implemented the standard library before), we've learned many things about implementing the standard containers which require ABI breakage and fundamental changes to how they are implemented. For example, it is generally accepted that building std::string using the 'short string optimization' instead of using Copy On Write (COW) is a superior approach for multicore machines (particularly in C++11, which has rvalue references). Breaking ABI compatibility with old versions of the library was determined to be critical to achieving the performance goals of libc++.

  • Mainline libstdc++ has switched to GPL3, a license which the developers of libc++ cannot use. libstdc++ 4.2 (the last GPL2 version) could be independently extended to support C++11, but this would be a fork of the codebase (which is often seen as worse for a project than starting a new independent one). Another problem with libstdc++ is that it is tightly integrated with G++ development, tending to be tied fairly closely to the matching version of G++.

  • STLport and the Apache libstdcxx library are two other popular candidates, but both lack C++11 support. Our experience (and the experience of libstdc++ developers) is that adding support for C++11 (in particular rvalue references and move-only types) requires changes to almost every class and function, essentially amounting to a rewrite. Faced with a rewrite, we decided to start from scratch and evaluate every design decision from first principles based on experience.

    Further, both projects are apparently abandoned: STLport 5.2.1 was released in Oct'08, and STDCXX 4.2.1 in May'08.

Platform Support

libc++ is known to work on the following platforms, using g++ and clang. Note that functionality provided by <atomic> is only functional with clang.

  • Mac OS X i386
  • Mac OS X x86_64
  • FreeBSD 10+ i386
  • FreeBSD 10+ x86_64
  • FreeBSD 10+ ARM
  • Linux i386
  • Linux x86_64

Current Status

libc++ is a 100% complete C++11 implementation on Apple's OS X.

LLVM and Clang can self host in C++ and C++11 mode with libc++ on Linux.

libc++ is also a 100% complete C++14 implementation. A list of new features and changes for C++14 can be found here.

libc++'s C++17 implementation is not yet complete. A list of features and changes for C++17 can be found here.

A list of features and changes for the next C++ standard, known here as 'C++2a' (probably to be C++20) can be found here.

Implementation of the post-C++14 Technical Specifications is in progress. A list of features and the current status of these features can be found here.

As features get moved from the Technical Specifications into the main standard, we will (after a period for migration) remove them from the TS implementation. This process is detailed here.

Build Bots

Clang Compiler Download Mac

The latest libc++ build results can be found at the following locations.

Clang Download Mac

Get it and get involved!

Clang Download Mac Software

First please review our Developer's Policy. The documentation for building and using libc++ can be found below.

  • Using libc++ Documentation on using the library in your programs
  • Building libc++ Documentation on building the library using CMake
  • Testing libc++ Documentation for developers wishing to test the library

Notes and Known Issues

  • Building libc++ with -fno-rtti is not supported. However linking against it with -fno-rtti is supported.

Send discussions to the libc++ mailing list.

Bug reports and patches

If you think you've found a bug in libc++, please report it using the LLVM Bugzilla. If you're not sure, you can post a message to the libcxx-dev mailing list or on IRC.

Clang-format Download Mac

If you want to contribute a patch to libc++, the best place for that is Phabricator. Please add libcxx-commits as a subscriber.

Clang Format Download

Design Documents