llvm-project/clang
Richard Smith 6781fee085 Don't permit array bound constant folding in OpenCL.
Permitting non-standards-driven "do the best you can" constant-folding
of array bounds is permitted solely as a GNU compatibility feature. We
should not be doing it in any language mode that is attempting to be
conforming.

From https://reviews.llvm.org/D20090 it appears the intent here was to
permit `__constant int` globals to be used in array bounds, but the
change in that patch only added half of the functionality necessary to
support that in the constant evaluator. This patch adds the other half
of the functionality and turns off constant folding for array bounds in
OpenCL.

I couldn't find any spec justification for accepting the kinds of cases
that D20090 accepts, so a reference to where in the OpenCL specification
this is permitted would be useful.

Note that this change also affects the code generation in one test:
because after 'const int n = 0' we now treat 'n' as a constant
expression with value 0, it's now a null pointer, so '(local int *)n'
forms a null pointer rather than a zero pointer.

Reviewed By: Anastasia

Differential Revision: https://reviews.llvm.org/D89520
2020-10-20 16:52:28 -07:00
..
INPUTS
bindings [python][tests] Fix string comparison with "is" 2020-09-28 21:11:50 +02:00
cmake [Apple-stage2] Install FileCheck and yaml2obj in the toolchain 2020-10-20 13:46:44 -07:00
docs [clang-format] Add a SpaceAroundPointerQualifiers style option 2020-10-18 18:17:50 +01:00
examples [cmake] Fix build of attribute plugin example on Windows 2020-09-07 10:04:32 +02:00
include clang/Basic: ContentCache::InvalidFlag => ContentCache::IsBufferInvalid, NFC 2020-10-20 19:28:17 -04:00
lib Don't permit array bound constant folding in OpenCL. 2020-10-20 16:52:28 -07:00
runtime [CMake][compiler-rt][libunwind] Compile assembly files as ASM not C, unify workarounds 2020-08-27 15:40:15 +03:00
test Don't permit array bound constant folding in OpenCL. 2020-10-20 16:52:28 -07:00
tools [Driver] Clean up -gz & --compress-debug-sections 2020-10-19 23:06:33 -07:00
unittests FileManager: Test FileManager::getFileRef 2020-10-20 13:40:23 -04:00
utils [hmaptool] Fix `NameError: global name 'num_buckets' is not defined` in `action_dump`. 2020-10-19 16:27:13 -07:00
www [Sema, CodeGen] Implement [[likely]] and [[unlikely]] in SwitchStmt 2020-10-18 13:48:42 +02:00
.clang-format
.clang-tidy
.gitignore
CMakeLists.txt [OpenMP] Change CMake Configuration to Build for Highest CUDA Architecture by Default 2020-10-08 12:09:34 -04:00
CODE_OWNERS.TXT
INSTALL.txt
LICENSE.TXT
ModuleInfo.txt
NOTES.txt
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.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/