]> granicus.if.org Git - clang/commit
[clang] Add storage for APValue in ConstantExpr
authorGauthier Harnisch <tyker1@outlook.com>
Sat, 15 Jun 2019 10:24:47 +0000 (10:24 +0000)
committerGauthier Harnisch <tyker1@outlook.com>
Sat, 15 Jun 2019 10:24:47 +0000 (10:24 +0000)
commitce5b229c3eb42bd896aa1534a29739a3fbec06fe
treed4e5190389f986e7b930db76b188509f2cfe438a
parent68614bff657fc84425b5b6a93fec455ebaea74cb
[clang] Add storage for APValue in ConstantExpr

Summary:
When using ConstantExpr we often need the result of the expression to be kept in the AST. Currently this is done on a by the node that needs the result and has been done multiple times for enumerator, for constexpr variables... . This patch adds to ConstantExpr the ability to store the result of evaluating the expression. no functional changes expected.

Changes:
 - Add trailling object to ConstantExpr that can hold an APValue or an uint64_t. the uint64_t is here because most ConstantExpr yield integral values so there is an optimized layout for integral values.
 - Add basic* serialization support for the trailing result.
 - Move conversion functions from an enum to a fltSemantics from clang::FloatingLiteral to llvm::APFloatBase. this change is to make it usable for serializing APValues.
 - Add basic* Import support for the trailing result.
 - ConstantExpr created in CheckConvertedConstantExpression now stores the result in the ConstantExpr Node.
 - Adapt AST dump to print the result when present.

basic* : None, Indeterminate, Int, Float, FixedPoint, ComplexInt, ComplexFloat,
the result is not yet used anywhere but for -ast-dump.

Reviewers: rsmith, martong, shafik

Reviewed By: rsmith

Subscribers: rnkovacs, hiraditya, dexonsmith, cfe-commits, llvm-commits

Tags: #clang, #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@363493 91177308-0d34-0410-b5e6-96231b3b80d8
18 files changed:
include/clang/AST/APValue.h
include/clang/AST/ASTContext.h
include/clang/AST/Expr.h
include/clang/AST/Stmt.h
include/clang/AST/TextNodeDumper.h
include/clang/Serialization/ASTReader.h
include/clang/Serialization/ASTWriter.h
lib/AST/APValue.cpp
lib/AST/ASTContext.cpp
lib/AST/ASTImporter.cpp
lib/AST/Expr.cpp
lib/AST/TextNodeDumper.cpp
lib/Sema/SemaOverload.cpp
lib/Serialization/ASTReader.cpp
lib/Serialization/ASTReaderStmt.cpp
lib/Serialization/ASTWriter.cpp
lib/Serialization/ASTWriterStmt.cpp
test/AST/ast-dump-color.cpp