You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by ta...@apache.org on 2018/03/28 17:19:17 UTC
[3/3] impala git commit: IMPALA-5980: Upgrade to LLVM 5.0.1
IMPALA-5980: Upgrade to LLVM 5.0.1
Highlighting a few changes in LLVM:
- Minor changes to some function signatures
- Minor changes to error handling
- Split Bitcode/ReaderWriter.h - https://reviews.llvm.org/D26502
- Introduced an optional new GVN optimization pass.
Needed to fix a bunch of new clang-tidy warnings.
Testing:
Ran core and ASAN tests successfully.
Performance:
Ran single node TPC-H and targeted perf with scale factor 60. Both
improved on average. Identified regression in
"primitive_filter_in_predicate" which will be addressed by IMPALA-6621.
+-------------------+-----------------------+---------+------------+------------+----------------+
| Workload | File Format | Avg (s) | Delta(Avg) | GeoMean(s) | Delta(GeoMean) |
+-------------------+-----------------------+---------+------------+------------+----------------+
| TARGETED-PERF(60) | parquet / none / none | 22.29 | -0.12% | 3.90 | +3.16% |
| TPCH(60) | parquet / none / none | 15.97 | -3.64% | 10.14 | -4.92% |
+-------------------+-----------------------+---------+------------+------------+----------------+
+-------------------+--------------------------------------------------------+-----------------------+--------+-------------+------------+------------+----------------+-------------+-------+
| Workload | Query | File Format | Avg(s) | Base Avg(s) | Delta(Avg) | StdDev(%) | Base StdDev(%) | Num Clients | Iters |
+-------------------+--------------------------------------------------------+-----------------------+--------+-------------+------------+------------+----------------+-------------+-------+
| TARGETED-PERF(60) | PERF_LIMIT-Q1 | parquet / none / none | 0.01 | 0.00 | R +156.43% | * 25.80% * | * 17.14% * | 1 | 5 |
| TARGETED-PERF(60) | primitive_filter_in_predicate | parquet / none / none | 3.39 | 1.92 | R +76.33% | 3.23% | 4.37% | 1 | 5 |
| TARGETED-PERF(60) | primitive_filter_string_non_selective | parquet / none / none | 1.25 | 1.11 | +12.46% | 3.41% | 5.36% | 1 | 5 |
| TARGETED-PERF(60) | primitive_filter_decimal_selective | parquet / none / none | 1.40 | 1.25 | +12.25% | 3.57% | 3.44% | 1 | 5 |
| TARGETED-PERF(60) | primitive_filter_string_like | parquet / none / none | 16.87 | 15.65 | +7.78% | 5.05% | 0.37% | 1 | 5 |
| TARGETED-PERF(60) | primitive_min_max_runtime_filter | parquet / none / none | 1.79 | 1.71 | +4.77% | 0.71% | 1.73% | 1 | 5 |
| TARGETED-PERF(60) | primitive_broadcast_join_2 | parquet / none / none | 0.60 | 0.58 | +3.64% | 3.19% | 3.81% | 1 | 5 |
| TARGETED-PERF(60) | primitive_filter_string_selective | parquet / none / none | 0.95 | 0.93 | +2.91% | 5.23% | 5.85% | 1 | 5 |
| TARGETED-PERF(60) | primitive_broadcast_join_3 | parquet / none / none | 4.33 | 4.21 | +2.83% | 5.46% | 3.25% | 1 | 5 |
| TARGETED-PERF(60) | primitive_groupby_bigint_lowndv | parquet / none / none | 4.59 | 4.47 | +2.82% | 3.73% | 1.14% | 1 | 5 |
| TARGETED-PERF(60) | primitive_conjunct_ordering_3 | parquet / none / none | 0.20 | 0.19 | +2.65% | 4.76% | 2.24% | 1 | 5 |
| TARGETED-PERF(60) | PERF_AGG-Q1 | parquet / none / none | 2.49 | 2.43 | +2.31% | 1.06% | 1.93% | 1 | 5 |
| TARGETED-PERF(60) | PERF_AGG-Q6 | parquet / none / none | 2.04 | 2.00 | +2.09% | 3.51% | 2.80% | 1 | 5 |
| TPCH(60) | TPCH-Q3 | parquet / none / none | 12.37 | 12.17 | +1.62% | 0.80% | 2.45% | 1 | 5 |
| TARGETED-PERF(60) | PERF_STRING-Q5 | parquet / none / none | 4.52 | 4.45 | +1.54% | 1.23% | 1.08% | 1 | 5 |
| TPCH(60) | TPCH-Q6 | parquet / none / none | 2.95 | 2.91 | +1.33% | 1.92% | 1.67% | 1 | 5 |
| TARGETED-PERF(60) | PERF_STRING-Q4 | parquet / none / none | 3.71 | 3.66 | +1.26% | 0.34% | 0.53% | 1 | 5 |
| TPCH(60) | TPCH-Q1 | parquet / none / none | 18.69 | 18.47 | +1.19% | 0.75% | 0.31% | 1 | 5 |
| TARGETED-PERF(60) | PERF_STRING-Q7 | parquet / none / none | 8.15 | 8.07 | +0.99% | 3.92% | 1.58% | 1 | 5 |
| TARGETED-PERF(60) | primitive_groupby_decimal_highndv | parquet / none / none | 31.31 | 31.01 | +0.97% | 1.74% | 1.14% | 1 | 5 |
| TPCH(60) | TPCH-Q5 | parquet / none / none | 7.59 | 7.53 | +0.78% | 0.38% | 0.99% | 1 | 5 |
| TARGETED-PERF(60) | PERF_AGG-Q4 | parquet / none / none | 21.25 | 21.09 | +0.76% | 0.76% | 0.75% | 1 | 5 |
| TARGETED-PERF(60) | primitive_conjunct_ordering_4 | parquet / none / none | 0.24 | 0.24 | +0.75% | 3.14% | 4.76% | 1 | 5 |
| TPCH(60) | TPCH-Q19 | parquet / none / none | 7.88 | 7.82 | +0.74% | 2.39% | 2.64% | 1 | 5 |
| TARGETED-PERF(60) | primitive_orderby_bigint | parquet / none / none | 5.10 | 5.07 | +0.61% | 0.74% | 0.54% | 1 | 5 |
| TARGETED-PERF(60) | PERF_STRING-Q3 | parquet / none / none | 3.61 | 3.59 | +0.60% | 1.45% | 0.90% | 1 | 5 |
| TARGETED-PERF(60) | primitive_orderby_all | parquet / none / none | 27.63 | 27.48 | +0.55% | 0.85% | 0.10% | 1 | 5 |
| TPCH(60) | TPCH-Q4 | parquet / none / none | 5.81 | 5.79 | +0.45% | 1.65% | 2.16% | 1 | 5 |
| TPCH(60) | TPCH-Q13 | parquet / none / none | 23.49 | 23.43 | +0.27% | 0.83% | 0.63% | 1 | 5 |
| TPCH(60) | TPCH-Q21 | parquet / none / none | 68.88 | 68.76 | +0.18% | 0.22% | 0.19% | 1 | 5 |
| TARGETED-PERF(60) | primitive_groupby_decimal_lowndv.test | parquet / none / none | 4.38 | 4.37 | +0.09% | 2.45% | 0.45% | 1 | 5 |
| TARGETED-PERF(60) | primitive_conjunct_ordering_5 | parquet / none / none | 10.40 | 10.40 | +0.07% | 0.77% | 0.50% | 1 | 5 |
| TARGETED-PERF(60) | primitive_long_predicate | parquet / none / none | 222.37 | 222.23 | +0.06% | 0.25% | 0.25% | 1 | 5 |
| TPCH(60) | TPCH-Q8 | parquet / none / none | 10.65 | 10.65 | +0.03% | 0.55% | 1.40% | 1 | 5 |
| TARGETED-PERF(60) | primitive_shuffle_join_one_to_many_string_with_groupby | parquet / none / none | 261.84 | 261.87 | -0.01% | 0.91% | 0.74% | 1 | 5 |
| TARGETED-PERF(60) | PERF_AGG-Q3 | parquet / none / none | 9.44 | 9.45 | -0.02% | 0.92% | 1.33% | 1 | 5 |
| TPCH(60) | TPCH-Q16 | parquet / none / none | 5.21 | 5.21 | -0.02% | 1.46% | 1.64% | 1 | 5 |
| TARGETED-PERF(60) | primitive_top-n_all | parquet / none / none | 34.58 | 34.62 | -0.11% | 0.22% | 0.19% | 1 | 5 |
| TARGETED-PERF(60) | primitive_topn_bigint | parquet / none / none | 4.24 | 4.25 | -0.13% | 6.66% | 2.03% | 1 | 5 |
| TARGETED-PERF(60) | PERF_STRING-Q2 | parquet / none / none | 3.23 | 3.24 | -0.34% | 2.03% | 0.32% | 1 | 5 |
| TARGETED-PERF(60) | primitive_broadcast_join_1 | parquet / none / none | 0.18 | 0.18 | -0.40% | 6.16% | 2.45% | 1 | 5 |
| TARGETED-PERF(60) | primitive_exchange_broadcast | parquet / none / none | 46.27 | 46.51 | -0.52% | 7.83% | * 15.60% * | 1 | 5 |
| TARGETED-PERF(60) | primitive_groupby_bigint_pk | parquet / none / none | 114.32 | 114.92 | -0.52% | 0.24% | 0.61% | 1 | 5 |
| TPCH(60) | TPCH-Q22 | parquet / none / none | 6.66 | 6.70 | -0.53% | 1.39% | 0.84% | 1 | 5 |
| TPCH(60) | TPCH-Q20 | parquet / none / none | 5.78 | 5.81 | -0.62% | 1.25% | 0.67% | 1 | 5 |
| TPCH(60) | TPCH-Q2 | parquet / none / none | 2.53 | 2.55 | -0.64% | 3.86% | 3.72% | 1 | 5 |
| TARGETED-PERF(60) | PERF_AGG-Q5 | parquet / none / none | 0.58 | 0.58 | -0.75% | 0.99% | 6.89% | 1 | 5 |
| TARGETED-PERF(60) | PERF_AGG-Q7 | parquet / none / none | 2.05 | 2.07 | -0.86% | 2.16% | 4.73% | 1 | 5 |
| TARGETED-PERF(60) | primitive_shuffle_join_union_all_with_groupby | parquet / none / none | 54.86 | 55.34 | -0.87% | 0.25% | 0.66% | 1 | 5 |
| TARGETED-PERF(60) | primitive_conjunct_ordering_2 | parquet / none / none | 7.52 | 7.59 | -0.98% | 1.53% | 1.73% | 1 | 5 |
| TPCH(60) | TPCH-Q9 | parquet / none / none | 36.43 | 36.79 | -1.00% | 1.60% | 7.39% | 1 | 5 |
| TARGETED-PERF(60) | PERF_STRING-Q1 | parquet / none / none | 2.79 | 2.82 | -1.10% | 1.15% | 2.25% | 1 | 5 |
| TPCH(60) | TPCH-Q11 | parquet / none / none | 1.95 | 1.97 | -1.18% | 3.14% | 2.24% | 1 | 5 |
| TARGETED-PERF(60) | PERF_AGG-Q2 | parquet / none / none | 10.98 | 11.11 | -1.24% | 0.77% | 1.45% | 1 | 5 |
| TARGETED-PERF(60) | primitive_small_join_1 | parquet / none / none | 0.22 | 0.22 | -1.34% | * 13.03% * | * 12.31% * | 1 | 5 |
| TPCH(60) | TPCH-Q7 | parquet / none / none | 42.82 | 43.41 | -1.37% | 1.63% | 1.51% | 1 | 5 |
| TARGETED-PERF(60) | primitive_empty_build_join_1 | parquet / none / none | 3.30 | 3.35 | -1.54% | 2.15% | 1.27% | 1 | 5 |
| TARGETED-PERF(60) | PERF_STRING-Q6 | parquet / none / none | 10.34 | 10.54 | -1.81% | 0.24% | 2.02% | 1 | 5 |
| TARGETED-PERF(60) | primitive_groupby_bigint_highndv | parquet / none / none | 32.80 | 33.46 | -1.98% | 1.29% | 0.61% | 1 | 5 |
| TARGETED-PERF(60) | primitive_filter_decimal_non_selective | parquet / none / none | 1.62 | 1.67 | -3.01% | 0.79% | 1.65% | 1 | 5 |
| TARGETED-PERF(60) | primitive_conjunct_ordering_1 | parquet / none / none | 0.13 | 0.14 | -3.36% | 8.66% | * 12.66% * | 1 | 5 |
| TARGETED-PERF(60) | primitive_exchange_shuffle | parquet / none / none | 84.92 | 87.96 | -3.46% | 1.46% | 1.50% | 1 | 5 |
| TPCH(60) | TPCH-Q12 | parquet / none / none | 6.98 | 7.31 | -4.57% | 1.03% | 7.13% | 1 | 5 |
| TPCH(60) | TPCH-Q18 | parquet / none / none | 47.54 | 50.39 | -5.64% | 5.70% | 5.53% | 1 | 5 |
| TARGETED-PERF(60) | primitive_filter_bigint_non_selective | parquet / none / none | 0.88 | 0.96 | -7.81% | 4.27% | 5.97% | 1 | 5 |
| TPCH(60) | TPCH-Q15 | parquet / none / none | 8.14 | 9.15 | -11.09% | 0.63% | * 10.44% * | 1 | 5 |
| TPCH(60) | TPCH-Q10 | parquet / none / none | 12.66 | 14.28 | -11.34% | 4.32% | 1.14% | 1 | 5 |
| TPCH(60) | TPCH-Q17 | parquet / none / none | 10.31 | 12.59 | -18.14% | 0.65% | 3.72% | 1 | 5 |
| TARGETED-PERF(60) | primitive_filter_bigint_selective | parquet / none / none | 0.14 | 0.19 | I -27.60% | * 32.55% * | * 39.78% * | 1 | 5 |
| TPCH(60) | TPCH-Q14 | parquet / none / none | 6.10 | 11.00 | I -44.55% | 4.06% | 3.84% | 1 | 5 |
+-------------------+--------------------------------------------------------+-----------------------+--------+-------------+------------+------------+----------------+-------------+-------+
Change-Id: Ib0a15cb53feab89e7b35a56b67b3b30eb3e62c6b
Reviewed-on: http://gerrit.cloudera.org:8080/9584
Reviewed-by: Tim Armstrong <ta...@cloudera.com>
Tested-by: Impala Public Jenkins
Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/9f31390c
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/9f31390c
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/9f31390c
Branch: refs/heads/2.x
Commit: 9f31390c647a14c8a10f0172bfda7f18dd5d8c24
Parents: f46c695
Author: Bikramjeet Vig <bi...@cloudera.com>
Authored: Wed Oct 25 12:12:52 2017 -0700
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Wed Mar 28 07:40:00 2018 +0000
----------------------------------------------------------------------
be/CMakeLists.txt | 12 ++++
.../benchmarks/row-batch-serialize-benchmark.cc | 9 ++-
be/src/codegen/codegen-anyval.cc | 14 ++---
be/src/codegen/instruction-counter-test.cc | 4 +-
be/src/codegen/llvm-codegen.cc | 59 ++++++++++++--------
be/src/exprs/aggregate-functions-ir.cc | 32 -----------
be/src/rpc/impala-service-pool.h | 4 +-
be/src/runtime/bufferpool/buffer-pool-test.cc | 6 +-
be/src/runtime/data-stream-sender.cc | 2 -
be/src/runtime/data-stream-sender.h | 3 -
be/src/runtime/krpc-data-stream-sender.cc | 1 -
be/src/runtime/krpc-data-stream-sender.h | 3 -
be/src/runtime/row-batch-serialize-test.cc | 3 +-
be/src/runtime/row-batch.cc | 6 +-
be/src/runtime/row-batch.h | 7 ++-
be/src/runtime/types.cc | 2 +-
be/src/service/fe-support.cc | 28 ++++++----
be/src/thirdparty/squeasel/squeasel.c | 9 ++-
be/src/transport/TSasl.cpp | 26 +++++----
be/src/transport/TSaslClientTransport.cpp | 4 +-
be/src/transport/TSaslTransport.cpp | 2 +-
be/src/udf/udf-test.cc | 3 +-
be/src/udf/udf.h | 4 +-
bin/bootstrap_toolchain.py | 2 +-
bin/impala-config.sh | 8 +--
.../queries/QueryTest/udf-errors.test | 1 +
26 files changed, 131 insertions(+), 123 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/be/CMakeLists.txt b/be/CMakeLists.txt
index 516166d..b6e10b0 100644
--- a/be/CMakeLists.txt
+++ b/be/CMakeLists.txt
@@ -65,8 +65,20 @@ SET(CXX_COVERAGE_FLAGS "-fprofile-arcs -ftest-coverage")
# when using ccache as clang thinks it is not called from a terminal.
# -Wno-mismatched-tags: ignore harmless class/struct mismatch for forward declarations.
# Disabling to be consistent with gcc, which doesn't have this warning.
+# -Wno-zero-as-null-pointer-constant: We are slowly moving towards the use of nullptr,
+# but till we switch to it completely, we will ignore the warnings due to use of
+# NULL as a null pointer constant.
+# -Wno-c++17-extensions: ignore warnings caused due to the use of [[nodiscard]]
+# attribute which our current compiler does not support but is used in conjunction
+# with WARN_UNUSED_RESULT with our current toolchain to be effective.
+# -Wno-inconsistent-missing-destructor-override: ignore warnings to mark virtual
+# destructors with 'override' which is enforced by clang by not recommended by c++
+# core guidelines (read C.128).
SET(CXX_CLANG_FLAGS "-Qunused-arguments -fcolor-diagnostics -Wno-unused-local-typedef")
SET(CXX_CLANG_FLAGS "${CXX_CLANG_FLAGS} -Wno-mismatched-tags")
+SET(CXX_CLANG_FLAGS "${CXX_CLANG_FLAGS} -Wno-zero-as-null-pointer-constant")
+SET(CXX_CLANG_FLAGS "${CXX_CLANG_FLAGS} -Wno-c++17-extensions")
+SET(CXX_CLANG_FLAGS "${CXX_CLANG_FLAGS} -Wno-inconsistent-missing-destructor-override")
# For any gcc builds:
# -g: Enable symbols for profiler tools
# -Wno-unused-local-typedefs: Do not warn for local typedefs that are unused.
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/benchmarks/row-batch-serialize-benchmark.cc
----------------------------------------------------------------------
diff --git a/be/src/benchmarks/row-batch-serialize-benchmark.cc b/be/src/benchmarks/row-batch-serialize-benchmark.cc
index a2071ca..b55d04b 100644
--- a/be/src/benchmarks/row-batch-serialize-benchmark.cc
+++ b/be/src/benchmarks/row-batch-serialize-benchmark.cc
@@ -128,8 +128,10 @@ class RowBatchSerializeBaseline {
if (batch->compression_scratch_.size() < compressed_size) {
batch->compression_scratch_.resize(compressed_size);
}
- uint8_t* input = (uint8_t*)output_batch->tuple_data.c_str();
- uint8_t* compressed_output = (uint8_t*)batch->compression_scratch_.c_str();
+ uint8_t* input = const_cast<uint8_t*>(
+ reinterpret_cast<const uint8_t*>(output_batch->tuple_data.c_str()));
+ uint8_t* compressed_output = const_cast<uint8_t*>(
+ reinterpret_cast<const uint8_t*>(batch->compression_scratch_.c_str()));
status =
compressor.ProcessBlock(true, size, input, &compressed_size, &compressed_output);
DCHECK(status.ok()) << status.GetDetail();
@@ -194,7 +196,8 @@ class RowBatchSerializeBaseline {
uint8_t* tuple_data;
if (input_batch.compression_type != THdfsCompression::NONE) {
// Decompress tuple data into data pool
- uint8_t* compressed_data = (uint8_t*)input_batch.tuple_data.c_str();
+ uint8_t* compressed_data = const_cast<uint8_t*>(
+ reinterpret_cast<const uint8_t*>(input_batch.tuple_data.c_str()));
size_t compressed_size = input_batch.tuple_data.size();
Lz4Decompressor decompressor(nullptr, false);
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/codegen/codegen-anyval.cc
----------------------------------------------------------------------
diff --git a/be/src/codegen/codegen-anyval.cc b/be/src/codegen/codegen-anyval.cc
index 6575cfd..3e2eb1e 100644
--- a/be/src/codegen/codegen-anyval.cc
+++ b/be/src/codegen/codegen-anyval.cc
@@ -46,20 +46,20 @@ llvm::Type* CodegenAnyVal::GetLoweredType(LlvmCodeGen* cg, const ColumnType& typ
case TYPE_INT: // i64
return cg->i64_type();
case TYPE_BIGINT: // { i8, i64 }
- return llvm::StructType::get(cg->i8_type(), cg->i64_type(), NULL);
+ return llvm::StructType::get(cg->i8_type(), cg->i64_type());
case TYPE_FLOAT: // i64
return cg->i64_type();
case TYPE_DOUBLE: // { i8, double }
- return llvm::StructType::get(cg->i8_type(), cg->double_type(), NULL);
+ return llvm::StructType::get(cg->i8_type(), cg->double_type());
case TYPE_STRING: // { i64, i8* }
case TYPE_VARCHAR: // { i64, i8* }
case TYPE_FIXED_UDA_INTERMEDIATE: // { i64, i8* }
- return llvm::StructType::get(cg->i64_type(), cg->ptr_type(), NULL);
+ return llvm::StructType::get(cg->i64_type(), cg->ptr_type());
case TYPE_CHAR:
DCHECK(false) << "NYI:" << type.DebugString();
return NULL;
case TYPE_TIMESTAMP: // { i64, i64 }
- return llvm::StructType::get(cg->i64_type(), cg->i64_type(), NULL);
+ return llvm::StructType::get(cg->i64_type(), cg->i64_type());
case TYPE_DECIMAL: // %"struct.impala_udf::DecimalVal" (isn't lowered)
// = { {i8}, [15 x i8], {i128} }
return cg->GetNamedType(LLVM_DECIMALVAL_NAME);
@@ -805,12 +805,12 @@ llvm::Value* CodegenAnyVal::GetNullVal(LlvmCodeGen* codegen, llvm::Type* val_typ
llvm::StructType* anyval_struct_type =
llvm::cast<llvm::StructType>(struct_type->getElementType(0));
llvm::Type* is_null_type = anyval_struct_type->getElementType(0);
- llvm::Value* null_anyval = llvm::ConstantStruct::get(
+ llvm::Constant* null_anyval = llvm::ConstantStruct::get(
anyval_struct_type, llvm::ConstantInt::get(is_null_type, 1));
llvm::Type* type2 = struct_type->getElementType(1);
llvm::Type* type3 = struct_type->getElementType(2);
return llvm::ConstantStruct::get(struct_type, null_anyval,
- llvm::Constant::getNullValue(type2), llvm::Constant::getNullValue(type3), NULL);
+ llvm::Constant::getNullValue(type2), llvm::Constant::getNullValue(type3));
}
// Return the struct { 1, 0 } (the 'is_null' byte, i.e. the first value's first byte,
// is set to 1, the other bytes don't matter)
@@ -819,7 +819,7 @@ llvm::Value* CodegenAnyVal::GetNullVal(LlvmCodeGen* codegen, llvm::Type* val_typ
DCHECK(type1->isIntegerTy()) << LlvmCodeGen::Print(type1);
llvm::Type* type2 = struct_type->getElementType(1);
return llvm::ConstantStruct::get(struct_type, llvm::ConstantInt::get(type1, 1),
- llvm::Constant::getNullValue(type2), NULL);
+ llvm::Constant::getNullValue(type2));
}
// Return the int 1 ('is_null' byte is 1, other bytes don't matter)
DCHECK(val_type->isIntegerTy());
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/codegen/instruction-counter-test.cc
----------------------------------------------------------------------
diff --git a/be/src/codegen/instruction-counter-test.cc b/be/src/codegen/instruction-counter-test.cc
index d719cf3..f404243 100644
--- a/be/src/codegen/instruction-counter-test.cc
+++ b/be/src/codegen/instruction-counter-test.cc
@@ -50,7 +50,7 @@ llvm::Module* CodegenMulAdd(llvm::LLVMContext* context) {
llvm::Module* mod = new llvm::Module("test", *context);
llvm::Constant* c = mod->getOrInsertFunction("mul_add",
llvm::IntegerType::get(*context, 32), llvm::IntegerType::get(*context, 32),
- llvm::IntegerType::get(*context, 32), llvm::IntegerType::get(*context, 32), NULL);
+ llvm::IntegerType::get(*context, 32), llvm::IntegerType::get(*context, 32));
llvm::Function* mul_add = llvm::cast<llvm::Function>(c);
mul_add->setCallingConv(llvm::CallingConv::C);
llvm::Function::arg_iterator args = mul_add->arg_begin();
@@ -116,7 +116,7 @@ llvm::Module* CodegenGcd(llvm::LLVMContext* context) {
llvm::Module* mod = new llvm::Module("gcd", *context);
llvm::Constant* c = mod->getOrInsertFunction("gcd",
llvm::IntegerType::get(*context, 32), llvm::IntegerType::get(*context, 32),
- llvm::IntegerType::get(*context, 32), NULL);
+ llvm::IntegerType::get(*context, 32));
llvm::Function* gcd = llvm::cast<llvm::Function>(c);
llvm::Function::arg_iterator args = gcd->arg_begin();
llvm::Value* x = &*args;
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/codegen/llvm-codegen.cc
----------------------------------------------------------------------
diff --git a/be/src/codegen/llvm-codegen.cc b/be/src/codegen/llvm-codegen.cc
index b3a1c50..5ac19ad 100644
--- a/be/src/codegen/llvm-codegen.cc
+++ b/be/src/codegen/llvm-codegen.cc
@@ -30,7 +30,7 @@
#include <llvm/Analysis/InstructionSimplify.h>
#include <llvm/Analysis/Passes.h>
#include <llvm/Analysis/TargetTransformInfo.h>
-#include <llvm/Bitcode/ReaderWriter.h>
+#include <llvm/Bitcode/BitcodeReader.h>
#include <llvm/ExecutionEngine/ExecutionEngine.h>
#include <llvm/ExecutionEngine/MCJIT.h>
#include <llvm/IR/Constants.h>
@@ -124,7 +124,7 @@ string LlvmCodeGen::target_features_attr_;
CodegenCallGraph LlvmCodeGen::shared_call_graph_;
[[noreturn]] static void LlvmCodegenHandleError(
- void* user_data, const std::string& reason, bool gen_crash_diag) {
+ void* user_data, const string& reason, bool gen_crash_diag) {
LOG(FATAL) << "LLVM hit fatal error: " << reason.c_str();
}
@@ -217,7 +217,7 @@ Status LlvmCodeGen::CreateFromFile(RuntimeState* state, ObjectPool* pool,
unique_ptr<llvm::Module> loaded_module;
Status status = (*codegen)->LoadModuleFromFile(file, &loaded_module);
if (!status.ok()) goto error;
- status = (*codegen)->Init(std::move(loaded_module));
+ status = (*codegen)->Init(move(loaded_module));
if (!status.ok()) goto error;
return Status::OK();
error:
@@ -247,10 +247,10 @@ Status LlvmCodeGen::CreateFromMemory(RuntimeState* state, ObjectPool* pool,
unique_ptr<llvm::MemoryBuffer> module_ir_buf(
llvm::MemoryBuffer::getMemBuffer(module_ir, "", false));
unique_ptr<llvm::Module> loaded_module;
- Status status = (*codegen)->LoadModuleFromMemory(std::move(module_ir_buf),
+ Status status = (*codegen)->LoadModuleFromMemory(move(module_ir_buf),
module_name, &loaded_module);
if (!status.ok()) goto error;
- status = (*codegen)->Init(std::move(loaded_module));
+ status = (*codegen)->Init(move(loaded_module));
if (!status.ok()) goto error;
return Status::OK();
error:
@@ -272,11 +272,11 @@ Status LlvmCodeGen::LoadModuleFromFile(
<< tmp_file_buffer.getError().message();
return Status(ss.str());
}
- file_buffer = std::move(tmp_file_buffer.get());
+ file_buffer = move(tmp_file_buffer.get());
}
COUNTER_ADD(module_bitcode_size_, file_buffer->getBufferSize());
- return LoadModuleFromMemory(std::move(file_buffer), file, module);
+ return LoadModuleFromMemory(move(file_buffer), file, module);
}
Status LlvmCodeGen::LoadModuleFromMemory(unique_ptr<llvm::MemoryBuffer> module_ir_buf,
@@ -284,14 +284,16 @@ Status LlvmCodeGen::LoadModuleFromMemory(unique_ptr<llvm::MemoryBuffer> module_i
DCHECK(!module_name.empty());
SCOPED_TIMER(prepare_module_timer_);
COUNTER_ADD(module_bitcode_size_, module_ir_buf->getMemBufferRef().getBufferSize());
- llvm::ErrorOr<unique_ptr<llvm::Module>> tmp_module =
- getLazyBitcodeModule(std::move(module_ir_buf), context(), false);
- if (!tmp_module) {
- string diagnostic_err = diagnostic_handler_.GetErrorString();
- return Status(diagnostic_err);
+ llvm::Expected<unique_ptr<llvm::Module>> tmp_module =
+ getOwningLazyBitcodeModule(move(module_ir_buf), context());
+ if (llvm::Error err = tmp_module.takeError()) {
+ string err_string;
+ llvm::handleAllErrors(
+ move(err), [&](llvm::ErrorInfoBase& eib) { err_string = eib.message(); });
+ return Status(err_string);
}
- *module = std::move(tmp_module.get());
+ *module = move(tmp_module.get());
// We never run global constructors or destructors so let's strip them out for all
// modules when we load them.
@@ -324,7 +326,7 @@ Status LlvmCodeGen::LinkModuleFromLocalFs(const string& file) {
}
}
- bool error = llvm::Linker::linkModules(*module_, std::move(new_module));
+ bool error = llvm::Linker::linkModules(*module_, move(new_module));
string diagnostic_err = diagnostic_handler_.GetErrorString();
if (error) {
stringstream ss;
@@ -399,7 +401,7 @@ Status LlvmCodeGen::Init(unique_ptr<llvm::Module> module) {
opt_level = llvm::CodeGenOpt::None;
#endif
module_ = module.get();
- llvm::EngineBuilder builder(std::move(module));
+ llvm::EngineBuilder builder(move(module));
builder.setEngineKind(llvm::EngineKind::JIT);
builder.setOptLevel(opt_level);
unique_ptr<ImpalaMCJITMemoryManager> memory_manager(new ImpalaMCJITMemoryManager);
@@ -622,10 +624,13 @@ Status LlvmCodeGen::MaterializeFunctionHelper(llvm::Function* fn) {
DCHECK(!is_compiled_);
if (fn->isIntrinsic() || !fn->isMaterializable()) return Status::OK();
- std::error_code err = module_->materialize(fn);
+ llvm::Error err = module_->materialize(fn);
if (UNLIKELY(err)) {
+ string err_string;
+ llvm::handleAllErrors(
+ move(err), [&](llvm::ErrorInfoBase& eib) { err_string = eib.message(); });
return Status(Substitute("Failed to materialize $0: $1",
- fn->getName().str(), err.message()));
+ fn->getName().str(), err_string));
}
// Materialized functions are marked as not materializable by LLVM.
@@ -723,8 +728,8 @@ bool LlvmCodeGen::VerifyFunction(llvm::Function* fn) {
if (is_corrupt_) {
string fn_name = fn->getName(); // llvm has some fancy operator overloading
- LOG(ERROR) << "Function corrupt: " << fn_name;
- fn->dump();
+ LOG(ERROR) << "Function corrupt: " << fn_name <<"\nFunction Dump: "
+ << LlvmCodeGen::Print(fn);
return false;
}
return true;
@@ -783,8 +788,8 @@ llvm::Function* LlvmCodeGen::FnPrototype::GeneratePrototype(
return fn;
}
-Status LlvmCodeGen::LoadFunction(const TFunction& fn, const std::string& symbol,
- const ColumnType* return_type, const std::vector<ColumnType>& arg_types,
+Status LlvmCodeGen::LoadFunction(const TFunction& fn, const string& symbol,
+ const ColumnType* return_type, const vector<ColumnType>& arg_types,
int num_fixed_args, bool has_varargs, llvm::Function** llvm_fn,
LibCacheEntry** cache_entry) {
DCHECK_GE(arg_types.size(), num_fixed_args);
@@ -1011,15 +1016,21 @@ llvm::Function* LlvmCodeGen::FinalizeFunction(llvm::Function* function) {
return NULL;
}
finalized_functions_.insert(function);
- if (FLAGS_dump_ir) function->dump();
+ if (FLAGS_dump_ir) {
+ string fn_name = function->getName();
+ LOG(INFO) << "Dump of Function "<< fn_name << ": " << LlvmCodeGen::Print(function);
+ }
return function;
}
Status LlvmCodeGen::MaterializeModule() {
- std::error_code err = module_->materializeAll();
+ llvm::Error err = module_->materializeAll();
if (UNLIKELY(err)) {
+ string err_string;
+ llvm::handleAllErrors(
+ move(err), [&](llvm::ErrorInfoBase& eib) { err_string = eib.message(); });
return Status(Substitute("Failed to materialize module $0: $1",
- module_->getName().str(), err.message()));
+ module_->getName().str(), err_string));
}
return Status::OK();
}
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/exprs/aggregate-functions-ir.cc
----------------------------------------------------------------------
diff --git a/be/src/exprs/aggregate-functions-ir.cc b/be/src/exprs/aggregate-functions-ir.cc
index 9af563e..3bf2867 100644
--- a/be/src/exprs/aggregate-functions-ir.cc
+++ b/be/src/exprs/aggregate-functions-ir.cc
@@ -2060,8 +2060,6 @@ template void AggregateFunctions::UpdateVal<FloatVal>(
FunctionContext*, const FloatVal& src, FloatVal* dst);
template void AggregateFunctions::UpdateVal<DoubleVal>(
FunctionContext*, const DoubleVal& src, DoubleVal* dst);
-template void AggregateFunctions::UpdateVal<StringVal>(
- FunctionContext*, const StringVal& src, StringVal* dst);
template void AggregateFunctions::UpdateVal<TimestampVal>(
FunctionContext*, const TimestampVal& src, TimestampVal* dst);
template void AggregateFunctions::UpdateVal<DecimalVal>(
@@ -2112,14 +2110,6 @@ template void AggregateFunctions::Min<IntVal>(
FunctionContext*, const IntVal& src, IntVal* dst);
template void AggregateFunctions::Min<BigIntVal>(
FunctionContext*, const BigIntVal& src, BigIntVal* dst);
-template void AggregateFunctions::Min<FloatVal>(
- FunctionContext*, const FloatVal& src, FloatVal* dst);
-template void AggregateFunctions::Min<DoubleVal>(
- FunctionContext*, const DoubleVal& src, DoubleVal* dst);
-template void AggregateFunctions::Min<StringVal>(
- FunctionContext*, const StringVal& src, StringVal* dst);
-template void AggregateFunctions::Min<DecimalVal>(
- FunctionContext*, const DecimalVal& src, DecimalVal* dst);
template void AggregateFunctions::Max<BooleanVal>(
FunctionContext*, const BooleanVal& src, BooleanVal* dst);
@@ -2131,14 +2121,6 @@ template void AggregateFunctions::Max<IntVal>(
FunctionContext*, const IntVal& src, IntVal* dst);
template void AggregateFunctions::Max<BigIntVal>(
FunctionContext*, const BigIntVal& src, BigIntVal* dst);
-template void AggregateFunctions::Max<FloatVal>(
- FunctionContext*, const FloatVal& src, FloatVal* dst);
-template void AggregateFunctions::Max<DoubleVal>(
- FunctionContext*, const DoubleVal& src, DoubleVal* dst);
-template void AggregateFunctions::Max<StringVal>(
- FunctionContext*, const StringVal& src, StringVal* dst);
-template void AggregateFunctions::Max<DecimalVal>(
- FunctionContext*, const DecimalVal& src, DecimalVal* dst);
template void AggregateFunctions::PcUpdate(
FunctionContext*, const BooleanVal&, StringVal*);
@@ -2347,8 +2329,6 @@ template void AggregateFunctions::HllUpdate(
FunctionContext*, const StringVal&, StringVal*);
template void AggregateFunctions::HllUpdate(
FunctionContext*, const TimestampVal&, StringVal*);
-template void AggregateFunctions::HllUpdate(
- FunctionContext*, const DecimalVal&, StringVal*);
template void AggregateFunctions::SampledNdvUpdate(
FunctionContext*, const BooleanVal&, const DoubleVal&, StringVal*);
@@ -2398,8 +2378,6 @@ template void AggregateFunctions::LastValRemove<FloatVal>(
FunctionContext*, const FloatVal& src, FloatVal* dst);
template void AggregateFunctions::LastValRemove<DoubleVal>(
FunctionContext*, const DoubleVal& src, DoubleVal* dst);
-template void AggregateFunctions::LastValRemove<StringVal>(
- FunctionContext*, const StringVal& src, StringVal* dst);
template void AggregateFunctions::LastValRemove<TimestampVal>(
FunctionContext*, const TimestampVal& src, TimestampVal* dst);
template void AggregateFunctions::LastValRemove<DecimalVal>(
@@ -2482,8 +2460,6 @@ template FloatVal AggregateFunctions::LastValIgnoreNullsGetValue<FloatVal>(
FunctionContext*, const StringVal&);
template DoubleVal AggregateFunctions::LastValIgnoreNullsGetValue<DoubleVal>(
FunctionContext*, const StringVal&);
-template StringVal AggregateFunctions::LastValIgnoreNullsGetValue<StringVal>(
- FunctionContext*, const StringVal&);
template TimestampVal AggregateFunctions::LastValIgnoreNullsGetValue<TimestampVal>(
FunctionContext*, const StringVal&);
template DecimalVal AggregateFunctions::LastValIgnoreNullsGetValue<DecimalVal>(
@@ -2503,8 +2479,6 @@ template FloatVal AggregateFunctions::LastValIgnoreNullsFinalize<FloatVal>(
FunctionContext*, const StringVal&);
template DoubleVal AggregateFunctions::LastValIgnoreNullsFinalize<DoubleVal>(
FunctionContext*, const StringVal&);
-template StringVal AggregateFunctions::LastValIgnoreNullsFinalize<StringVal>(
- FunctionContext*, const StringVal&);
template TimestampVal AggregateFunctions::LastValIgnoreNullsFinalize<TimestampVal>(
FunctionContext*, const StringVal&);
template DecimalVal AggregateFunctions::LastValIgnoreNullsFinalize<DecimalVal>(
@@ -2524,8 +2498,6 @@ template void AggregateFunctions::FirstValUpdate<FloatVal>(
FunctionContext*, const FloatVal& src, FloatVal* dst);
template void AggregateFunctions::FirstValUpdate<DoubleVal>(
FunctionContext*, const DoubleVal& src, DoubleVal* dst);
-template void AggregateFunctions::FirstValUpdate<StringVal>(
- FunctionContext*, const StringVal& src, StringVal* dst);
template void AggregateFunctions::FirstValUpdate<TimestampVal>(
FunctionContext*, const TimestampVal& src, TimestampVal* dst);
template void AggregateFunctions::FirstValUpdate<DecimalVal>(
@@ -2566,8 +2538,6 @@ template void AggregateFunctions::FirstValIgnoreNullsUpdate<FloatVal>(
FunctionContext*, const FloatVal& src, FloatVal* dst);
template void AggregateFunctions::FirstValIgnoreNullsUpdate<DoubleVal>(
FunctionContext*, const DoubleVal& src, DoubleVal* dst);
-template void AggregateFunctions::FirstValIgnoreNullsUpdate<StringVal>(
- FunctionContext*, const StringVal& src, StringVal* dst);
template void AggregateFunctions::FirstValIgnoreNullsUpdate<TimestampVal>(
FunctionContext*, const TimestampVal& src, TimestampVal* dst);
template void AggregateFunctions::FirstValIgnoreNullsUpdate<DecimalVal>(
@@ -2587,8 +2557,6 @@ template void AggregateFunctions::OffsetFnInit<FloatVal>(
FunctionContext*, FloatVal*);
template void AggregateFunctions::OffsetFnInit<DoubleVal>(
FunctionContext*, DoubleVal*);
-template void AggregateFunctions::OffsetFnInit<StringVal>(
- FunctionContext*, StringVal*);
template void AggregateFunctions::OffsetFnInit<TimestampVal>(
FunctionContext*, TimestampVal*);
template void AggregateFunctions::OffsetFnInit<DecimalVal>(
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/rpc/impala-service-pool.h
----------------------------------------------------------------------
diff --git a/be/src/rpc/impala-service-pool.h b/be/src/rpc/impala-service-pool.h
index 9d34366..910ac53 100644
--- a/be/src/rpc/impala-service-pool.h
+++ b/be/src/rpc/impala-service-pool.h
@@ -52,10 +52,10 @@ class ImpalaServicePool : public kudu::rpc::RpcService {
virtual ~ImpalaServicePool();
/// Start up the thread pool.
- virtual Status Init(int num_threads);
+ Status Init(int num_threads);
/// Shut down the queue and the thread pool.
- virtual void Shutdown();
+ void Shutdown();
virtual kudu::rpc::RpcMethodInfo* LookupMethod(const kudu::rpc::RemoteMethod& method)
override;
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/bufferpool/buffer-pool-test.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/bufferpool/buffer-pool-test.cc b/be/src/runtime/bufferpool/buffer-pool-test.cc
index d6547d2..5337bb4 100644
--- a/be/src/runtime/bufferpool/buffer-pool-test.cc
+++ b/be/src/runtime/bufferpool/buffer-pool-test.cc
@@ -1960,7 +1960,7 @@ void BufferPoolTest::TestRandomInternalMulti(
}
AtomicInt32 stop_maintenance(0);
- thread* maintenance_thread = new thread([this, &pool, &stop_maintenance]() {
+ thread* maintenance_thread = new thread([&pool, &stop_maintenance]() {
while (stop_maintenance.Load() == 0) {
pool.Maintenance();
SleepForMs(50);
@@ -2171,7 +2171,7 @@ TEST_F(BufferPoolTest, ConcurrentBufferOperations) {
// Allocate threads allocate buffers whenever able and enqueue them.
for (int i = 0; i < ALLOCATE_THREADS; ++i) {
allocate_threads.add_thread(new thread([&] {
- for (int i = 0; i < NUM_ALLOCATIONS_PER_THREAD; ++i) {
+ for (int j = 0; j < NUM_ALLOCATIONS_PER_THREAD; ++j) {
// Try to deduct reservation.
while (true) {
int64_t val = available_reservation.Load();
@@ -2182,7 +2182,7 @@ TEST_F(BufferPoolTest, ConcurrentBufferOperations) {
}
BufferHandle buffer;
ASSERT_OK(pool.AllocateBuffer(&client, TEST_BUFFER_LEN, &buffer));
- uint8_t first_byte = static_cast<uint8_t>(i % 256);
+ uint8_t first_byte = static_cast<uint8_t>(j % 256);
buffer.data()[0] = first_byte;
delete_queue.BlockingPut(pair<uint8_t, BufferHandle>(first_byte, move(buffer)));
}
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/data-stream-sender.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/data-stream-sender.cc b/be/src/runtime/data-stream-sender.cc
index a744929..f68788e 100644
--- a/be/src/runtime/data-stream-sender.cc
+++ b/be/src/runtime/data-stream-sender.cc
@@ -337,7 +337,6 @@ DataStreamSender::DataStreamSender(int sender_id, const RowDescriptor* row_desc,
partition_type_(sink.output_partition.type),
current_channel_idx_(0),
flushed_(false),
- closed_(false),
current_thrift_batch_(&thrift_batch1_),
serialize_batch_timer_(NULL),
thrift_transmit_timer_(NULL),
@@ -534,7 +533,6 @@ void DataStreamSender::Close(RuntimeState* state) {
ScalarExprEvaluator::Close(partition_expr_evals_, state);
ScalarExpr::Close(partition_exprs_);
DataSink::Close(state);
- closed_ = true;
}
Status DataStreamSender::SerializeBatch(
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/data-stream-sender.h
----------------------------------------------------------------------
diff --git a/be/src/runtime/data-stream-sender.h b/be/src/runtime/data-stream-sender.h
index 992e9c9..37b9417 100644
--- a/be/src/runtime/data-stream-sender.h
+++ b/be/src/runtime/data-stream-sender.h
@@ -116,9 +116,6 @@ class DataStreamSender : public DataSink {
/// Not valid to call Send() anymore.
bool flushed_;
- /// If true, this sender has been closed. Not valid to call Send() anymore.
- bool closed_;
-
/// serialized batches for broadcasting; we need two so we can write
/// one while the other one is still being sent
TRowBatch thrift_batch1_;
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/krpc-data-stream-sender.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/krpc-data-stream-sender.cc b/be/src/runtime/krpc-data-stream-sender.cc
index e6ff0a2..bc6a07d 100644
--- a/be/src/runtime/krpc-data-stream-sender.cc
+++ b/be/src/runtime/krpc-data-stream-sender.cc
@@ -756,7 +756,6 @@ void KrpcDataStreamSender::Close(RuntimeState* state) {
ScalarExprEvaluator::Close(partition_expr_evals_, state);
ScalarExpr::Close(partition_exprs_);
DataSink::Close(state);
- closed_ = true;
}
Status KrpcDataStreamSender::SerializeBatch(
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/krpc-data-stream-sender.h
----------------------------------------------------------------------
diff --git a/be/src/runtime/krpc-data-stream-sender.h b/be/src/runtime/krpc-data-stream-sender.h
index 0c3a32e..bc18574 100644
--- a/be/src/runtime/krpc-data-stream-sender.h
+++ b/be/src/runtime/krpc-data-stream-sender.h
@@ -140,9 +140,6 @@ class KrpcDataStreamSender : public DataSink {
/// Not valid to call Send() anymore.
bool flushed_ = false;
- /// If true, this sender has been closed. Not valid to call Send() anymore.
- bool closed_ = false;
-
/// List of all channels. One for each destination.
std::vector<Channel*> channels_;
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/row-batch-serialize-test.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/row-batch-serialize-test.cc b/be/src/runtime/row-batch-serialize-test.cc
index b6a0009..e765025 100644
--- a/be/src/runtime/row-batch-serialize-test.cc
+++ b/be/src/runtime/row-batch-serialize-test.cc
@@ -716,7 +716,8 @@ TEST_F(RowBatchSerializeTest, DedupPathologicalFull) {
cv.ptr = pool->Allocate(array_item_desc->byte_size());
memset(cv.ptr, 0, array_item_desc->byte_size());
cv.num_tuples = 1;
- StringValue huge_string_value((char*)huge_string.data(), huge_string_size);
+ StringValue huge_string_value(
+ const_cast<char*>(huge_string.data()), huge_string_size);
RawValue::Write(&huge_string_value, reinterpret_cast<Tuple*>(cv.ptr),
string_slot_desc, NULL);
RawValue::Write(&cv, tuple, array_slot_desc, NULL);
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/row-batch.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/row-batch.cc b/be/src/runtime/row-batch.cc
index 87c0f2c..3581bd9 100644
--- a/be/src/runtime/row-batch.cc
+++ b/be/src/runtime/row-batch.cc
@@ -309,8 +309,10 @@ Status RowBatch::Serialize(bool full_dedup, vector<int32_t>* tuple_offsets,
if (compression_scratch_.size() < compressed_size) {
compression_scratch_.resize(compressed_size);
}
- uint8_t* input = (uint8_t*)tuple_data->c_str();
- uint8_t* compressed_output = (uint8_t*)compression_scratch_.c_str();
+ uint8_t* input =
+ const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(tuple_data->c_str()));
+ uint8_t* compressed_output = const_cast<uint8_t*>(
+ reinterpret_cast<const uint8_t*>(compression_scratch_.c_str()));
RETURN_IF_ERROR(
compressor.ProcessBlock(true, size, input, &compressed_size, &compressed_output));
if (LIKELY(compressed_size < size)) {
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/row-batch.h
----------------------------------------------------------------------
diff --git a/be/src/runtime/row-batch.h b/be/src/runtime/row-batch.h
index 1b3778e..270318a 100644
--- a/be/src/runtime/row-batch.h
+++ b/be/src/runtime/row-batch.h
@@ -56,14 +56,17 @@ class OutboundRowBatch {
/// Returns the serialized tuple offsets' vector as a kudu::Slice.
/// The tuple offsets vector is sent as KRPC sidecar.
kudu::Slice TupleOffsetsAsSlice() const {
- return kudu::Slice((uint8_t*)tuple_offsets_.data(),
+ return kudu::Slice(
+ const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(tuple_offsets_.data())),
tuple_offsets_.size() * sizeof(tuple_offsets_[0]));
}
/// Returns the serialized tuple data's buffer as a kudu::Slice.
/// The tuple data is sent as KRPC sidecar.
kudu::Slice TupleDataAsSlice() const {
- return kudu::Slice((uint8_t*)tuple_data_.data(), tuple_data_.length());
+ return kudu::Slice(
+ const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(tuple_data_.data())),
+ tuple_data_.length());
}
/// Returns true if the header has been intialized and ready to be sent.
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/runtime/types.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/types.cc b/be/src/runtime/types.cc
index c18c66e..ab8b8ec 100644
--- a/be/src/runtime/types.cc
+++ b/be/src/runtime/types.cc
@@ -366,7 +366,7 @@ llvm::ConstantStruct* ColumnType::ToIR(LlvmCodeGen* codegen) const {
return llvm::cast<llvm::ConstantStruct>(
llvm::ConstantStruct::get(column_type_type, type_field, len_field, precision_field,
- scale_field, children_field, field_names_field, NULL));
+ scale_field, children_field, field_names_field));
}
}
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/service/fe-support.cc
----------------------------------------------------------------------
diff --git a/be/src/service/fe-support.cc b/be/src/service/fe-support.cc
index abb4acf..a8906a0 100644
--- a/be/src/service/fe-support.cc
+++ b/be/src/service/fe-support.cc
@@ -559,48 +559,52 @@ namespace impala {
static JNINativeMethod native_methods[] = {
{
- (char*)"NativeFeTestInit", (char*)"()V",
+ const_cast<char*>("NativeFeTestInit"), const_cast<char*>("()V"),
(void*)::Java_org_apache_impala_service_FeSupport_NativeFeTestInit
},
{
- (char*)"NativeEvalExprsWithoutRow", (char*)"([B[B)[B",
+ const_cast<char*>("NativeEvalExprsWithoutRow"), const_cast<char*>("([B[B)[B"),
(void*)::Java_org_apache_impala_service_FeSupport_NativeEvalExprsWithoutRow
},
{
- (char*)"NativeCacheJar", (char*)"([B)[B",
+ const_cast<char*>("NativeCacheJar"), const_cast<char*>("([B)[B"),
(void*)::Java_org_apache_impala_service_FeSupport_NativeCacheJar
},
{
- (char*)"NativeLookupSymbol", (char*)"([B)[B",
+ const_cast<char*>("NativeLookupSymbol"), const_cast<char*>("([B)[B"),
(void*)::Java_org_apache_impala_service_FeSupport_NativeLookupSymbol
},
{
- (char*)"NativePrioritizeLoad", (char*)"([B)[B",
+ const_cast<char*>("NativePrioritizeLoad"), const_cast<char*>("([B)[B"),
(void*)::Java_org_apache_impala_service_FeSupport_NativePrioritizeLoad
},
{
- (char*)"NativeParseQueryOptions", (char*)"(Ljava/lang/String;[B)[B",
+ const_cast<char*>("NativeParseQueryOptions"),
+ const_cast<char*>("(Ljava/lang/String;[B)[B"),
(void*)::Java_org_apache_impala_service_FeSupport_NativeParseQueryOptions
},
{
- (char*)"NativeAddPendingTopicItem", (char*)"(JLjava/lang/String;J[BZ)Z",
+ const_cast<char*>("NativeAddPendingTopicItem"),
+ const_cast<char*>("(JLjava/lang/String;J[BZ)Z"),
(void*)::Java_org_apache_impala_service_FeSupport_NativeAddPendingTopicItem
},
{
- (char*)"NativeGetNextCatalogObjectUpdate",
- (char*)"(J)Lorg/apache/impala/common/Pair;",
+ const_cast<char*>("NativeGetNextCatalogObjectUpdate"),
+ const_cast<char*>("(J)Lorg/apache/impala/common/Pair;"),
(void*)::Java_org_apache_impala_service_FeSupport_NativeGetNextCatalogObjectUpdate
},
{
- (char*)"NativeLibCacheSetNeedsRefresh", (char*)"(Ljava/lang/String;)Z",
+ const_cast<char*>("NativeLibCacheSetNeedsRefresh"),
+ const_cast<char*>("(Ljava/lang/String;)Z"),
(void*)::Java_org_apache_impala_service_FeSupport_NativeLibCacheSetNeedsRefresh
},
{
- (char*)"NativeLibCacheRemoveEntry", (char*)"(Ljava/lang/String;)Z",
+ const_cast<char*>("NativeLibCacheRemoveEntry"),
+ const_cast<char*>("(Ljava/lang/String;)Z"),
(void*)::Java_org_apache_impala_service_FeSupport_NativeLibCacheRemoveEntry
},
{
- (char*)"MinLogSpaceForBloomFilter", (char*)"(JD)I",
+ const_cast<char*>("MinLogSpaceForBloomFilter"), const_cast<char*>("(JD)I"),
(void*)::Java_org_apache_impala_service_FeSupport_MinLogSpaceForBloomFilter
},
};
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/thirdparty/squeasel/squeasel.c
----------------------------------------------------------------------
diff --git a/be/src/thirdparty/squeasel/squeasel.c b/be/src/thirdparty/squeasel/squeasel.c
index d461b24..2149497 100644
--- a/be/src/thirdparty/squeasel/squeasel.c
+++ b/be/src/thirdparty/squeasel/squeasel.c
@@ -1057,6 +1057,7 @@ static int alloc_vprintf2(char **buf, const char *fmt, va_list ap) {
if (!*buf) break;
va_copy(ap_copy, ap);
len = vsnprintf(*buf, size, fmt, ap_copy);
+ va_end(ap_copy);
}
return len;
@@ -1076,12 +1077,14 @@ static int alloc_vprintf(char **buf, size_t size, const char *fmt, va_list ap) {
// On second pass, actually print the message.
va_copy(ap_copy, ap);
len = vsnprintf(NULL, 0, fmt, ap_copy);
+ va_end(ap_copy);
if (len < 0) {
// C runtime is not standard compliant, vsnprintf() returned -1.
// Switch to alternative code path that uses incremental allocations.
va_copy(ap_copy, ap);
len = alloc_vprintf2(buf, fmt, ap);
+ va_end(ap_copy);
} else if (len > (int) size &&
(size = len + 1) > 0 &&
(*buf = (char *) malloc(size)) == NULL) {
@@ -1089,6 +1092,7 @@ static int alloc_vprintf(char **buf, size_t size, const char *fmt, va_list ap) {
} else {
va_copy(ap_copy, ap);
vsnprintf(*buf, size, fmt, ap_copy);
+ va_end(ap_copy);
}
return len;
@@ -1111,7 +1115,9 @@ int sq_vprintf(struct sq_connection *conn, const char *fmt, va_list ap) {
int sq_printf(struct sq_connection *conn, const char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
- return sq_vprintf(conn, fmt, ap);
+ int ret_val = sq_vprintf(conn, fmt, ap);
+ va_end(ap);
+ return ret_val;
}
int sq_url_decode(const char *src, int src_len, char *dst,
@@ -4476,6 +4482,7 @@ struct sq_connection *sq_download(const char *host, int port, int use_ssl,
sq_close_connection(conn);
conn = NULL;
}
+ va_end(ap);
return conn;
}
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/transport/TSasl.cpp
----------------------------------------------------------------------
diff --git a/be/src/transport/TSasl.cpp b/be/src/transport/TSasl.cpp
index 7b4d94d..a1e4a39 100644
--- a/be/src/transport/TSasl.cpp
+++ b/be/src/transport/TSasl.cpp
@@ -54,8 +54,8 @@ uint8_t* TSasl::unwrap(const uint8_t* incoming,
uint8_t* output;
int result;
- result = sasl_decode(conn,
- (const char*)incoming, len, (const char**)&output, &outputlen);
+ result = sasl_decode(conn, reinterpret_cast<const char*>(incoming), len,
+ const_cast<const char**>(reinterpret_cast<char**>(&output)), &outputlen);
if (result != SASL_OK) {
throw SaslException(sasl_errdetail(conn));
}
@@ -69,8 +69,8 @@ uint8_t* TSasl::wrap(const uint8_t* outgoing,
uint8_t* output;
int result;
- result = sasl_encode(conn, (const char*)outgoing+offset,
- len, (const char**)&output, &outputlen);
+ result = sasl_encode(conn, reinterpret_cast<const char*>(outgoing) + offset, len,
+ const_cast<const char**>(reinterpret_cast<char**>(&output)), &outputlen);
if (result != SASL_OK) {
throw SaslException(sasl_errdetail(conn));
}
@@ -158,9 +158,10 @@ uint8_t* TSaslClient::evaluateChallengeOrResponse(
result=sasl_client_start(conn,
mechList.c_str(),
&client_interact, /* filled in if an interaction is needed */
- (const char**)&out, /* filled in on success */
+ const_cast<const char**>(
+ reinterpret_cast<char**>(&out)), /* filled in on success */
&outlen, /* filled in on success */
- (const char**)&mechUsing);
+ const_cast<const char**>(&mechUsing));
clientStarted = true;
if (result == SASL_OK || result == SASL_CONTINUE) {
chosenMech = mechUsing;
@@ -168,10 +169,11 @@ uint8_t* TSaslClient::evaluateChallengeOrResponse(
} else {
if (len > 0) {
result=sasl_client_step(conn, /* our context */
- (const char*)challenge, /* the data from the server */
+ reinterpret_cast<const char*>(challenge), /* the data from the server */
len, /* its length */
&client_interact, /* this should be unallocated and NULL */
- (const char**)&out, /* filled in on success */
+ const_cast<const char**>(
+ reinterpret_cast<char**>(&out)), /* filled in on success */
&outlen); /* filled in on success */
} else {
result = SASL_CONTINUE;
@@ -237,11 +239,11 @@ uint8_t* TSaslServer::evaluateChallengeOrResponse(const uint8_t* response,
uint32_t result;
if (!serverStarted) {
- result = sasl_server_start(conn,
- (const char *)response, NULL, 0, (const char **)&out, &outlen);
+ result = sasl_server_start(conn, reinterpret_cast<const char*>(response), NULL, 0,
+ const_cast<const char**>(reinterpret_cast<char**>(&out)), &outlen);
} else {
- result = sasl_server_step(conn,
- (const char*)response, len, (const char**)&out, &outlen);
+ result = sasl_server_step(conn, reinterpret_cast<const char*>(response), len,
+ const_cast<const char**>(reinterpret_cast<char**>(&out)), &outlen);
}
if (result == SASL_OK) {
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/transport/TSaslClientTransport.cpp
----------------------------------------------------------------------
diff --git a/be/src/transport/TSaslClientTransport.cpp b/be/src/transport/TSaslClientTransport.cpp
index 279a966..5d20e63 100644
--- a/be/src/transport/TSaslClientTransport.cpp
+++ b/be/src/transport/TSaslClientTransport.cpp
@@ -65,8 +65,8 @@ void TSaslClientTransport::handleSaslStartMessage() {
}
/* These two calls comprise a single message in the thrift-sasl protocol. */
- sendSaslMessage(TSASL_START,
- (uint8_t*)sasl_->getMechanismName().c_str(),
+ sendSaslMessage(TSASL_START, const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(
+ sasl_->getMechanismName().c_str())),
sasl_->getMechanismName().length(), false);
sendSaslMessage(TSASL_OK, initialResponse, resLength);
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/transport/TSaslTransport.cpp
----------------------------------------------------------------------
diff --git a/be/src/transport/TSaslTransport.cpp b/be/src/transport/TSaslTransport.cpp
index 55e57c8..20eaef7 100644
--- a/be/src/transport/TSaslTransport.cpp
+++ b/be/src/transport/TSaslTransport.cpp
@@ -225,7 +225,7 @@ namespace apache { namespace thrift { namespace transport {
const uint8_t* newBuf;
if (shouldWrap_) {
- newBuf = sasl_->wrap((uint8_t*)buf, 0, len, &len);
+ newBuf = sasl_->wrap(const_cast<uint8_t*>(buf), 0, len, &len);
} else {
newBuf = buf;
}
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/udf/udf-test.cc
----------------------------------------------------------------------
diff --git a/be/src/udf/udf-test.cc b/be/src/udf/udf-test.cc
index 0bce70f..d16fb08 100644
--- a/be/src/udf/udf-test.cc
+++ b/be/src/udf/udf-test.cc
@@ -136,7 +136,8 @@ IntVal ValidateMem(FunctionContext* context) {
}
StringVal TimeToString(FunctionContext* context, const TimestampVal& time) {
- ptime t(*(date*)&time.date);
+ ptime t(*const_cast<date*>(reinterpret_cast<const date*>(&time.date)));
+ // ptime t(*(date*)&time.date); is this conversion correct?
t += nanoseconds(time.time_of_day);
stringstream ss;
ss << to_iso_extended_string(t.date()) << " " << to_simple_string(t.time_of_day());
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/be/src/udf/udf.h
----------------------------------------------------------------------
diff --git a/be/src/udf/udf.h b/be/src/udf/udf.h
index 3d04115..26e1f45 100644
--- a/be/src/udf/udf.h
+++ b/be/src/udf/udf.h
@@ -599,7 +599,9 @@ struct StringVal : public AnyVal {
/// Construct a StringVal from NULL-terminated c-string. Note: this does not make a
/// copy of ptr so the underlying string must exist as long as this StringVal does.
- StringVal(const char* ptr) : len(strlen(ptr)), ptr((uint8_t*)ptr) {}
+ StringVal(const char* ptr)
+ : len(strlen(ptr)),
+ ptr(const_cast<uint8_t*>(reinterpret_cast<const uint8_t*>(ptr))) {}
/// Creates a StringVal, allocating a new buffer with 'len'. This should
/// be used to return StringVal objects in UDF/UDAs that need to allocate new
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/bin/bootstrap_toolchain.py
----------------------------------------------------------------------
diff --git a/bin/bootstrap_toolchain.py b/bin/bootstrap_toolchain.py
index 8cee665..a09c905 100755
--- a/bin/bootstrap_toolchain.py
+++ b/bin/bootstrap_toolchain.py
@@ -431,7 +431,7 @@ if __name__ == "__main__":
"flatbuffers", "gcc", "gflags", "glog", "gperftools", "gtest", "libev",
"lz4", "openldap", "openssl", "protobuf",
"rapidjson", "re2", "snappy", "thrift", "tpc-h", "tpc-ds", "zlib"])
- packages.insert(0, Package("llvm", "3.9.1-asserts"))
+ packages.insert(0, Package("llvm", "5.0.1-asserts"))
bootstrap(toolchain_root, packages)
# Download the CDH components if necessary.
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/bin/impala-config.sh
----------------------------------------------------------------------
diff --git a/bin/impala-config.sh b/bin/impala-config.sh
index e109573..7060499 100755
--- a/bin/impala-config.sh
+++ b/bin/impala-config.sh
@@ -72,7 +72,7 @@ fi
# moving to a different build of the toolchain, e.g. when a version is bumped or a
# compile option is changed. The build id can be found in the output of the toolchain
# build jobs, it is constructed from the build number and toolchain git hash prefix.
-export IMPALA_TOOLCHAIN_BUILD_ID=53-d95bb7f778
+export IMPALA_TOOLCHAIN_BUILD_ID=88-8e37339d45
# Versions of toolchain dependencies.
# -----------------------------------
export IMPALA_AVRO_VERSION=1.7.4-p4
@@ -105,14 +105,14 @@ export IMPALA_GTEST_VERSION=1.6.0
unset IMPALA_GTEST_URL
export IMPALA_LIBEV_VERSION=4.20
unset IMPALA_LIBEV_URL
-export IMPALA_LLVM_VERSION=3.9.1
+export IMPALA_LLVM_VERSION=5.0.1
unset IMPALA_LLVM_URL
-export IMPALA_LLVM_ASAN_VERSION=3.9.1
+export IMPALA_LLVM_ASAN_VERSION=5.0.1
unset IMPALA_LLVM_ASAN_URL
# Debug builds should use the release+asserts build to get additional coverage.
# Don't use the LLVM debug build because the binaries are too large to distribute.
-export IMPALA_LLVM_DEBUG_VERSION=3.9.1-asserts
+export IMPALA_LLVM_DEBUG_VERSION=5.0.1-asserts
unset IMPALA_LLVM_DEBUG_URL
export IMPALA_LZ4_VERSION=1.7.5
unset IMPALA_LZ4_URL
http://git-wip-us.apache.org/repos/asf/impala/blob/9f31390c/testdata/workloads/functional-query/queries/QueryTest/udf-errors.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/functional-query/queries/QueryTest/udf-errors.test b/testdata/workloads/functional-query/queries/QueryTest/udf-errors.test
index 81e459a..fb91070 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/udf-errors.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/udf-errors.test
@@ -24,6 +24,7 @@ create function if not exists foo (string, string) returns string location
'$FILESYSTEM_PREFIX/test-warehouse/$DATABASE_bad_udf.ll' symbol='MyAwesomeUdf';
---- CATCH
Could not load binary: $FILESYSTEM_PREFIX/test-warehouse/$DATABASE_bad_udf.ll
+Invalid bitcode signature
====
---- QUERY
# This test is run with codegen disabled. Interpretation only handles up to 20 arguments.