| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 177402
|
| |
|
|
|
|
|
|
|
| |
If this should not happen, we should have an assert.
If it should happen, we should have a test and remove the comment.
In no case should we have this self inconsistent code.
llvm-svn: 177399
|
| |
|
|
|
|
| |
-no-integrated-as. It is the only assembler we have there.
llvm-svn: 177398
|
| |
|
|
| |
llvm-svn: 177391
|
| |
|
|
|
|
|
|
| |
we expect a related result type.
rdar://12493140
llvm-svn: 177378
|
| |
|
|
|
|
| |
out-of-date rather than missing.
llvm-svn: 177369
|
| |
|
|
|
|
|
|
|
| |
The general pattern now is that Foobar::constructTool only creates tools
defined in the tools::foobar namespace and then delegates to the parent.
The remaining duplicated code is now in the tools themselves.
llvm-svn: 177368
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and the global module index.
The global module index was querying the file manager for each of the
module files it knows about at load time, to prune out any out-of-date
information. The file manager would then cache the results of the
stat() falls used to find that module file.
Later, the same translation unit could end up trying to import one of the
module files that had previously been ignored by the module cache, but
after some other Clang instance rebuilt the module file to bring it
up-to-date. The stale stat() results in the file manager would
trigger a second rebuild of the already-up-to-date module, causing
failures down the line.
The global module index now lazily resolves its module file references
to actual AST reader module files only after the module file has been
loaded, eliminating the stat-caching race. Moreover, the AST reader
can communicate to its caller that a module file is missing (rather
than simply being out-of-date), allowing us to simplify the
module-loading logic and allowing the compiler to recover if a
dependent module file ends up getting deleted.
llvm-svn: 177367
|
| |
|
|
|
|
|
|
| |
it wasn't taking into account that the float should be truncated *before* the
range check happens. Thus (unsigned)-0.99 and (unsigned char)255.9 have defined
behavior and should not be trapped.
llvm-svn: 177362
|
| |
|
|
| |
llvm-svn: 177360
|
| |
|
|
|
|
|
|
| |
top-level HeaderDoc tags @functiongroup and
@methodgroup to doc. tags recognized.
// rdar://12379114
llvm-svn: 177358
|
| |
|
|
| |
llvm-svn: 177354
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Splitting the graph trimming and the path-finding (r177216) already
recovered quite a bit of performance lost to increased suppression.
We can still do better by also performing the reverse BFS up front
(needed for shortest-path-finding) and only walking the shortest path
for each report. This does mean we have to walk back up the path and
invalidate all the BFS numbers if the report turns out to be invalid,
but it's probably still faster than redoing the full BFS every time.
More performance work for <rdar://problem/13433687>
llvm-svn: 177353
|
| |
|
|
|
|
|
|
| |
Also, replace a std::string with a SmallString.
No functionality change.
llvm-svn: 177352
|
| |
|
|
|
|
|
| |
The previous implementation missed the case where the elif condition was
evaluated from the context of an #ifdef that was false causing PR15539.
llvm-svn: 177345
|
| |
|
|
|
|
|
| |
Issue reported by Tom Honermann!
http://llvm.org/bugs/show_bug.cgi?id=15377
llvm-svn: 177336
|
| |
|
|
|
|
| |
definition. Bump some related diagnostics from warning to extension in C++, since they're errors there. Add some missing checks for function specifiers on non-function declarations.
llvm-svn: 177335
|
| |
|
|
|
|
|
| |
Report and suggested fix by Tom Honermann!
http://llvm.org/bugs/show_bug.cgi?id=13020
llvm-svn: 177330
|
| |
|
|
|
|
|
|
|
|
|
|
| |
I have filed http://llvm.org/bugs/show_bug.cgi?id=15538 against clang.
This code is safer anyway because "cast" assumes you really know that
it's okay to make the cast. In this case isa should not be false and
dyn_cast should not return null as far as I understand. But everything
else is valid so I did not want to revert my previous patch for attributes
mips16/nomips16 or use an llvm_unreachable here which would make a number
of our tests fail for mips.
llvm-svn: 177329
|
| |
|
|
|
|
|
|
|
| |
reports, and implement implicit definition of inheriting constructors.
Remaining missing features: inheriting constructor templates, implicit
exception specifications for inheriting constructors, inheriting constructors
from dependent bases.
llvm-svn: 177320
|
| |
|
|
| |
llvm-svn: 177319
|
| |
|
|
| |
llvm-svn: 177318
|
| |
|
|
|
|
|
|
| |
into the pre-preprocessed file to be passed to
modern translator when compiling in no debug mode.
// rdar://13138170
llvm-svn: 177311
|
| |
|
|
|
|
| |
delegating to Generic_GCC::SelectTool (it already updates the tool map).
llvm-svn: 177305
|
| |
|
|
| |
llvm-svn: 177303
|
| |
|
|
|
|
| |
argument.
llvm-svn: 177301
|
| |
|
|
|
|
| |
useIntegratedAs.
llvm-svn: 177300
|
| |
|
|
| |
llvm-svn: 177299
|
| |
|
|
| |
llvm-svn: 177293
|
| |
|
|
| |
llvm-svn: 177287
|
| |
|
|
|
|
|
|
| |
When annotating "lines" starting with ":", clang-format would segfault.
This could actually happen in valid code, e.g.
#define A :
llvm-svn: 177283
|
| |
|
|
|
|
| |
Patch by Andrew Turner!
llvm-svn: 177252
|
| |
|
|
| |
llvm-svn: 177222
|
| |
|
|
|
|
|
|
|
|
|
|
| |
r175234 allowed the analyzer to model trivial copy/move constructors as
an aggregate bind. This commit extends that to trivial assignment
operators as well. Like the last commit, one of the motivating factors here
is not warning when the right-hand object is partially-initialized, which
can have legitimate uses.
<rdar://problem/13405162>
llvm-svn: 177220
|
| |
|
|
|
|
|
| |
Thanks to Richard S. for pointing out that the warning would show up
with -Weverything.
llvm-svn: 177218
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When we generate a path diagnostic for a bug report, we have to take the
full ExplodedGraph and limit it down to a single path. We do this in two
steps: "trimming", which limits the graph to all the paths that lead to
this particular bug, and "creating the report graph", which finds the
shortest path in the trimmed path to any error node.
With BugReporterVisitor false positive suppression, this becomes more
expensive: it's possible for some paths through the trimmed graph to be
invalid (i.e. likely false positives) but others to be valid. Therefore
we have to run the visitors over each path in the graph until we find one
that is valid, or until we've ruled them all out. This can become quite
expensive.
This commit separates out graph trimming from creating the report graph,
performing the first only once per bug equivalence class and the second
once per bug report. It also cleans up that portion of the code by
introducing some wrapper classes.
This seems to recover most of the performance regression described in my
last commit.
<rdar://problem/13433687>
llvm-svn: 177216
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
...in favor of this typedef:
typedef llvm::DenseMap<const ExplodedNode *, const ExplodedNode *>
InterExplodedGraphMap;
Use this everywhere the previous class and typedef were used.
Took the opportunity to ArrayRef-ize ExplodedGraph::trim while I'm at it.
No functionality change.
llvm-svn: 177215
|
| |
|
|
|
|
|
|
| |
I removed this check in the recursion->iteration commit, but forgot that
generatePathDiagnostic may be called multiple times if there are multiple
PathDiagnosticConsumers.
llvm-svn: 177214
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
For constructors/desctructors that return 'this', if there exists a callsite
that returns 'this' and is immediately before the return instruction, make
sure we are using the return value from the callsite.
We don't need to keep 'this' alive through the callsite. It also enables
optimizations in the backend, such as tail call optimization.
rdar://12818789
llvm-svn: 177211
|
| |
|
|
|
|
|
|
|
|
| |
When the template argument is both default and value dependent, the expression
retrieved for the default argument cannot be evaluated, thus never matching
any argument value. To get the proper value, get the template argument
from the desugared template specialization. Also, output the original
expression to provide more information about the argument mismatch.
llvm-svn: 177209
|
| |
|
|
|
|
| |
non-deterministic.
llvm-svn: 177207
|
| |
|
|
|
|
|
|
|
|
| |
Fixes a FIXME, improves dead symbol collection, suppresses a false positive,
which resulted from reusing the same symbol twice for simulation of 2 calls to the same function.
Fixing this lead to 2 possible false negatives in CString checker. Since the checker is still alpha and
the solution will not require revert of this commit, move the tests to a FIXME section.
llvm-svn: 177206
|
| |
|
|
|
|
| |
wrapped in a cast.
llvm-svn: 177205
|
| |
|
|
| |
llvm-svn: 177204
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
The test would overflow when computing '0 - 1'.
I don't have a good testcase for this that does not depend on system headers.
It did not trigger with preprocessed output, and I had trouble reducing the example.
Fixes <rdar://problem/13324594>.
Thanks to Michael Greiner for reporting this issue.
llvm-svn: 177201
|
| |
|
|
|
|
|
| |
These will be available in the current translation unit anyway, for
modules they only waste space and deserialization time.
llvm-svn: 177197
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
dependency for PCH/modules.
When we're building a precompiled header or module against an SDK on
Darwin, there will be a file SDKSettings.plist in the sysroot. Since
stat()'ing every system header on which a module or PCH file depends
is performance suicide, we instead stat() just SDKSettings.plist. This
hack works well on Darwin; it's unclear how we want to handle this on
other platforms. If there is a canonical file, we should use it; if
not, we either have to take the performance hit of stat()'ing system
headers repeatedly or roll the dice by not checking anything.
llvm-svn: 177194
|
| |
|
|
| |
llvm-svn: 177193
|
| |
|
|
|
|
|
|
| |
the enum constant.
This is QoI. Fixes <rdar://problem/13076064>.
llvm-svn: 177190
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The previous generatePathDiagnostic() was intended to be tail-recursive,
restarting and trying again if a report was marked invalid. However:
(1) this leaked all the cloned visitors, which weren't being deleted, and
(2) this wasn't actually tail-recursive because some local variables had
non-trivial destructors.
This was causing us to overflow the stack on inputs with large numbers of
reports in the same equivalence class, such as sqlite3.c. Being iterative
at least prevents us from blowing out the stack, but doesn't solve the
performance issue: suppressing thousands (yes, thousands) of paths in the
same equivalence class is expensive. I'm looking into that now.
<rdar://problem/13423498>
llvm-svn: 177189
|