# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
# Blacklist of things not to run the sanitizer on.

# The safe math routines are expected to overflow, but anyone using them
# will check the resulting overflow flags.
fun:*kudu18safe_math_internal*

# Workaround for a bug in clang's libstdc++ which causes a false positive
# trying to use ostream << std::hex
# See http://llvm.org/bugs/show_bug.cgi?id=18156
fun:*_Ios_Fmtflags*

# Workaround for a problem with gmock where a runtime error is caused by a call on a null pointer,
# on a mocked object.
# Seen error:
# thirdparty/gmock-1.7.0/include/gmock/gmock-spec-builders.h:1529:12: runtime error: member call on null pointer of type 'testing::internal::ActionResultHolder<void>'
fun:*testing*internal*InvokeWith*
