llvm-project/clang
Chandler Carruth c41c8b3a4a Fix the warning for divide by zero to be a bit more robust. ;]
Previously, it only ever fired for zeros which formed null pointers.
Now, hilariously, in C++98 this was almost anything. Including tricks
like warning on the divisor in this code:

typedef char c3[3];
size_t f(c3* ptr) {
  return (sizeof(ptr) / sizeof(*ptr)) / (size_t)(!(sizeof(ptr) % sizeof(*ptr)));
}

Why the RHS of the outer divide is a null pointer constant is a sordid
tale of sorrow. Anyways, the committee fixed this for C++11 and onward
as part of core isssue 903, and Richard recently implemented this fix
causing the warning to go away here (and elsewhere).

This patch restores the warning here and adds it for numerous other
somewhat obvious gaffes:

int g(int x) {
  return x / (int)(0.0);
}

The patch is essentially just using the full power of our constant
folding in Clang to produce the warning, but insisting that it must fold
to an *integer* which is zero so that we don't get false positives
anywhere.

llvm-svn: 183970
2013-06-14 08:57:18 +00:00
..
INPUTS
bindings [libclang/python] Add a few "cursor kinds" that were missing in the python binding for libclang. 2013-06-11 18:05:42 +00:00
docs [docs] Fix wrong clang-format example. 2013-06-14 02:12:06 +00:00
examples The IRReader header is now part of its own library. Update the include 2013-03-26 02:25:54 +00:00
include Avoid fallthrough in header, to allow external users of Clang libraries to 2013-06-13 22:07:02 +00:00
lib Fix the warning for divide by zero to be a bit more robust. ;] 2013-06-14 08:57:18 +00:00
runtime Nuke build of static ASan runtime on Mac OS - clang part 2013-05-20 14:33:20 +00:00
test Fix the warning for divide by zero to be a bit more robust. ;] 2013-06-14 08:57:18 +00:00
tools Don't depend on the transitive inclusion of PathV1.h. 2013-06-13 21:09:29 +00:00
unittests Preserve newlines before block comments in static initializers. 2013-06-12 19:04:12 +00:00
utils [analyzer] SATestBuild: Don't require reference results to have logs. 2013-06-10 19:34:30 +00:00
www Updated C++1y status for contextual conversions to 'partial' (without review) 2013-06-13 06:04:33 +00:00
.arcconfig Add .arcconfig to the repository. Useful if someone wants to use phabricator's command line tool. 2012-12-01 12:08:08 +00:00
.gitignore Reverted unintendedly-committed file. 2013-01-31 19:05:31 +00:00
CMakeLists.txt Retain linker flags specified on cmake command line. 2013-06-12 20:02:59 +00:00
CODE_OWNERS.TXT Duplicate some common owners between Clang and LLVM. 2012-11-27 00:48:12 +00:00
INSTALL.txt Reverting test commit 2013-06-07 05:33:21 +00:00
LICENSE.TXT Update the copyright coredits -- Happy new year 2013! 2013-01-01 10:00:19 +00:00
Makefile
ModuleInfo.txt
NOTES.txt Remove an uninteresting note 2013-02-05 21:13:55 +00:00
README.txt

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.cs.uiuc.edu/mailman/listinfo/cfe-dev

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