Commit Graph

350 Commits

Author SHA1 Message Date
Gabor Horvath c0c55d2615 [Static Analyzer] Lambda support.
Differential Revision: http://reviews.llvm.org/D12652



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247426 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-11 16:55:01 +00:00
Ted Kremenek 99bb39afb4 [analyzer] Apply whitespace cleanups by Honggyu Kim.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246978 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-08 03:50:52 +00:00
Alexey Bataev 4de8211781 [OPENMP 4.0] Initial support for array sections.
Adds parsing/sema analysis/serialization/deserialization for array sections in OpenMP constructs (introduced in OpenMP 4.0).
Currently it is allowed to use array sections only in OpenMP clauses that accepts list of expressions.
Differential Revision: http://reviews.llvm.org/D10732


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@245937 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-25 14:24:04 +00:00
David Blaikie 881f428893 Wdeprecated: CollectReachableSymbolsCallback are move constructed/returned by value, so make sure they're copy/moveable
(return by value is in ExprEngine::processPointerEscapedOnBind and any
other call to the scanReachableSymbols function template used there)

Protect the special members in the base class to avoid slicing, and make
derived classes final so these special members don't accidentally become
public on an intermediate base which would open up the possibility of
slicing again.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@244975 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-13 22:50:09 +00:00
Michael Wong a7bf44969b Commit for http://reviews.llvm.org/D10765
for OpenMP 4 target data directive parsing and sema.
This commit is on behalf of Kelvin Li.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@242785 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-21 13:44:28 +00:00
Alexey Bataev ce92dcef1e [OPENMP 4.0] Initial support for 'omp cancel' construct.
Implemented parsing/sema analysis + (de)serialization.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241253 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-02 11:25:17 +00:00
Alexey Bataev a4233e1014 [OPENMP 4.0] Initial support for 'omp cancellation point' construct.
Add parsing and sema analysis for 'omp cancellation point' directive.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241145 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-01 06:57:41 +00:00
Alexander Kornienko 8ca7705aa3 Revert r240270 ("Fixed/added namespace ending comments using clang-tidy").
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@240353 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-22 23:07:51 +00:00
Alexander Kornienko ac58acc7f2 Fixed/added namespace ending comments using clang-tidy. NFC
The patch is generated using this command:

  $ tools/extra/clang-tidy/tool/run-clang-tidy.py -fix \
      -checks=-*,llvm-namespace-comment -header-filter='llvm/.*|clang/.*' \
      work/llvm/tools/clang

To reduce churn, not touching namespaces spanning less than 10 lines.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@240270 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-22 09:47:44 +00:00
Alexey Bataev 9080c07f6d [OPENMP] Support for '#pragma omp taskgroup' directive.
Added parsing, sema analysis and codegen for '#pragma omp taskgroup' directive (OpenMP 4.0).
The code for directive is generated the following way:
#pragma omp taskgroup
<body>

void __kmpc_taskgroup(<loc>, thread_id);
<body>
void __kmpc_end_taskgroup(<loc>, thread_id);


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@240011 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-18 12:14:09 +00:00
Yunzhong Gao e43fe24e60 Implementing C99 partial re-initialization behavior (DR-253)
Based on previous discussion on the mailing list, clang currently lacks support
for C99 partial re-initialization behavior:
Reference: http://lists.cs.uiuc.edu/pipermail/cfe-dev/2013-April/029188.html
Reference: http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_253.htm

This patch attempts to fix this problem.

Given the following code snippet,

struct P1 { char x[6]; };
struct LP1 { struct P1 p1; };

struct LP1 l = { .p1 = { "foo" }, .p1.x[2] = 'x' };
// this example is adapted from the example for "struct fred x[]" in DR-253;
// currently clang produces in l: { "\0\0x" },
//   whereas gcc 4.8 produces { "fox" };
// with this fix, clang will also produce: { "fox" };


Differential Review: http://reviews.llvm.org/D5789



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@239446 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-10 00:27:52 +00:00
Benjamin Kramer 73febf8de3 [analyzer] Remove unused function. No functional change intended.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@233060 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-24 11:11:11 +00:00
Anna Zaks 8b5a5f304a [analyzer] Relax an assertion in VisitLvalArraySubscriptExpr
The analyzer thinks that ArraySubscriptExpr cannot be an r-value (ever).
However, it can be in some corner cases. Specifically, C forbids expressions
of unqualified void type from being l-values.

Note, the analyzer will keep modeling the subscript expr as an l-value. The
analyzer should be treating void* as a char array
(https://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/Pointer-Arith.html).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@228249 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-05 01:02:59 +00:00
Richard Smith 4617a9dfc9 [c++1z] N4295: fold-expressions.
This is a new form of expression of the form:

  (expr op ... op expr)

where one of the exprs is a parameter pack. It expands into

  (expr1 op (expr2onwards op ... op expr))

(and likewise if the pack is on the right). The non-pack operand can be
omitted; in that case, an empty pack gives a fallback value or an error,
depending on the operator.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221573 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-08 05:07:16 +00:00
Kaelyn Takata ebbcfcf837 Add the initial TypoExpr AST node for delayed typo correction.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220692 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-27 18:07:20 +00:00
Alexey Bataev b800824f17 Fix for bug http://llvm.org/PR17427.
Assertion failed: "Computed __func__ length differs from type!"
Reworked PredefinedExpr representation with internal StringLiteral field for function declaration.
Differential Revision: http://reviews.llvm.org/D5365


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219393 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-09 08:45:04 +00:00
Alexey Bataev 2b16d2796f [OPENMP] 'omp teams' directive basic support.
Includes parsing and semantic analysis for 'omp teams' directive support from OpenMP 4.0. Adds additional analysis to 'omp target' directive with 'omp teams' directive.  


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219385 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-09 04:18:56 +00:00
Renato Golin 37d95eb570 Revert "[OPENMP] 'omp teams' directive basic support. Includes parsing and semantic analysis for 'omp teams' directive support from OpenMP 4.0. Adds additional analysis to 'omp target' directive with 'omp teams' directive."
This reverts commit r219197 because it broke ARM self-hosting buildbots with
segmentation fault errors in many tests.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219289 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-08 09:06:45 +00:00
Alexey Bataev 95a2fbb946 [OPENMP] 'omp teams' directive basic support.
Includes parsing and semantic analysis for 'omp teams' directive support from OpenMP 4.0. Adds additional analysis to 'omp target' directive with 'omp teams' directive.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219197 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-07 10:13:33 +00:00
Alexander Musman 03bf4c157b [OPENMP] Parsing/Sema of directive omp parallel for simd
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218299 91177308-0d34-0410-b5e6-96231b3b80d8
2014-09-23 09:33:00 +00:00
Alexey Bataev bd7dfd35d3 [OPENMP] Initial parsing/sema analysis of 'target' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218110 91177308-0d34-0410-b5e6-96231b3b80d8
2014-09-19 08:19:49 +00:00
Alexander Musman f0388485cc Parsing/Sema of directive omp for simd
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218029 91177308-0d34-0410-b5e6-96231b3b80d8
2014-09-18 05:12:34 +00:00
Manuel Klimek e216a3b10b Work around missing handling of temporaries bound to default arguments.
Yet more problems due to the missing CXXBindTemporaryExpr in the CFG for
default arguments.

Unfortunately we cannot just switch off inserting temporaries for the
corresponding default arguments, as that breaks existing tests
(test/SemaCXX/return-noreturn.cpp:245).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215554 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-13 15:25:55 +00:00
Manuel Klimek a8a5ebf30c Work around default parameter problem in the static analyzer.
In cases like:
  struct C { ~C(); }
  void f(C c = C());
  void t() {
    f();
  }

We currently do not add the CXXBindTemporaryExpr for the temporary (the
code mentions that as the default parameter expressions are owned by
the declaration, we'd otherwise add the same expression multiple times),
but we add the temporary destructor pointing to the CXXBindTemporaryExpr.
We need to fix that before we can re-enable the assertion.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215357 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-11 14:54:30 +00:00
Manuel Klimek cbcae73c51 Re-applying r214962.
Changes to the original patch:
- model the CFG for temporary destructors in conditional operators so that
  the destructors of the true and false branch are always exclusive. This
  is necessary because we must not have impossible paths for the path
  based analysis to work.
- add multiple regression tests with ternary operators

Original description:
Fix modelling of non-lifetime-extended temporary destructors in the
analyzer.

Changes to the CFG:
When creating the CFG for temporary destructors, we create a structure
that mirrors the branch structure of the conditionally executed
temporary constructors in a full expression.
The branches we create use a CXXBindTemporaryExpr as terminator which
corresponds to the temporary constructor which must have been executed
to enter the destruction branch.

2. Changes to the Analyzer:
When we visit a CXXBindTemporaryExpr we mark the CXXBindTemporaryExpr as
executed in the state; when we reach a branch that contains the
corresponding CXXBindTemporaryExpr as terminator, we branch out
depending on whether the corresponding CXXBindTemporaryExpr was marked
as executed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215096 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-07 10:42:17 +00:00
Rui Ueyama 0c6a6659ea Revert "Fix modelling of non-lifetime-extended temporary destructors in the analyzer."
This reverts commit r214962 because after the change the
following code doesn't compile with -Wreturn-type -Werror.

  #include <cstdlib>

  class NoReturn {
  public:
    ~NoReturn() __attribute__((noreturn)) { exit(1); }
  };

  int check() {
    true ? NoReturn() : NoReturn();
  }

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@214998 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-06 22:01:54 +00:00
Manuel Klimek c9e2473e7d Remove unnecessary semicolon.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@214970 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-06 14:21:59 +00:00
Manuel Klimek 2282b76a95 Fix modelling of non-lifetime-extended temporary destructors in the analyzer.
1. Changes to the CFG:
When creating the CFG for temporary destructors, we create a structure
that mirrors the branch structure of the conditionally executed
temporary constructors in a full expression.
The branches we create use a CXXBindTemporaryExpr as terminator which
corresponds to the temporary constructor which must have been executed
to enter the destruction branch.

2. Changes to the Analyzer:
When we visit a CXXBindTemporaryExpr we mark the CXXBindTemporaryExpr as
executed in the state; when we reach a branch that contains the
corresponding CXXBindTemporaryExpr as terminator, we branch out
depending on whether the corresponding CXXBindTemporaryExpr was marked
as executed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@214962 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-06 12:45:51 +00:00
Alexey Bataev a005babcca [OPENMP] Initial parsing and sema analysis for 'atomic' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213639 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-22 10:10:35 +00:00
Alexey Bataev 116c37cf11 [OPENMP] Initial parsing and sema analysis for 'ordered' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213616 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-22 06:45:04 +00:00
Alexey Bataev e559847c3d [OPENMP] Initial parsing and sema analysis for 'flush' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213512 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-21 11:26:11 +00:00
Alexander Musman 76fc5c55ec [OPENMP] Parsing/Sema of the OpenMP directive 'critical'.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213510 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-21 09:42:05 +00:00
Alexey Bataev 570d14de3d [OPENMP] Initial parsing and sema analysis for 'taskwait' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213363 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-18 10:17:07 +00:00
Alexey Bataev 3ea0be63fd [OPENMP] Initial parsing and sema analysis for 'barrier' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213360 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-18 09:11:51 +00:00
Alexey Bataev 27b4c37d4a [OPENMP] Initial parsing and sema analysis of 'taskyield' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213355 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-18 07:47:19 +00:00
Alexander Musman 0b17b9e0f3 [OPENMP] Parsing/Sema analysis of directive 'master'
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213237 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-17 08:54:58 +00:00
Alexey Bataev 3e0fef67a6 [OPENMP] Parsing and sema analysis for 'omp task' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212804 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-11 11:25:16 +00:00
Alexey Bataev 61d27f11f3 [OPENMP] Parsing and sema analysis for 'omp parallel sections' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212516 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-08 08:12:03 +00:00
Alexey Bataev 36046a82fc [OPENMP] Added initial support for 'omp parallel for'.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212453 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-07 13:01:15 +00:00
David Majnemer 1d944f5805 StaticAnalyzer: Silence a warning
ExprEngine wasn't ready for SEHLeaveStmtClass.  Handle it like all the
other SEH constructs by aborting.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212436 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-07 06:20:50 +00:00
Alp Toker c556f81241 Track IntrusiveRefCntPtr::get() changes from LLVM r212366
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212369 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-05 03:08:06 +00:00
Alexey Bataev f0a57f4453 [OPENMP] Initial parsing and sema analysis for 'single' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211774 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-26 12:05:45 +00:00
Alexey Bataev 0eca5e96c1 [OPENMP] Initial parsing and sema analysis for 'section' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211767 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-26 08:21:58 +00:00
Alexey Bataev 71f61a8866 [OPENMP] Initial support for 'sections' directive.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211685 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-25 11:44:49 +00:00
David Majnemer c1c56609d2 StaticAnalyzer: Switch a loop to a range-based for
Merely a code simplification, no functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211484 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-23 02:16:38 +00:00
Alexey Bataev b23263a1ac [OPENMP] Initial support for '#pragma omp for' (fixed incompatibility with MSVC).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211140 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-18 04:14:57 +00:00
Rafael Espindola 7d2009b4cd Revert "[OPENMP] Initial support for '#pragma omp for'."
This reverts commit r211096. Looks like it broke the msvc build:

SemaOpenMP.cpp(140) : error C4519: default template arguments are only allowed on a class template

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211113 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-17 17:20:53 +00:00
Alexey Bataev 46c5afbd70 [OPENMP] Initial support for '#pragma omp for'.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211096 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-17 11:49:22 +00:00
Richard Trieu 8a84096523 Removing an "if (this == nullptr)" check from two print methods. The condition
will never be true in a well-defined context.  The checking for null pointers
has been moved into the caller logic so it does not rely on undefined behavior.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210498 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-09 22:53:25 +00:00
Craig Topper 1843a2095a [C++11] Use 'nullptr'. StaticAnalyzer edition.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209642 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-27 02:45:47 +00:00