# 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.

# This file suppresses UBSAN errors, following
# http://releases.llvm.org/3.8.0/tools/clang/docs/UndefinedBehaviorSanitizer.html#runtime-suppressions

# Some methods in ios_base.h (libstdc++ 4.9.2) mask two values a and b of an enum type to
# create the logical equivalent of (a and (not b)) using the expression 'a & ~b'. When ~b
# is not a valid enum member (and it usually isn't), this causes a UBSAN error. The line
# below suppresses that error.
enum:ios_base.h

# In Thrift 0.9.0 and 0.10.0 there is undefined behavior in TCompactProtocol in which
# negative values are left-shifted. See https://issues.apache.org/jira/browse/THRIFT-2026
shift-base:TCompactProtocol.tcc