[ASTImporter] Merge ExprBits
authorGabor Marton <martongabesz@gmail.com>
Mon, 3 Sep 2018 13:10:53 +0000 (13:10 +0000)
committerGabor Marton <martongabesz@gmail.com>
Mon, 3 Sep 2018 13:10:53 +0000 (13:10 +0000)
commita20ce60e48c2a60f9747dac0f042e9bf98f04400
treeb6a0d37e097f2aff6d7779ce53850d532f43461b
parentaa75dd128c1724c5c4b701cfecc60463449db162
[ASTImporter] Merge ExprBits

Summary:
Some `Expr` classes set up default values for the `ExprBits` of `Stmt`.  These
default values are then overwritten by the parser sometimes.  One example is
`InitListExpr` which sets the value kind to be an rvalue in the ctor.  However,
this bit may change after the `InitListExpr` is created.  There may be other
expressions similar to `InitListExpr` in this sense, thus the safest solution
is to copy the expression bits.

The lack of copying `ExprBits` causes an assertion in the analyzer engine in a
specific case: Since the value kind is not imported, the analyzer engine
believes that the given InitListExpr is an rvalue, thus it creates a
nonloc::CompoundVal instead of creating memory region (as in case of an lvalue
reference).

Reviewers: a_sidorin, r.stahl, xazax.hun, a.sidorin

Subscribers: rnkovacs, dkrupp, cfe-commits

Differential Revision: https://reviews.llvm.org/D51533

llvm-svn: 341316
clang/lib/AST/ASTImporter.cpp
clang/unittests/AST/ASTImporterTest.cpp