summaryrefslogtreecommitdiffstats
path: root/clang
Commit message (Collapse)AuthorAgeFilesLines
* [objc-gnustep] Use .init_array not .ctors when requested.David Chisnall2019-03-312-1/+8
| | | | | | | This doesn't make a difference most of the time but FreeBSD/ARM doesn't run anything in the .ctors array. llvm-svn: 357362
* Range-style std::find{,_if} -> llvm::find{,_if}. NFCFangrui Song2019-03-3136-105/+72
| | | | llvm-svn: 357359
* [cmake] Change deprecated $<CONFIG> to $<CONFIGURATION>. NFCFangrui Song2019-03-301-1/+1
| | | | | | | See rL357338 for a similar change. The informational expression $<CONFIGURATION> has been deprecated since CMake 3.0 llvm-svn: 357348
* [clang-format] [PR41187] moves Java import statements to the wrong location ↵Paul Hoad2019-03-302-1/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | if code contains statements that start with the word import Summary: Import sorting of java file, incorrectly move import statement to after a function beginning with the word import. Make 1 character change to regular expression to ensure there is always at least one space/tab after the word import Previously clang-format --style="LLVM" would format ``` import X; class C { void m() { importFile(); } } ``` as ``` class C { void m() { importFile(); import X; } } ``` Reviewers: djasper, klimek, reuk, JonasToth Reviewed By: klimek Subscribers: cfe-commits Tags: #clang-tools-extra Differential Revision: https://reviews.llvm.org/D59684 llvm-svn: 357345
* [clang-format]: Add NonEmptyParentheses spacing optionReuben Thomas2019-03-305-4/+81
| | | | | | | | | | | | | This patch aims to add support for the following rules from the JUCE coding standards: - Always put a space before an open parenthesis that contains text - e.g. foo (123); - Never put a space before an empty pair of open/close parenthesis - e.g. foo(); Patch by Reuben Thomas Differential Revision: https://reviews.llvm.org/D55170 llvm-svn: 357344
* Adds `-ftime-trace` option to clang that produces Chrome `chrome://tracing` ↵Anton Afanasyev2019-03-3016-10/+99
| | | | | | | | | | | | | | compatible JSON profiling output dumps. This change adds hierarchical "time trace" profiling blocks that can be visualized in Chrome, in a "flame chart" style. Each profiling block can have a "detail" string that for example indicates the file being processed, template name being instantiated, function being optimized etc. This is taken from GitHub PR: https://github.com/aras-p/llvm-project-20170507/pull/2 Patch by Aras Pranckevičius. Differential Revision: https://reviews.llvm.org/D58675 llvm-svn: 357340
* [analyzer] MIGChecker: Add support for more deallocator APIs.Artem Dergachev2019-03-292-3/+47
| | | | | | Differential Revision: https://reviews.llvm.org/D59914 llvm-svn: 357335
* [lit] Set shlibpath_var on AIXHubert Tong2019-03-291-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | Summary: When building the `check-all` target on AIX, lit produces ``` warning: unable to inject shared library path on 'AIX' ``` This patch addresses this. `LIBPATH` is the environment variable of interest on AIX. Newer versions of AIX may consider `LD_LIBRARY_PATH`, but only when `LIBPATH` is unset. Reviewers: xingxue, jasonliu, sfertile, serge-sans-paille Reviewed By: xingxue Subscribers: jsji, cfe-commits, llvm-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D59741 llvm-svn: 357334
* Revert "[analyzer] Introduce a simplified API for adding custom path notes."Artem Dergachev2019-03-2910-138/+40
| | | | | | | | | | This reverts commit r357323. ASan leaks found by a buildbot :) Differential Revision: https://reviews.llvm.org/D58367 llvm-svn: 357332
* [analyzer] PR41239: Fix a crash on invalid source location in ↵Artem Dergachev2019-03-292-2/+12
| | | | | | | | | | | | | | | | | NoStoreFuncVisitor. It turns out that SourceManager::isInSystemHeader() crashes when an invalid source location is passed into it. Invalid source locations are relatively common: not only they come from body farms, but also, say, any function in C that didn't come with a forward declaration would have an implicit forward declaration with invalid source locations. There's a more comfy API for us to use in the Static Analyzer: CallEvent::isInSystemHeader(), so just use that. Differential Revision: https://reviews.llvm.org/D59901 llvm-svn: 357329
* [analyzer] Move taint API from ProgramState to a separate header. NFC.Artem Dergachev2019-03-2917-375/+375
| | | | | | | | | | It is now an inter-checker communication API, similar to the one that connects MallocChecker/CStringChecker/InnerPointerChecker: simply a set of setters and getters for a state trait. Differential Revision: https://reviews.llvm.org/D59861 llvm-svn: 357326
* [analyzer] PR37501: Disable assertion for logical op short circuit evaluation.Artem Dergachev2019-03-292-4/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The transfer function for the CFG element that represents a logical operation computes the value of the operation and does nothing else. The element appears after all the short circuit decisions were made, so they don't need to be made again at this point. Because our expression evaluation is imprecise, it is often hard to discriminate between: (1) we don't know the value of the RHS because we failed to evaluate it and (2) we don't know the value of the RHS because it didn't need to be evaluated. This is hard because it depends on our knowledge about the value of the LHS (eg., if LHS is true, then RHS in (LHS || RHS) doesn't need to be computed) but LHS itself may have been evaluated imprecisely and we don't know whether it is true or not. Additionally, the Analyzer wouldn't necessarily even remember what the value of the LHS was because theoretically it's not really necessary to know it for any future evaluations. In order to work around these issues, the transfer function for logical operations consists in looking at the ExplodedGraph we've constructed so far in order to figure out from which CFG direction did we arrive here. Such post-factum backtracking that doesn't involve looking up LHS and RHS values is usually possible. However sometimes it fails because when we deduplicate exploded nodes with the same program point and the same program state we may end up in a situation when we reached the same program point from two or more different directions. By removing the assertion, we admit that the procedure indeed sometimes fails to work. When it fails, we also admit that we don't know the value of the logical operator. Differential Revision: https://reviews.llvm.org/D59857 llvm-svn: 357325
* [analyzer] Introduce a simplified API for adding custom path notes.Artem Dergachev2019-03-2910-40/+138
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Almost all path-sensitive checkers need to tell the user when something specific to that checker happens along the execution path but does not constitute a bug on its own. For instance, a call to operator delete in C++ has consequences that are specific to a use-after-free bug. Deleting an object is not a bug on its own, but when the Analyzer finds an execution path on which a deleted object is used, it'll have to explain to the user when exactly during that path did the deallocation take place. Historically such custom notes were added by implementing "bug report visitors". These visitors were post-processing bug reports by visiting every ExplodedNode along the path and emitting path notes whenever they noticed that a change that is relevant to a bug report occurs within the program state. For example, it emits a "memory is deallocated" note when it notices that a pointer changes its state from "allocated" to "deleted". The "visitor" approach is powerful and efficient but hard to use because such preprocessing implies that the developer first models the effects of the event (say, changes the pointer's state from "allocated" to "deleted" as part of operator delete()'s transfer function) and then forgets what happened and later tries to reverse-engineer itself and figure out what did it do by looking at the report. The proposed approach tries to avoid discarding the information that was available when the transfer function was evaluated. Instead, it allows the developer to capture all the necessary information into a closure that will be automatically invoked later in order to produce the actual note. This should reduce boilerplate and avoid very painful logic duplication. On the technical side, the closure is a lambda that's put into a special kind of a program point tag, and a special bug report visitor visits all nodes in the report and invokes all note-producing closures it finds along the path. For now it is up to the lambda to make sure that the note is actually relevant to the report. For instance, a memory deallocation note would be irrelevant when we're reporting a division by zero bug or if we're reporting a use-after-free of a different, unrelated chunk of memory. The lambda can figure these thing out by looking at the bug report object that's passed into it. A single checker is refactored to make use of the new functionality: MIGChecker. Its program state is trivial, making it an easy testing ground for the first version of the API. Differential Revision: https://reviews.llvm.org/D58367 llvm-svn: 357323
* [WebAssembly] Add mutable globals featureThomas Lively2019-03-294-0/+28
| | | | | | | | | | | | | | | | | | Summary: This feature is not actually used for anything in the WebAssembly backend, but adding it allows users to get it into the target features sections of their objects, which makes these objects future-compatible. Reviewers: aheejin, dschuff Subscribers: sbc100, jgravelle-google, hiraditya, sunfish, jdoerfert, cfe-commits, llvm-commits Tags: #clang, #llvm Differential Revision: https://reviews.llvm.org/D60013 llvm-svn: 357321
* [Sema] Avoid sending a dependent expression to the constant evaluator.Erik Pilkington2019-03-292-0/+36
| | | | | | Fixes llvm.org/PR41286 llvm-svn: 357304
* [Sema] Fix assertion when `auto` parameter in lambda has an attribute.Volodymyr Sapsai2019-03-292-1/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | Fixes the assertion > no Attr* for AttributedType* > UNREACHABLE executed at llvm-project/clang/lib/Sema/SemaType.cpp:298! In `TypeProcessingState::getAttributedType` we put into `AttrsForTypes` types with `auto` but later in `TypeProcessingState::takeAttrForAttributedType` we use transformed types and that's why cannot find `Attr` corresponding to `AttributedType`. Fix by keeping `AttrsForTypes` up to date after replacing `AutoType`. rdar://problem/47689465 Reviewers: rsmith, arphaman, aaron.ballman Reviewed By: aaron.ballman Subscribers: jkorous, dexonsmith, jdoerfert, cfe-commits Differential Revision: https://reviews.llvm.org/D58659 llvm-svn: 357298
* [Driver] Use --warn-shared-textrel for Android.Dan Albert2019-03-292-1/+12
| | | | | | | | | | | | | | | Android does not allow shared text relocations. Enable the linker warning to detect them by default. Reviewers: srhines, pirama Reviewed By: srhines Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D53344 llvm-svn: 357296
* Various fixes and additions to creduce-clang-crash.pyGeorge Burgess IV2019-03-291-171/+334
| | | | | | | | | | | | | | | | Some more additions to the script - mainly reducing the clang args after the creduce run by removing them one by one and seeing if the crash reproduces. Other things: - remove the --crash flag when "fatal error" occurs - fixed to read stack trace functions from the top - run creduce on a copy of the original file Patch by Amy Huang! Differential Revision: https://reviews.llvm.org/D59725 llvm-svn: 357290
* [AMDGPU] Switch default DWARF version to 5Scott Linder2019-03-293-2/+5
| | | | | | | | | Effectively reverts r337612. The issues that cropped up with the last attempt appear to have gone away. Differential Revision: https://reviews.llvm.org/D59008 llvm-svn: 357285
* [fuchsia] Add clang-doc to Fuchsia distributionJulie Hockett2019-03-291-0/+1
| | | | | | Differential Revision: https://reviews.llvm.org/D5997 llvm-svn: 357275
* clang-cl: Expose -fprofile-generate and -fcs-profile-generate (PR41252)Hans Wennborg2019-03-292-7/+14
| | | | llvm-svn: 357255
* [AArch64] Support selecting TPIDR_EL[1-3] as the thread baseOliver Stannard2019-03-293-2/+44
| | | | | | | | | | | | | | Add an -mtp=el[0-3] option to select which of the AArch64 thread ID registers will be used for the TLS base pointer. This is a followup to rL356657 which added subtarget features to enable accesses to the privileged thread ID registers. Patch by Philip Derrin! Differential revision: https://reviews.llvm.org/D59631 llvm-svn: 357250
* [PowerPC] Add the support for __builtin_setrnd() in clangKang Zhang2019-03-293-0/+88
| | | | | | | | | | | | | | | | | | Summary: PowerPC64/PowerPC64le supports the builtin function __builtin_setrnd to set the floating point rounding mode. This function will use the least significant two bits of integer argument to set the floating point rounding mode. double __builtin_setrnd(int mode); The effective values for mode are: 0 - round to nearest 1 - round to zero 2 - round to +infinity 3 - round to -infinity Note that the mode argument will modulo 4, so if the int argument is greater than 3, it will only use the least significant two bits of the mode. Namely, builtin_setrnd(102)) is equal to builtin_setrnd(2). Reviewed By: jsji Differential Revision: https://reviews.llvm.org/D59403 llvm-svn: 357242
* [Sema] Fix a crash when nonnull checkingMichael Liao2019-03-292-0/+26
| | | | | | | | | | | | | | | | | | | | Summary: - If a parameter is used, nonnull checking needs function prototype to retrieve the corresponding parameter's attributes. However, at the prototype substitution phase when a template is being instantiated, expression may be created and checked without a fully specialized prototype. Under such a scenario, skip nonnull checking on that argument. Reviewers: rjmccall, tra, yaxunl Subscribers: javed.absar, kristof.beyls, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D59900 llvm-svn: 357236
* [CodeGen][ObjC] Adjust the addresses passed to calls to synthesizedAkira Hatanaka2019-03-292-0/+129
| | | | | | | | | | | | | | | | | | | | | | | | | | | copy/move constructor/assignment operator functions for non-trivial C structs. This commit fixes a bug where the offset of struct fields weren't being taken into account when computing the addresses passed to calls to the special functions. For example, the copy constructor for S1 (__copy_constructor_8_8_s0_s8) would pass the start addresses of the destination and source structs to the call to S0's copy constructor (_copy_constructor_8_8_s0) without adding the offset of field f1 to the addresses. typedef struct { id f0; S0 f1; } S1; void test(S1 s1) { S1 t = s1; } rdar://problem/49400610 llvm-svn: 357229
* Fix typos and formatting. NFC.Akira Hatanaka2019-03-291-58/+54
| | | | llvm-svn: 357228
* [MS] Make __iso_volatile_* available on all targetsReid Kleckner2019-03-288-98/+78
| | | | | | | | | | | Future versions of MSVC make these intrinsics available on x86 & x64, according to: http://lists.llvm.org/pipermail/cfe-dev/2019-March/061711.html The purpose of these builtins is to emit plain, non-atomic, volatile stores when /volatile:ms (-cc1 -fms-volatile) is enabled. llvm-svn: 357220
* [OPENMP]Add check for undefined behavior with thread allocators onAlexey Bataev2019-03-2858-115/+655
| | | | | | | | | | | | target and task-based directives. According to OpenMP 5.0, 2.11.4 allocate Clause, Restrictions, For task, taskloop or target directives, allocation requests to memory allocators with the trait access set to thread result in unspecified behavior. Patch introduces a check for omp_thread_mem_alloc predefined allocator on target- and trask-based directives. llvm-svn: 357205
* [Driver] Default Android toolchains to noexecstack.Dan Albert2019-03-289-3/+41
| | | | | | | | | | | | | | Android does not support executable stacks. Reviewers: srhines, pirama Reviewed By: pirama Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D53343 llvm-svn: 357197
* [WebAssembly] Reland of rL356953 (4dcf3acce6)Sam Clegg2019-03-284-9/+31
| | | | | | | | | The previous patch was missing GetProgramPath() in the return value of getLinkerPath(). See https://reviews.llvm.org/D59743 llvm-svn: 357195
* Make helper functions static. NFC.Benjamin Kramer2019-03-283-9/+11
| | | | llvm-svn: 357187
* [CodeGen] Add additional mangling for struct members of non trivial structsShoaib Meenai2019-03-283-18/+63
| | | | | | | | | | | | | In https://bugs.llvm.org/show_bug.cgi?id=41206 we observe bad codegen when embedding a non-trivial C struct within a C struct. This is due to the fact that name mangling for non-trivial structs marks the two structs as identical. This diff contains a fix for this issue. Patch by Dan Zimmerman <daniel.zimmerman@me.com>. Differential Revision: https://reviews.llvm.org/D59873 llvm-svn: 357184
* [Analyzer] Constraint Manager - Calculate Effective Range for DifferencesAdam Balogh2019-03-283-6/+44
| | | | | | | | | | | | | | | | | | | | | Since rL335814, if the constraint manager cannot find a range set for `A - B` (where `A` and `B` are symbols) it looks for a range for `B - A` and returns it negated if it exists. However, if a range set for both `A - B` and `B - A` is stored then it only returns the first one. If we both use `A - B` and `B - A`, these expressions behave as two totally unrelated symbols. This way we miss some useful deductions which may lead to false negatives or false positives. This tiny patch changes this behavior: if the symbolic expression the constraint manager is looking for is a difference `A - B`, it tries to retrieve the range for both `A - B` and `B - A` and if both exists it returns the intersection of range `A - B` and the negated range of `B - A`. This way every time a checker applies new constraints to the symbolic difference or to its negated it always affects both the original difference and its negated. Differential Revision: https://reviews.llvm.org/D55007 llvm-svn: 357167
* Fix Wdocumentation warning. NFCI.Simon Pilgrim2019-03-281-1/+0
| | | | llvm-svn: 357163
* [PR41247] Fixed parsing of private keyword in C++.Anastasia Stulova2019-03-283-3/+27
| | | | | | | | | Fixed bug in C++ to prevent parsing 'private' as a valid address space qualifier. Differential Revision: https://reviews.llvm.org/D59874 llvm-svn: 357162
* Fix tests after rC357150Fangrui Song2019-03-282-2/+2
| | | | llvm-svn: 357151
* [Driver] Allow -gsplit-dwarf on ELF OSes other than Linux and FuchsiaFangrui Song2019-03-282-5/+7
| | | | | | | | | | | In gcc, -gsplit-dwarf is handled in gcc/gcc.c as a spec (ASM_FINAL_SPEC): objcopy --extract-dwo + objcopy --strip-dwo. In gcc/opts.c, -gsplit_dwarf has the same semantic of a -g. Except for the availability of the external command 'objcopy', nothing precludes the feature working on other ELF OSes. llvm doesn't use objcopy, so it doesn't have to exclude other OSes. llvm-svn: 357150
* Revert "[WebAssembly] Don't use default GetLinkerPath"Derek Schuff2019-03-274-31/+9
| | | | | | | This reverts commit 4dcf3acce6d7455fd079d8e57441906ca2bad254. (reverts LLVM SVN r356953) llvm-svn: 357127
* [ASTImporter] Fix IsStructuralMatch specialization for EnumDecl to prevent ↵Shafik Yaghmour2019-03-271-0/+6
| | | | | | | | | | | re-importing an EnumDecl while trying to complete it Summary: We may try and re-import an EnumDecl while trying to complete it in IsStructuralMatch(...) specialization for EnumDecl. This change mirrors a similar fix for the specialization for RecordDecl. Differential Revision: https://reviews.llvm.org/D59845 llvm-svn: 357100
* [OPENMP]Initial support for 'allocate' clause.Alexey Bataev2019-03-27197-282/+737
| | | | | | Added parsing/sema analysis of the allocate clause. llvm-svn: 357068
* Revert the r348352 "[clang] - Simplify tools::SplitDebugName."George Rimar2019-03-275-13/+21
| | | | | | | | | This partially reverts the r348352 (https://reviews.llvm.org/D55006) because of https://bugs.llvm.org/show_bug.cgi?id=41161. I did not revert the test case file because it passes fine now. llvm-svn: 357061
* Emit -Wfortify-source using DiagRuntimeBehaviourErik Pilkington2019-03-262-3/+7
| | | | | | | | | | This fixes a false positive on the following, where st is configured to have different sizes based on some preprocessor logic: if (sizeof(buf) == sizeof(*st)) memcpy(&buf, st, sizeof(*st)); llvm-svn: 357041
* [Sema] Fix an assert when a block captures a constexpr localErik Pilkington2019-03-263-11/+24
| | | | | | | | | | | | | | MarkVarDeclODRUsed indirectly calls captureInBlock, which creates a copy expression. The copy expression is insulated in it's own ExpressionEvaluationContext, so it saves, mutates, and restores MaybeODRUseExprs as CleanupVarDeclMarking is iterating through it, leading to a crash. Fix this by iterating through a local copy of MaybeODRUseExprs. rdar://47493525 https://reviews.llvm.org/D59670 llvm-svn: 357040
* Basic: Return a reference from FileManager::getVirtualFileSystem, NFCDuncan P. N. Exon Smith2019-03-2611-26/+26
| | | | | | | | | | FileManager constructs a VFS in its constructor if it isn't passed one, and there's no way to reset it. Make that contract clear by returning a reference from its accessor. https://reviews.llvm.org/D59388 llvm-svn: 357038
* Frontend: Remove CompilerInstance::VirtualFileSystem, NFCDuncan P. N. Exon Smith2019-03-265-48/+28
| | | | | | | | | | | | | | | Remove CompilerInstance::VirtualFileSystem and CompilerInstance::setVirtualFileSystem, instead relying on the VFS in the FileManager. CompilerInstance and its clients already went to some trouble to make these match. Now they are guaranteed to match. As part of this, I added a VFS parameter (defaults to nullptr) to CompilerInstance::createFileManager, to avoid repeating construction logic in clients that just wanted to customize the VFS. https://reviews.llvm.org/D59377 llvm-svn: 357037
* [cmake] Reset variable before using itShoaib Meenai2019-03-261-1/+2
| | | | | | | | | | | | | | | | A bunch of macros use the same variable name, and since CMake macros don't get their own scope, the value persists across macro invocations, and we can end up exporting targets which shouldn't be exported. Clear the variable before each use to avoid this. Converting these macros to functions would also help, since it would avoid the variable leaking into its parent scope, and that's something I plan to follow up with. It won't fully address the problem, however, since functions still inherit variables from their parent scopes, so if someone in the parent scope just happened to use the same variable name we'd still have the same issue. llvm-svn: 357036
* Make -mno-outline pass -enable-machine-outliner=never to ld in LTOJessica Paquette2019-03-262-7/+22
| | | | | | | | | | Since AArch64 has default outlining behaviour, we need to make sure that -mno-outline is actually passed along to the linker in this case. Otherwise, it will run by default on minsize functions even when -mno-outline is specified. Also fix the darwin-ld test for this, which wasn't actually doing anything. llvm-svn: 357031
* [clang-format] Add style option AllowShortLambdasOnASingleLineRonald Wampler2019-03-267-6/+145
| | | | | | | | | | | | | | | | | Summary: This option `AllowShortLambdasOnASingleLine` similar to the other `AllowShort*` options, but applied to C++ lambdas. Reviewers: djasper, klimek Reviewed By: klimek Subscribers: MyDeveloperDay, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D57687 llvm-svn: 357027
* [CodeGen] Delete never used LValueAlignFangrui Song2019-03-261-2/+0
| | | | | | It was added by rC176658 but never used since then. llvm-svn: 357001
* [OpenCL] Allow variadic macros as Clang feature.Anastasia Stulova2019-03-264-7/+23
| | | | llvm-svn: 356987
OpenPOWER on IntegriCloud