summaryrefslogtreecommitdiffstats
path: root/clang/lib
Commit message (Collapse)AuthorAgeFilesLines
...
* Add support for attribute enum_extensibility.Akira Hatanaka2017-03-214-10/+54
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds support for a new attribute that will be used to distinguish between extensible and inextensible enums. There are three main purposes of this attribute: 1. Give better control over when enum-related warnings are issued. For example, in the code below, clang will not issue a -Wassign-enum warning if the enum is marked "open": enum __attribute__((enum_extensibility(closed))) EnumClosed { B0 = 1, B1 = 10 }; enum __attribute__((enum_extensibility(open))) EnumOpen { C0 = 1, C1 = 10 }; enum EnumClosed ec = 100; // warning issued enum EnumOpen eo = 100; // no warning 2. Enable code-completion and debugging tools to offer better suggestions. 3. Make it easier for swift's clang importer to determine which swift type an enum should be mapped to. For more details, see the discussion I started on cfe-dev: http://lists.llvm.org/pipermail/cfe-dev/2017-February/052748.html rdar://problem/12764379 rdar://problem/23145650 Differential Revision: https://reviews.llvm.org/D30766 llvm-svn: 298332
* IRGen: Do not set dllexport on declarations.Peter Collingbourne2017-03-211-1/+0
| | | | | | | | | | | Setting dllexport on a declaration has no effect, as we do not emit export directives for declarations. Part of the fix for PR32334. Differential Revision: https://reviews.llvm.org/D31162 llvm-svn: 298330
* Add a function to MD5 a file's contents.Zachary Turner2017-03-202-3/+3
| | | | | | | | | | | | | | | In doing so, clean up the MD5 interface a little. Most existing users only care about the lower 8 bytes of an MD5, but for some users that care about the upper and lower, there wasn't a good interface. Furthermore, consumers of the MD5 checksum were required to handle endianness details on their own, so it seems reasonable to abstract this into a nicer interface that just gives you the right value. Differential Revision: https://reviews.llvm.org/D31105 llvm-svn: 298322
* Fix parsing of htmxlintrin.h in C++ modeEric Christopher2017-03-201-9/+5
| | | | | | | | - Fix a variable naming mismatch - Fix gcc extension pointer arithmetic on void to cast to char *. - Test that the header (and htmintrin.h) parse. llvm-svn: 298318
* Turn on HTM on power8 and later (including powerpc64le) since it'sEric Christopher2017-03-201-0/+5
| | | | | | available by default on those cpus and configurations. llvm-svn: 298307
* Bump __cplusplus for C++17 to 201703L per the C++17 DIS.Richard Smith2017-03-201-2/+4
| | | | llvm-svn: 298299
* Reapply "Modules: Cache PCMs in memory and avoid a use-after-free"Duncan P. N. Exon Smith2017-03-209-45/+175
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit r298185, effectively reapplying r298165, after fixing the new unit tests (PR32338). The memory buffer generator doesn't null-terminate the MemoryBuffer it creates; this version of the commit informs getMemBuffer about that to avoid the assert. Original commit message follows: ---- Clang's internal build system for implicit modules uses lock files to ensure that after a process writes a PCM it will read the same one back in (without contention from other -cc1 commands). Since PCMs are read from disk repeatedly while invalidating, building, and importing, the lock is not released quickly. Furthermore, the LockFileManager is not robust in every environment. Other -cc1 commands can stall until timeout (after about eight minutes). This commit changes the lock file from being necessary for correctness to a (possibly dubious) performance hack. The remaining benefit is to reduce duplicate work in competing -cc1 commands which depend on the same module. Follow-up commits will change the internal build system to continue after a timeout, and reduce the timeout. Perhaps we should reconsider blocking at all. This also fixes a use-after-free, when one part of a compilation validates a PCM and starts using it, and another tries to swap out the PCM for something new. The PCMCache is a new type called MemoryBufferCache, which saves memory buffers based on their filename. Its ownership is shared by the CompilerInstance and ModuleManager. - The ModuleManager stores PCMs there that it loads from disk, never touching the disk if the cache is hot. - When modules fail to validate, they're removed from the cache. - When a CompilerInstance is spawned to build a new module, each already-loaded PCM is assumed to be valid, and is frozen to avoid the use-after-free. - Any newly-built module is written directly to the cache to avoid the round-trip to the filesystem, making lock files unnecessary for correctness. Original patch by Manman Ren; most testcases by Adrian Prantl! llvm-svn: 298278
* [OpenCL] Fix extension guards for atomic functionsAnastasia Stulova2017-03-201-4/+2
| | | | | | | | Review: D30830 Patch by James Price! llvm-svn: 298256
* [X86][AVX512][Clang][Intrinsics] Adding missing intrinsics to Clang .Igor Breger2017-03-191-0/+43
| | | | | | | | | | | | | | | | | | | Summary: Adding missing intrinsics : _mm512_set_epi16, _mm512_set_epi8, _mm512_permutevar_epi32 _mm512_mask_permutevar_epi32 Reviewers: zvi, guyblank, eladcohen, craig.topper Reviewed By: craig.topper Subscribers: craig.topper, cfe-commits Differential Revision: https://reviews.llvm.org/D31034 llvm-svn: 298208
* Revert "Modules: Cache PCMs in memory and avoid a use-after-free"Renato Golin2017-03-189-175/+45
| | | | | | This reverts commit r298165, as it broke the ARM builds. llvm-svn: 298185
* [X86] Add NumRegisterParameters Module Flag.Nirav Dave2017-03-181-0/+7
| | | | | | | | | | Reviewers: rnk, mkuper Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D27051 llvm-svn: 298177
* [Modules] In case of lock timeout, fallback and build moduleBruno Cardoso Lopes2017-03-181-5/+12
| | | | | | | | | | | | | | Duncan's r298165 introduced the PCMCache mechanism, which guarantees that locks aren't necessary anymore for correctness but only for performance, by avoiding building it twice when possible. Change the logic to avoid an error but actually build the module in case the timeout happens. Instead of an error, still emit a remark for debugging purposes. rdar://problem/30297862 llvm-svn: 298175
* [index] For C++ constructors/destructors, add references to the parent type ↵Argyrios Kyrtzidis2017-03-172-1/+10
| | | | | | | | | where its name appears in definitions and declarations Patch by Nathan Hawes! https://reviews.llvm.org/D30730 llvm-svn: 298170
* Modules: Cache PCMs in memory and avoid a use-after-freeDuncan P. N. Exon Smith2017-03-179-45/+175
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Clang's internal build system for implicit modules uses lock files to ensure that after a process writes a PCM it will read the same one back in (without contention from other -cc1 commands). Since PCMs are read from disk repeatedly while invalidating, building, and importing, the lock is not released quickly. Furthermore, the LockFileManager is not robust in every environment. Other -cc1 commands can stall until timeout (after about eight minutes). This commit changes the lock file from being necessary for correctness to a (possibly dubious) performance hack. The remaining benefit is to reduce duplicate work in competing -cc1 commands which depend on the same module. Follow-up commits will change the internal build system to continue after a timeout, and reduce the timeout. Perhaps we should reconsider blocking at all. This also fixes a use-after-free, when one part of a compilation validates a PCM and starts using it, and another tries to swap out the PCM for something new. The PCMCache is a new type called MemoryBufferCache, which saves memory buffers based on their filename. Its ownership is shared by the CompilerInstance and ModuleManager. - The ModuleManager stores PCMs there that it loads from disk, never touching the disk if the cache is hot. - When modules fail to validate, they're removed from the cache. - When a CompilerInstance is spawned to build a new module, each already-loaded PCM is assumed to be valid, and is frozen to avoid the use-after-free. - Any newly-built module is written directly to the cache to avoid the round-trip to the filesystem, making lock files unnecessary for correctness. Original patch by Manman Ren; most testcases by Adrian Prantl! llvm-svn: 298165
* [Sema] Unbreak GCC -Werror build (enum compare).Davide Italiano2017-03-171-2/+2
| | | | llvm-svn: 298160
* Implement DR 373 "Lookup on namespace qualified name in using-directive"Matthias Gehre2017-03-173-23/+49
| | | | | | | | | | | | | | Summary: 3.4.6 [basic.lookup.udir] paragraph 1: In a using-directive or namespace-alias-definition, during the lookup for a namespace-name or for a name in a nested-name-specifier, only namespace names are considered. Reviewers: rsmith, aaron.ballman Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D30848 llvm-svn: 298126
* [clang-cl] Fix cross-compilation with MSVC 2017.Zachary Turner2017-03-172-8/+87
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | clang-cl works best when the user runs vcvarsall to set up an environment before running, but even this is not enough on VC 2017 when cross compiling (e.g. using an x64 toolchain to target x86, or vice versa). The reason is that although clang-cl itself will have a valid environment, it will shell out to other tools (such as link.exe) which may not. Generally we solve this through adding the appropriate linker flags, but this is not enough in VC 2017. The cross-linker and the regular linker both link against some common DLLs, but these DLLs live in the binary directory of the native linker. When setting up a cross-compilation environment through vcvarsall, it will add *both* directories to %PATH%, so that when cl shells out to any of the associated tools, those tools will be able to find all of the dependencies that it links against. If you don't do this, link.exe will fail to run because the loader won't be able to find all of the required DLLs that it links against. To solve this we teach the driver how to spawn a process with an explicitly specified environment. Then we modify the PATH before shelling out to subtools and run with the modified PATH. Patch by Hamza Sood Differential Revision: https://reviews.llvm.org/D30991 llvm-svn: 298098
* Test commit.David Green2017-03-171-1/+1
| | | | llvm-svn: 298097
* [AVX-512] Change the input type for some load intrinsics to take void type ↵Craig Topper2017-03-171-4/+4
| | | | | | like the spec (and the test cases say). llvm-svn: 298042
* [AVX-512] Add missing typecasts and parentheses to _mm512_mask_i64gather_ps. ↵Craig Topper2017-03-171-5/+5
| | | | | | My macro cleanup script I used on the others last year must have missed it. llvm-svn: 298040
* [Serialization] Follow-up to r297972, deserialize name/loc in separate ↵Argyrios Kyrtzidis2017-03-171-4/+6
| | | | | | | | statements to make sure they deserialize in defined order. This should fix the windows bots. llvm-svn: 298027
* Remove setting LessPreciseFPMADOption on the TargetOption as it'sEric Christopher2017-03-171-1/+0
| | | | | | unused anywhere in llvm. llvm-svn: 298022
* [Headers] Reapply: Add #include_next for tgmath.h on DarwinBruno Cardoso Lopes2017-03-161-3/+13
| | | | | | | | | | | | Reapply r289181 but rename the include guard to avoid conflict with the one from Darwin. Allow darwin to provide additional definitions and implementation specifc values for tgmath.h on Apple platforms. rdar://problem/19019845 llvm-svn: 298013
* Use arg_begin() instead of getArgumentList().begin(), the argument list is ↵Reid Kleckner2017-03-161-3/+1
| | | | | | an implementation detail llvm-svn: 297975
* [index/AST] Add references for ObjC getter=/setter= property attributes and ↵Argyrios Kyrtzidis2017-03-167-21/+62
| | | | | | | | | | | related property getter/setter role fixes This enhances the AST to keep track of locations of the names in those ObjC property attributes, and reports them for indexing. Patch by Nathan Hawes! https://reviews.llvm.org/D30907 llvm-svn: 297972
* [ObjC][Sema] Avoid ARC performSelector error for 'self' selectorAlex Lorenz2017-03-161-1/+0
| | | | | | | | | The instance method 'self' does not actually return an over-retained object, so we shouldn't report an error when it's used with 'performSelector'. rdar://31071620 llvm-svn: 297961
* [OpenCL] Implement as_type operator as alias of __builtin_astype.Egor Churaev2017-03-161-766/+74
| | | | | | | | | | | | Reviewers: Anastasia Reviewed By: Anastasia Subscribers: cfe-commits, yaxunl, bader Differential Revision: https://reviews.llvm.org/D28136 llvm-svn: 297947
* [clang-format] disable adding extra space after MSVC '__super' keywordMartin Probst2017-03-161-1/+1
| | | | | | | | | | | clang-format treats MSVC `__super` keyword like all other keywords adding a single space after. This change disables this behavior for `__super`. Patch originally by jutocz (thanks!). Differential Revision: https://reviews.llvm.org/D30932 llvm-svn: 297936
* clang-format: Fix bug in wrapping behavior of operators.Daniel Jasper2017-03-161-0/+1
| | | | | | | | | | | | | Before (even violating the column limit): auto Diag = diag() << aaaaaaaaaaaaaaaa(aaaaaaaaaaaa, aaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaa); After: auto Diag = diag() << aaaaaaaaaaaaaaaa(aaaaaaaaaaaa, aaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaaaaa); llvm-svn: 297931
* Remove repeated code (PR32250). NFCI.Simon Pilgrim2017-03-151-2/+0
| | | | llvm-svn: 297905
* enable -save-temps with -finclude-defult-headerGuansong Zhang2017-03-151-1/+13
| | | | | | | | | | | | | | | | | | | | | | | | Currently the two flags can not work together. To illustrate the issue, we can have an one line file a.cl contains only an empty function cat a.cl void test(){} Then use clang -v -save-temps -x cl -Xclang -cl-std=CL2.0 -Xclang -finclude-default-header -target amdgcn -S -c a.cl we will get redefinition errors for various things. The reason is that the -finclude-default-header flag is not meant to be on cc1 command other than the preprocessor. The fix is modeled after the code just below the change to filter the -finclude-default-header flag out when we are not in the preprocess phase. Differential Revision: https://reviews.llvm.org/D30743 llvm-svn: 297890
* Add AST matchers for ObjCProtocolDecl, ObjCCategoryDecl, ObjCMethodDecl, ↵Aaron Ballman2017-03-151-0/+5
| | | | | | | | ObjCIvarDecl, and ObjCPropertyDecl. Patch by Dave Lee. llvm-svn: 297882
* Fix uninitialized value.Zachary Turner2017-03-151-1/+1
| | | | llvm-svn: 297881
* [Driver] Define macro __APPLE_EMBEDDED_SIMULATOR__ when optionAkira Hatanaka2017-03-151-3/+16
| | | | | | | | | | | | | | | | | -m(i|tv|watch)os-simulator-version-min is on the command line. Previously the driver would treat -m(i|tv|watch)os-simulator-version-min as an alias of -m(i|tv|watch)os-version-min. This no longer works since we now need to distinguish between the two options (the latter is used for iOS running in a VM, for example). This commit stops making the simulator options the aliases of the OS options and defines a macro to differentiate between the two groups of options. rdar://problem/28872911 llvm-svn: 297866
* [ObjC][Sema] Avoid warning about a call to an instance method on anAlex Lorenz2017-03-151-1/+19
| | | | | | | | | | | | | | | | instance of a qualified Class object when that instance method comes from a protocol that's implemented by NSObject Instance methods from a root class like NSObject are also class methods because the metaclass of root class derives from that root class. Therefore, we can avoid the warning for instances of qualified Class objects that point to classes that derive from NSObject. Note that we actually don't know if a Class instance points to a class that derives from NSObject at compile-time, so we have to make a reasonable assumption that the majority of instances will do so. rdar://22812517 llvm-svn: 297862
* Don't use MSVC Setup Api on MinGW.Zachary Turner2017-03-151-1/+6
| | | | llvm-svn: 297861
* Update clang-cl driver for MSVC 2017.Zachary Turner2017-03-153-249/+889
| | | | | | | | | | | | | | | | | 2017 changes the way you find an installed copy of Visual Studio as well as its internal directory layout. As a result, clang-cl was unable to find VS2017 even when you had run vcvarsall to set up a toolchain environment. This patch updates everything for 2017 and cleans up the way we handle a tiered search a la environment -> installation -> PATH for which copy of Visual Studio to bind to. Patch originally by Hamza Sood, with some fixups for landing. Differential Revision: https://reviews.llvm.org/D30758 llvm-svn: 297851
* [Driver] Restructure handling of -ffast-math and similar optionsJohn Brawn2017-03-151-124/+129
| | | | | | | | | | | | | | | | | | The way -ffast-math and the various related options to tweak floating-point handling are handled is inflexible and rather confusing. This patch restructures things so that we go through the options adjusting our idea of what's enabled as we go, instead of trying to figure each individual thing out by working backwards from the end, as this makes the behaviour of each individual option more clear. Doing it this way also means we get gcc-compatible behaviour for when the __FAST_MATH__ and __FINITE_MATH_ONLY__ macros are defined, as they should depend on the final set of features that are enabled and not just on -ffast-math and -ffinite-math-only specifically. Differential Revision: http://reviews.llvm.org/D30582 llvm-svn: 297837
* Canonicalize the path provided by -fmodules-cache-path.Adrian Prantl2017-03-141-3/+16
| | | | | | | | | | | This fixes lookup mismatches that could happen when the module cache path contained a '/./' component. <rdar://problem/30413458> Differential Revision: https://reviews.llvm.org/D30915 llvm-svn: 297790
* Fix Wdocumentation warningSimon Pilgrim2017-03-141-1/+1
| | | | llvm-svn: 297784
* [Hexagon] Recognize hexagonv62 as a valid target CPUKrzysztof Parzyszek2017-03-141-0/+4
| | | | llvm-svn: 297778
* Modules: Optimize bitcode encoding of diagnostic stateDuncan P. N. Exon Smith2017-03-142-6/+10
| | | | | | | | | | | Since bitcode uses VBR encoding, large numbers are more expensive than small ones. Instead of emitting a UINT_MAX sentinel after each sequence of state-change pairs, emit the size of the sequence as a prefix. This should have no functionality change besides saving bits from the encoding. llvm-svn: 297770
* Warn on enum assignment to bitfields that can't fit all valuesReid Kleckner2017-03-141-2/+55
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds -Wbitfield-enum-conversion, which warns on implicit conversions that happen on bitfield assignment that change the value of some enumerators. Values of enum type typically take on a very small range of values, so they are frequently stored in bitfields. Unfortunately, there is no convenient way to calculate the minimum number of bits necessary to store all possible values at compile time, so users usually hard code a bitwidth that works today and widen it as necessary to pass basic testing and validation. This is very error-prone, and leads to stale widths as enums grow. This warning aims to catch such bugs. This would have found two real bugs in clang and two instances of questionable code. See r297680 and r297654 for the full description of the issues. This warning is currently disabled by default while we investigate its usefulness outside of LLVM. The major cause of false positives with this warning is this kind of enum: enum E { W, X, Y, Z, SENTINEL_LAST }; The last enumerator is an invalid value used to validate inputs or size an array. Depending on the prevalance of this style of enum across a codebase, this warning may be more or less feasible to deploy. It also has trouble on sentinel values such as ~0U. Reviewers: rsmith, rtrieu, thakis Reviewed By: thakis Subscribers: hfinkel, voskresensky.vladimir, sashab, cfe-commits Differential Revision: https://reviews.llvm.org/D30923 llvm-svn: 297761
* Fix misspelled enumJonathan Roelofs2017-03-142-4/+4
| | | | | | https://reviews.llvm.org/D30945 llvm-svn: 297756
* [Driver] Add flag to request arch-specific-subdir in -rpathPirama Arumuga Nainar2017-03-141-4/+0
| | | | | | | | | | | | | | | | | | Summary: This patch adds -f[no-]rtlib-add-rpath, which if enabled, embeds the arch-specific subdirectory in resource directory using -rpath (instead of doing so only during native compilation). This patch also re-enables test arch-specific-libdir.c which was silently unsupported because of the REQUIRES tag 'linux'. Reviewers: bkramer, rnk, mgorny Subscribers: srhines, cfe-commits Differential Revision: https://reviews.llvm.org/D30700 llvm-svn: 297751
* [ubsan] Use the nicer nullability diagnostic handlersVedant Kumar2017-03-143-9/+15
| | | | | | | | | | | This is a follow-up to r297700 (Add a nullability sanitizer). It addresses some FIXME's re: using nullability-specific diagnostic handlers from compiler-rt, now that the necessary handlers exist. check-ubsan test updates to follow. llvm-svn: 297750
* [CodeGen][ObjC] Fix a bug where the type of an ivar wasn't encodedAkira Hatanaka2017-03-141-1/+1
| | | | | | | | | | correctly. This fixes PR30413. Patch by David Lobron. llvm-svn: 297702
* [ubsan] Add a nullability sanitizerVedant Kumar2017-03-147-28/+169
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Teach UBSan to detect when a value with the _Nonnull type annotation assumes a null value. Call expressions, initializers, assignments, and return statements are all checked. Because _Nonnull does not affect IRGen, the new checks are disabled by default. The new driver flags are: -fsanitize=nullability-arg (_Nonnull violation in call) -fsanitize=nullability-assign (_Nonnull violation in assignment) -fsanitize=nullability-return (_Nonnull violation in return stmt) -fsanitize=nullability (all of the above) This patch builds on top of UBSan's existing support for detecting violations of the nonnull attributes ('nonnull' and 'returns_nonnull'), and relies on the compiler-rt support for those checks. Eventually we will need to update the diagnostic messages in compiler-rt (there are FIXME's for this, which will be addressed in a follow-up). One point of note is that the nullability-return check is only allowed to kick in if all arguments to the function satisfy their nullability preconditions. This makes it necessary to emit some null checks in the function body itself. Testing: check-clang and check-ubsan. I also built some Apple ObjC frameworks with an asserts-enabled compiler, and verified that we get valid reports. Differential Revision: https://reviews.llvm.org/D30762 llvm-svn: 297700
* clang-format: Make it very slighly more expensive to wrap between "= {".Daniel Jasper2017-03-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | This prevents unwanted fallout from r296664. Specifically in proto formatting, this changed: optional Aaaaaaaa aaaaaaaa = 12 [ (aaa) = aaaa, (bbbbbbbbbbbbbbbbbbbbbbbbbb) = { aaaaaaaaaaaaaaaaa: true, aaaaaaaaaaaaaaaa: true } ]; Into: optional Aaaaaaaa aaaaaaaa = 12 [ (aaa) = aaaa, (bbbbbbbbbbbbbbbbbbbbbbbbbb) = {aaaaaaaaaaaaaaaaa: true, aaaaaaaaaaaaaaaa: true} ]; Which is considered less readable. Generally, it seems preferable to format such dict literals as blocks rather than contract them to one line. llvm-svn: 297696
* Fix crash with interrupt attribute on ARM.Eli Friedman2017-03-141-1/+1
| | | | | | An indirect call has no associated function declaration. llvm-svn: 297694
OpenPOWER on IntegriCloud