r351159 - Revert alignment assumptions changes

Roman Lebedev via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 14 23:12:26 PST 2019


Thank you for the revert.

On Tue, Jan 15, 2019 at 6:41 AM Vlad Tsyrklevich via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
>
> Author: vlad.tsyrklevich
> Date: Mon Jan 14 19:38:02 2019
> New Revision: 351159
>
> URL: http://llvm.org/viewvc/llvm-project?rev=351159&view=rev
> Log:
> Revert alignment assumptions changes
>
> Revert r351104-6, r351109, r351110, r351119, r351134, and r351153. These
> changes fail on the sanitizer bots.
>
> Removed:
>     cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-lvalue.cpp
>     cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-paramvar.cpp
>     cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function-variable.cpp
>     cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function.cpp
>     cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function-two-params.cpp
>     cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function.cpp
>     cfe/trunk/test/CodeGen/catch-alignment-assumption-blacklist.c
>     cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params-variable.cpp
>     cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params.cpp
>     cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp
>     cfe/trunk/test/CodeGen/catch-alignment-assumption-openmp.cpp
> Modified:
>     cfe/trunk/docs/ReleaseNotes.rst
>     cfe/trunk/docs/UndefinedBehaviorSanitizer.rst
>     cfe/trunk/lib/CodeGen/CGBuiltin.cpp
>     cfe/trunk/lib/CodeGen/CGCall.cpp
>     cfe/trunk/lib/CodeGen/CGExprScalar.cpp
>     cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp
>     cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
>     cfe/trunk/lib/CodeGen/CodeGenFunction.h
>
> Modified: cfe/trunk/docs/ReleaseNotes.rst
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ReleaseNotes.rst?rev=351159&r1=351158&r2=351159&view=diff
> ==============================================================================
> --- cfe/trunk/docs/ReleaseNotes.rst (original)
> +++ cfe/trunk/docs/ReleaseNotes.rst Mon Jan 14 19:38:02 2019
> @@ -321,49 +321,6 @@ Undefined Behavior Sanitizer (UBSan)
>  * The Implicit Conversion Sanitizer (``-fsanitize=implicit-conversion``) has
>    learned to sanitize compound assignment operators.
>
> -* ``alignment`` check has learned to sanitize the assume_aligned-like attributes:
> -
> -  .. code-block:: c++
> -
> -      typedef char **__attribute__((align_value(1024))) aligned_char;
> -      struct ac_struct {
> -        aligned_char a;
> -      };
> -      char **load_from_ac_struct(struct ac_struct *x) {
> -        return x->a; // <- check that loaded 'a' is aligned
> -      }
> -
> -      char **passthrough(__attribute__((align_value(1024))) char **x) {
> -        return x; // <- check the pointer passed as function argument
> -      }
> -
> -      char **__attribute__((alloc_align(2)))
> -      alloc_align(int size, unsigned long alignment);
> -
> -      char **caller(int size) {
> -        return alloc_align(size, 1024); // <- check returned pointer
> -      }
> -
> -      char **__attribute__((assume_aligned(1024))) get_ptr();
> -
> -      char **caller2() {
> -        return get_ptr(); // <- check returned pointer
> -      }
> -
> -      void *caller3(char **x) {
> -        return __builtin_assume_aligned(x, 1024);  // <- check returned pointer
> -      }
> -
> -      void *caller4(char **x, unsigned long offset) {
> -        return __builtin_assume_aligned(x, 1024, offset);  // <- check returned pointer accounting for the offest
> -      }
> -
> -      void process(char *data, int width) {
> -          #pragma omp for simd aligned(data : 1024) // <- aligned clause will be checked.
> -          for (int x = 0; x < width; x++)
> -          data[x] *= data[x];
> -      }
> -
>  Core Analysis Improvements
>  ==========================
>
>
> Modified: cfe/trunk/docs/UndefinedBehaviorSanitizer.rst
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/UndefinedBehaviorSanitizer.rst?rev=351159&r1=351158&r2=351159&view=diff
> ==============================================================================
> --- cfe/trunk/docs/UndefinedBehaviorSanitizer.rst (original)
> +++ cfe/trunk/docs/UndefinedBehaviorSanitizer.rst Mon Jan 14 19:38:02 2019
> @@ -72,7 +72,7 @@ Available checks
>  Available checks are:
>
>    -  ``-fsanitize=alignment``: Use of a misaligned pointer or creation
> -     of a misaligned reference. Also sanitizes assume_aligned-like attributes.
> +     of a misaligned reference.
>    -  ``-fsanitize=bool``: Load of a ``bool`` value which is neither
>       ``true`` nor ``false``.
>    -  ``-fsanitize=builtin``: Passing invalid values to compiler builtins.
>
> Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=351159&r1=351158&r2=351159&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Mon Jan 14 19:38:02 2019
> @@ -1904,17 +1904,15 @@ RValue CodeGenFunction::EmitBuiltinExpr(
>      return RValue::get(Result);
>    }
>    case Builtin::BI__builtin_assume_aligned: {
> -    const Expr *Ptr = E->getArg(0);
> -    Value *PtrValue = EmitScalarExpr(Ptr);
> +    Value *PtrValue = EmitScalarExpr(E->getArg(0));
>      Value *OffsetValue =
>        (E->getNumArgs() > 2) ? EmitScalarExpr(E->getArg(2)) : nullptr;
>
>      Value *AlignmentValue = EmitScalarExpr(E->getArg(1));
>      ConstantInt *AlignmentCI = cast<ConstantInt>(AlignmentValue);
> -    unsigned Alignment = (unsigned)AlignmentCI->getZExtValue();
> +    unsigned Alignment = (unsigned) AlignmentCI->getZExtValue();
>
> -    EmitAlignmentAssumption(PtrValue, Ptr, /*The expr loc is sufficient.*/ SourceLocation(),
> -                            Alignment, OffsetValue);
> +    EmitAlignmentAssumption(PtrValue, Alignment, OffsetValue);
>      return RValue::get(PtrValue);
>    }
>    case Builtin::BI__assume:
>
> Modified: cfe/trunk/lib/CodeGen/CGCall.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=351159&r1=351158&r2=351159&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGCall.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGCall.cpp Mon Jan 14 19:38:02 2019
> @@ -2410,10 +2410,7 @@ void CodeGenFunction::EmitFunctionProlog
>            if (!AVAttr)
>              if (const auto *TOTy = dyn_cast<TypedefType>(OTy))
>                AVAttr = TOTy->getDecl()->getAttr<AlignValueAttr>();
> -          if (AVAttr && !SanOpts.has(SanitizerKind::Alignment)) {
> -            // If alignment-assumption sanitizer is enabled, we do *not* add
> -            // alignment attribute here, but emit normal alignment assumption,
> -            // so the UBSAN check could function.
> +          if (AVAttr) {
>              llvm::Value *AlignmentValue =
>                EmitScalarExpr(AVAttr->getAlignment());
>              llvm::ConstantInt *AlignmentCI =
> @@ -4538,14 +4535,13 @@ RValue CodeGenFunction::EmitCall(const C
>
>        llvm::Value *Alignment = EmitScalarExpr(AA->getAlignment());
>        llvm::ConstantInt *AlignmentCI = cast<llvm::ConstantInt>(Alignment);
> -      EmitAlignmentAssumption(Ret.getScalarVal(), RetTy, Loc, AA->getLocation(),
> -                              AlignmentCI->getZExtValue(), OffsetValue);
> +      EmitAlignmentAssumption(Ret.getScalarVal(), AlignmentCI->getZExtValue(),
> +                              OffsetValue);
>      } else if (const auto *AA = TargetDecl->getAttr<AllocAlignAttr>()) {
> -      llvm::Value *AlignmentVal = CallArgs[AA->getParamIndex().getLLVMIndex()]
> -                                      .getRValue(*this)
> -                                      .getScalarVal();
> -      EmitAlignmentAssumption(Ret.getScalarVal(), RetTy, Loc, AA->getLocation(),
> -                              AlignmentVal);
> +      llvm::Value *ParamVal =
> +          CallArgs[AA->getParamIndex().getLLVMIndex()].getRValue(
> +              *this).getScalarVal();
> +      EmitAlignmentAssumption(Ret.getScalarVal(), ParamVal);
>      }
>    }
>
>
> Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=351159&r1=351158&r2=351159&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Mon Jan 14 19:38:02 2019
> @@ -258,11 +258,8 @@ public:
>            AVAttr = TTy->getDecl()->getAttr<AlignValueAttr>();
>        } else {
>          // Assumptions for function parameters are emitted at the start of the
> -        // function, so there is no need to repeat that here,
> -        // unless the alignment-assumption sanitizer is enabled,
> -        // then we prefer the assumption over alignment attribute
> -        // on IR function param.
> -        if (isa<ParmVarDecl>(VD) && !CGF.SanOpts.has(SanitizerKind::Alignment))
> +        // function, so there is no need to repeat that here.
> +        if (isa<ParmVarDecl>(VD))
>            return;
>
>          AVAttr = VD->getAttr<AlignValueAttr>();
> @@ -279,8 +276,7 @@ public:
>
>      Value *AlignmentValue = CGF.EmitScalarExpr(AVAttr->getAlignment());
>      llvm::ConstantInt *AlignmentCI = cast<llvm::ConstantInt>(AlignmentValue);
> -    CGF.EmitAlignmentAssumption(V, E, AVAttr->getLocation(),
> -                                AlignmentCI->getZExtValue());
> +    CGF.EmitAlignmentAssumption(V, AlignmentCI->getZExtValue());
>    }
>
>    /// EmitLoadOfLValue - Given an expression with complex type that represents a
>
> Modified: cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp?rev=351159&r1=351158&r2=351159&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp Mon Jan 14 19:38:02 2019
> @@ -1472,8 +1472,7 @@ static void emitAlignedClause(CodeGenFun
>               "alignment is not power of 2");
>        if (Alignment != 0) {
>          llvm::Value *PtrValue = CGF.EmitScalarExpr(E);
> -        CGF.EmitAlignmentAssumption(
> -            PtrValue, E, /*No second loc needed*/ SourceLocation(), Alignment);
> +        CGF.EmitAlignmentAssumption(PtrValue, Alignment);
>        }
>      }
>    }
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=351159&r1=351158&r2=351159&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Mon Jan 14 19:38:02 2019
> @@ -2207,49 +2207,6 @@ void CodeGenFunction::unprotectFromPeeph
>    protection.Inst->eraseFromParent();
>  }
>
> -void CodeGenFunction::EmitAlignmentAssumption(llvm::Value *PtrValue,
> -                                              QualType Ty, SourceLocation Loc,
> -                                              SourceLocation AssumptionLoc,
> -                                              llvm::Value *Alignment,
> -                                              llvm::Value *OffsetValue) {
> -  llvm::Value *TheCheck;
> -  llvm::Instruction *Assumption = Builder.CreateAlignmentAssumption(
> -      CGM.getDataLayout(), PtrValue, Alignment, OffsetValue, &TheCheck);
> -  if (SanOpts.has(SanitizerKind::Alignment)) {
> -    EmitAlignmentAssumptionCheck(PtrValue, Ty, Loc, AssumptionLoc, Alignment,
> -                                 OffsetValue, TheCheck, Assumption);
> -  }
> -}
> -
> -void CodeGenFunction::EmitAlignmentAssumption(llvm::Value *PtrValue,
> -                                              QualType Ty, SourceLocation Loc,
> -                                              SourceLocation AssumptionLoc,
> -                                              unsigned Alignment,
> -                                              llvm::Value *OffsetValue) {
> -  llvm::Value *TheCheck;
> -  llvm::Instruction *Assumption = Builder.CreateAlignmentAssumption(
> -      CGM.getDataLayout(), PtrValue, Alignment, OffsetValue, &TheCheck);
> -  if (SanOpts.has(SanitizerKind::Alignment)) {
> -    llvm::Value *AlignmentVal = llvm::ConstantInt::get(IntPtrTy, Alignment);
> -    EmitAlignmentAssumptionCheck(PtrValue, Ty, Loc, AssumptionLoc, AlignmentVal,
> -                                 OffsetValue, TheCheck, Assumption);
> -  }
> -}
> -
> -void CodeGenFunction::EmitAlignmentAssumption(llvm::Value *PtrValue,
> -                                              const Expr *E,
> -                                              SourceLocation AssumptionLoc,
> -                                              unsigned Alignment,
> -                                              llvm::Value *OffsetValue) {
> -  if (auto *CE = dyn_cast<CastExpr>(E))
> -    E = CE->getSubExprAsWritten();
> -  QualType Ty = E->getType();
> -  SourceLocation Loc = E->getExprLoc();
> -
> -  EmitAlignmentAssumption(PtrValue, Ty, Loc, AssumptionLoc, Alignment,
> -                          OffsetValue);
> -}
> -
>  llvm::Value *CodeGenFunction::EmitAnnotationCall(llvm::Value *AnnotationFn,
>                                                   llvm::Value *AnnotatedVal,
>                                                   StringRef AnnotationStr,
> @@ -2502,61 +2459,6 @@ void CodeGenFunction::EmitMultiVersionRe
>    Builder.ClearInsertionPoint();
>  }
>
> -// Loc - where the diagnostic will point, where in the source code this
> -//  alignment has failed.
> -// SecondaryLoc - if present (will be present if sufficiently different from
> -//  Loc), the diagnostic will additionally point a "Note:" to this location.
> -//  It should be the location where the __attribute__((assume_aligned))
> -//  was written e.g.
> -void CodeGenFunction::EmitAlignmentAssumptionCheck(
> -    llvm::Value *Ptr, QualType Ty, SourceLocation Loc,
> -    SourceLocation SecondaryLoc, llvm::Value *Alignment,
> -    llvm::Value *OffsetValue, llvm::Value *TheCheck,
> -    llvm::Instruction *Assumption) {
> -  assert(Assumption && isa<llvm::CallInst>(Assumption) &&
> -         cast<llvm::CallInst>(Assumption)->getCalledValue() ==
> -             llvm::Intrinsic::getDeclaration(
> -                 Builder.GetInsertBlock()->getParent()->getParent(),
> -                 llvm::Intrinsic::assume) &&
> -         "Assumption should be a call to llvm.assume().");
> -  assert(&(Builder.GetInsertBlock()->back()) == Assumption &&
> -         "Assumption should be the last instruction of the basic block, "
> -         "since the basic block is still being generated.");
> -
> -  if (!SanOpts.has(SanitizerKind::Alignment))
> -    return;
> -
> -  // Don't check pointers to volatile data. The behavior here is implementation-
> -  // defined.
> -  if (Ty->getPointeeType().isVolatileQualified())
> -    return;
> -
> -  // We need to temorairly remove the assumption so we can insert the
> -  // sanitizer check before it, else the check will be dropped by optimizations.
> -  Assumption->removeFromParent();
> -
> -  {
> -    SanitizerScope SanScope(this);
> -
> -    if (!OffsetValue)
> -      OffsetValue = Builder.getInt1(0); // no offset.
> -
> -    llvm::Constant *StaticData[] = {EmitCheckSourceLocation(Loc),
> -                                    EmitCheckSourceLocation(SecondaryLoc),
> -                                    EmitCheckTypeDescriptor(Ty)};
> -    llvm::Value *DynamicData[] = {EmitCheckValue(Ptr),
> -                                  EmitCheckValue(Alignment),
> -                                  EmitCheckValue(OffsetValue)};
> -    EmitCheck({std::make_pair(TheCheck, SanitizerKind::Alignment)},
> -              SanitizerHandler::AlignmentAssumption, StaticData, DynamicData);
> -  }
> -
> -  // We are now in the (new, empty) "cont" basic block.
> -  // Reintroduce the assumption.
> -  Builder.Insert(Assumption);
> -  // FIXME: Assumption still has it's original basic block as it's Parent.
> -}
> -
>  llvm::DebugLoc CodeGenFunction::SourceLocToDebugLoc(SourceLocation Location) {
>    if (CGDebugInfo *DI = getDebugInfo())
>      return DI->SourceLocToDebugLoc(Location);
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=351159&r1=351158&r2=351159&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Mon Jan 14 19:38:02 2019
> @@ -131,7 +131,6 @@ enum TypeEvaluationKind {
>    SANITIZER_CHECK(ShiftOutOfBounds, shift_out_of_bounds, 0)                    \
>    SANITIZER_CHECK(SubOverflow, sub_overflow, 0)                                \
>    SANITIZER_CHECK(TypeMismatch, type_mismatch, 1)                              \
> -  SANITIZER_CHECK(AlignmentAssumption, alignment_assumption, 0)                \
>    SANITIZER_CHECK(VLABoundNotPositive, vla_bound_not_positive, 0)
>
>  enum SanitizerHandler {
> @@ -2634,6 +2633,12 @@ public:
>    ComplexPairTy EmitComplexPrePostIncDec(const UnaryOperator *E, LValue LV,
>                                           bool isInc, bool isPre);
>
> +  void EmitAlignmentAssumption(llvm::Value *PtrValue, unsigned Alignment,
> +                               llvm::Value *OffsetValue = nullptr) {
> +    Builder.CreateAlignmentAssumption(CGM.getDataLayout(), PtrValue, Alignment,
> +                                      OffsetValue);
> +  }
> +
>    /// Converts Location to a DebugLoc, if debug information is enabled.
>    llvm::DebugLoc SourceLocToDebugLoc(SourceLocation Location);
>
> @@ -2797,27 +2802,11 @@ public:
>    PeepholeProtection protectFromPeepholes(RValue rvalue);
>    void unprotectFromPeepholes(PeepholeProtection protection);
>
> -  void EmitAlignmentAssumptionCheck(llvm::Value *Ptr, QualType Ty,
> -                                    SourceLocation Loc,
> -                                    SourceLocation AssumptionLoc,
> -                                    llvm::Value *Alignment,
> -                                    llvm::Value *OffsetValue,
> -                                    llvm::Value *TheCheck,
> -                                    llvm::Instruction *Assumption);
> -
> -  void EmitAlignmentAssumption(llvm::Value *PtrValue, QualType Ty,
> -                               SourceLocation Loc, SourceLocation AssumptionLoc,
> -                               llvm::Value *Alignment,
> -                               llvm::Value *OffsetValue = nullptr);
> -
> -  void EmitAlignmentAssumption(llvm::Value *PtrValue, QualType Ty,
> -                               SourceLocation Loc, SourceLocation AssumptionLoc,
> -                               unsigned Alignment,
> -                               llvm::Value *OffsetValue = nullptr);
> -
> -  void EmitAlignmentAssumption(llvm::Value *PtrValue, const Expr *E,
> -                               SourceLocation AssumptionLoc, unsigned Alignment,
> -                               llvm::Value *OffsetValue = nullptr);
> +  void EmitAlignmentAssumption(llvm::Value *PtrValue, llvm::Value *Alignment,
> +                               llvm::Value *OffsetValue = nullptr) {
> +    Builder.CreateAlignmentAssumption(CGM.getDataLayout(), PtrValue, Alignment,
> +                                      OffsetValue);
> +  }
>
>    //===--------------------------------------------------------------------===//
>    //                             Statement Emission
>
> Removed: cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-lvalue.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-lvalue.cpp?rev=351158&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-lvalue.cpp (original)
> +++ cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-lvalue.cpp (removed)
> @@ -1,40 +0,0 @@
> -// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NOSANITIZE
> -// RUN: %clang_cc1 -fsanitize=alignment -fno-sanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-NORECOVER,CHECK-SANITIZE-UNREACHABLE
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-RECOVER
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-TRAP,CHECK-SANITIZE-UNREACHABLE
> -
> -typedef char **__attribute__((align_value(0x80000000))) aligned_char;
> -
> -struct ac_struct {
> -  // CHECK:  %[[STRUCT_AC_STRUCT:.*]] = type { i8** }
> -  aligned_char a;
> -};
> -
> -// CHECK-SANITIZE-ANYRECOVER: @[[ALIGNED_CHAR:.*]] = {{.*}} c"'aligned_char' (aka 'char **')\00" }
> -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_ALIGNMENT_ASSUMPTION:.*]] = {{.*}}, i32 100, i32 13 }, {{.*}}* @[[ALIGNED_CHAR]] }
> -
> -char **load_from_ac_struct(struct ac_struct *x) {
> -  // CHECK:                           define i8** @{{.*}}(%[[STRUCT_AC_STRUCT]]* %[[X:.*]])
> -  // CHECK-NEXT:                      [[ENTRY:.*]]:
> -  // CHECK-NEXT:                        %[[STRUCT_AC_STRUCT_ADDR:.*]] = alloca %[[STRUCT_AC_STRUCT]]*, align 8
> -  // CHECK-NEXT:                        store %[[STRUCT_AC_STRUCT]]* %[[X]], %[[STRUCT_AC_STRUCT]]** %[[STRUCT_AC_STRUCT_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RELOADED:.*]] = load %[[STRUCT_AC_STRUCT]]*, %[[STRUCT_AC_STRUCT]]** %[[STRUCT_AC_STRUCT_ADDR]], align 8
> -  // CHECK:                             %[[A_ADDR:.*]] = getelementptr inbounds %[[STRUCT_AC_STRUCT]], %[[STRUCT_AC_STRUCT]]* %[[X_RELOADED]], i32 0, i32 0
> -  // CHECK:                             %[[A:.*]] = load i8**, i8*** %[[A_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[PTRINT:.*]] = ptrtoint i8** %[[A]] to i64
> -  // CHECK-NEXT:                        %[[MASKEDPTR:.*]] = and i64 %[[PTRINT]], 2147483647
> -  // CHECK-NEXT:                        %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
> -  // CHECK-SANITIZE-NEXT:               %[[PTRINT_DUP:.*]] = ptrtoint i8** %[[A]] to i64, !nosanitize
> -  // CHECK-SANITIZE-NEXT:               br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
> -  // CHECK-SANITIZE:                  [[HANDLER_ALIGNMENT_ASSUMPTION]]:
> -  // CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.trap(){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize
> -  // CHECK-SANITIZE:                  [[CONT]]:
> -  // CHECK-NEXT:                        call void @llvm.assume(i1 %[[MASKCOND]])
> -  // CHECK-NEXT:                        ret i8** %[[A]]
> -  // CHECK-NEXT:                      }
> -#line 100
> -  return x->a;
> -}
>
> Removed: cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-paramvar.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-paramvar.cpp?rev=351158&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-paramvar.cpp (original)
> +++ cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-align_value-on-paramvar.cpp (removed)
> @@ -1,32 +0,0 @@
> -// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NOSANITIZE
> -// RUN: %clang_cc1 -fsanitize=alignment -fno-sanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-NORECOVER,CHECK-SANITIZE-UNREACHABLE
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-RECOVER
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-TRAP,CHECK-SANITIZE-UNREACHABLE
> -
> -// CHECK-SANITIZE-ANYRECOVER: @[[CHAR:.*]] = {{.*}} c"'char **'\00" }
> -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_ALIGNMENT_ASSUMPTION:.*]] = {{.*}}, i32 100, i32 10 }, {{.*}}* @[[CHAR]] }
> -
> -char **passthrough(__attribute__((align_value(0x80000000))) char **x) {
> -  // CHECK-NOSANITIZE:                define i8** @{{.*}}(i8** align 536870912 %[[X:.*]])
> -  // CHECK-SANITIZE:                  define i8** @{{.*}}(i8** %[[X:.*]])
> -  // CHECK-NEXT:                      [[entry:.*]]:
> -  // CHECK-NEXT:                        %[[X_ADDR:.*]] = alloca i8**, align 8
> -  // CHECK-NEXT:                        store i8** %[[X]], i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
> -  // CHECK-SANITIZE-NEXT:               %[[PTRINT:.*]] = ptrtoint i8** %[[X_RELOADED]] to i64
> -  // CHECK-SANITIZE-NEXT:               %[[MASKEDPTR:.*]] = and i64 %[[PTRINT]], 2147483647
> -  // CHECK-SANITIZE-NEXT:               %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
> -  // CHECK-SANITIZE-NEXT:               %[[PTRINT_DUP:.*]] = ptrtoint i8** %[[X_RELOADED]] to i64, !nosanitize
> -  // CHECK-SANITIZE-NEXT:               br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
> -  // CHECK-SANITIZE:                  [[HANDLER_ALIGNMENT_ASSUMPTION]]:
> -  // CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.trap(){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize
> -  // CHECK-SANITIZE:                  [[CONT]]:
> -  // CHECK-SANITIZE-NEXT:               call void @llvm.assume(i1 %[[MASKCOND]])
> -  // CHECK-NEXT:                        ret i8** %[[X_RELOADED]]
> -  // CHECK-NEXT:                      }
> -#line 100
> -  return x;
> -}
>
> Removed: cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function-variable.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function-variable.cpp?rev=351158&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function-variable.cpp (original)
> +++ cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function-variable.cpp (removed)
> @@ -1,52 +0,0 @@
> -// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NOSANITIZE
> -// RUN: %clang_cc1 -fsanitize=alignment -fno-sanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-NORECOVER,CHECK-SANITIZE-UNREACHABLE
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-RECOVER
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-TRAP,CHECK-SANITIZE-UNREACHABLE
> -
> -// CHECK-SANITIZE-ANYRECOVER: @[[CHAR:.*]] = {{.*}} c"'char **'\00" }
> -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_ALIGNMENT_ASSUMPTION:.*]] = {{.*}}, i32 100, i32 10 }, {{.*}}* @[[CHAR]] }
> -
> -char **__attribute__((alloc_align(2)))
> -passthrough(char **x, unsigned long alignment) {
> -  // CHECK:      define i8** @[[PASSTHROUGH:.*]](i8** %[[X:.*]], i64 %[[ALIGNMENT:.*]])
> -  // CHECK-NEXT: entry:
> -  // CHECK-NEXT:   %[[X_ADDR:.*]] = alloca i8**, align 8
> -  // CHECK-NEXT:   %[[ALIGNMENT_ADDR:.*]] = alloca i64, align 8
> -  // CHECK-NEXT:   store i8** %[[X]], i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:   store i64 %[[ALIGNMENT]], i64* %[[ALIGNMENT_ADDR]], align 8
> -  // CHECK-NEXT:   %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:   ret i8** %[[X_RELOADED]]
> -  // CHECK-NEXT: }
> -  return x;
> -}
> -
> -char **caller(char **x, unsigned long alignment) {
> -  // CHECK:                           define i8** @{{.*}}(i8** %[[X:.*]], i64 %[[ALIGNMENT:.*]])
> -  // CHECK-NEXT:                      entry:
> -  // CHECK-NEXT:                        %[[X_ADDR:.*]] = alloca i8**, align 8
> -  // CHECK-NEXT:                        %[[ALIGNMENT_ADDR:.*]] = alloca i64, align 8
> -  // CHECK-NEXT:                        store i8** %[[X]], i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        store i64 %[[ALIGNMENT]], i64* %[[ALIGNMENT_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[ALIGNMENT_RELOADED:.*]] = load i64, i64* %[[ALIGNMENT_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RETURNED:.*]] = call i8** @[[PASSTHROUGH]](i8** %[[X_RELOADED]], i64 %[[ALIGNMENT_RELOADED]])
> -  // CHECK-NEXT:                        %[[ISPOSITIVE:.*]] = icmp sgt i64 %[[ALIGNMENT_RELOADED]], 0
> -  // CHECK-NEXT:                        %[[POSITIVEMASK:.*]] = sub i64 %[[ALIGNMENT_RELOADED]], 1
> -  // CHECK-NEXT:                        %[[MASK:.*]] = select i1 %[[ISPOSITIVE]], i64 %[[POSITIVEMASK]], i64 0
> -  // CHECK-NEXT:                        %[[PTRINT:.*]] = ptrtoint i8** %[[X_RETURNED]] to i64
> -  // CHECK-NEXT:                        %[[MASKEDPTR:.*]] = and i64 %[[PTRINT]], %[[MASK]]
> -  // CHECK-NEXT:                        %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
> -  // CHECK-SANITIZE-NEXT:               %[[PTRINT_DUP:.*]] = ptrtoint i8** %[[X_RETURNED]] to i64, !nosanitize
> -  // CHECK-SANITIZE-NEXT:               br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
> -  // CHECK-SANITIZE:                  [[HANDLER_ALIGNMENT_ASSUMPTION]]:
> -  // CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 %[[ALIGNMENT_RELOADED]], i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 %[[ALIGNMENT_RELOADED]], i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.trap(){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize
> -  // CHECK-SANITIZE:                  [[CONT]]:
> -  // CHECK-NEXT:                        call void @llvm.assume(i1 %[[MASKCOND]])
> -  // CHECK-NEXT:                        ret i8** %[[X_RETURNED]]
> -  // CHECK-NEXT:                      }
> -#line 100
> -  return passthrough(x, alignment);
> -}
>
> Removed: cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function.cpp?rev=351158&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function.cpp (original)
> +++ cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-alloc_align-on-function.cpp (removed)
> @@ -1,46 +0,0 @@
> -// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NOSANITIZE
> -// RUN: %clang_cc1 -fsanitize=alignment -fno-sanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-NORECOVER,CHECK-SANITIZE-UNREACHABLE
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-RECOVER
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-TRAP,CHECK-SANITIZE-UNREACHABLE
> -
> -// CHECK-SANITIZE-ANYRECOVER: @[[CHAR:.*]] = {{.*}} c"'char **'\00" }
> -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_ALIGNMENT_ASSUMPTION:.*]] = {{.*}}, i32 100, i32 10 }, {{.*}}* @[[CHAR]] }
> -
> -char **__attribute__((alloc_align(2)))
> -passthrough(char **x, unsigned long alignment) {
> -  // CHECK:      define i8** @[[PASSTHROUGH:.*]](i8** %[[X:.*]], i64 %[[ALIGNMENT:.*]])
> -  // CHECK-NEXT: entry:
> -  // CHECK-NEXT:   %[[X_ADDR:.*]] = alloca i8**, align 8
> -  // CHECK-NEXT:   %[[ALIGNMENT_ADDR:.*]] = alloca i64, align 8
> -  // CHECK-NEXT:   store i8** %[[X]], i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:   store i64 %[[ALIGNMENT]], i64* %[[ALIGNMENT_ADDR]], align 8
> -  // CHECK-NEXT:   %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:   ret i8** %[[X_RELOADED]]
> -  // CHECK-NEXT: }
> -  return x;
> -}
> -
> -char **caller(char **x) {
> -  // CHECK:                           define i8** @{{.*}}(i8** %[[X:.*]])
> -  // CHECK-NEXT:                      entry:
> -  // CHECK-NEXT:                        %[[X_ADDR:.*]] = alloca i8**, align 8
> -  // CHECK-NEXT:                        store i8** %[[X]], i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RETURNED:.*]] = call i8** @[[PASSTHROUGH]](i8** %[[X_RELOADED]], i64 2147483648)
> -  // CHECK-NEXT:                        %[[PTRINT:.*]] = ptrtoint i8** %[[X_RETURNED]] to i64
> -  // CHECK-NEXT:                        %[[MASKEDPTR:.*]] = and i64 %[[PTRINT]], 2147483647
> -  // CHECK-NEXT:                        %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
> -  // CHECK-SANITIZE-NEXT:               %[[PTRINT_DUP:.*]] = ptrtoint i8** %[[X_RETURNED]] to i64, !nosanitize
> -  // CHECK-SANITIZE-NEXT:               br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
> -  // CHECK-SANITIZE:                  [[HANDLER_ALIGNMENT_ASSUMPTION]]:
> -  // CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.trap(){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize
> -  // CHECK-SANITIZE:                  [[CONT]]:
> -  // CHECK-NEXT:                        call void @llvm.assume(i1 %[[MASKCOND]])
> -  // CHECK-NEXT:                        ret i8** %[[X_RETURNED]]
> -  // CHECK-NEXT:                      }
> -#line 100
> -  return passthrough(x, 0x80000000);
> -}
>
> Removed: cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function-two-params.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function-two-params.cpp?rev=351158&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function-two-params.cpp (original)
> +++ cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function-two-params.cpp (removed)
> @@ -1,44 +0,0 @@
> -// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NOSANITIZE
> -// RUN: %clang_cc1 -fsanitize=alignment -fno-sanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-NORECOVER,CHECK-SANITIZE-UNREACHABLE
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-RECOVER
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-TRAP,CHECK-SANITIZE-UNREACHABLE
> -
> -// CHECK-SANITIZE-ANYRECOVER: @[[CHAR:.*]] = {{.*}} c"'char **'\00" }
> -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_ALIGNMENT_ASSUMPTION:.*]] = {{.*}}, i32 100, i32 10 }, {{.*}}* @[[CHAR]] }
> -
> -char **__attribute__((assume_aligned(0x80000000, 42))) passthrough(char **x) {
> -  // CHECK:      define i8** @[[PASSTHROUGH:.*]](i8** %[[X:.*]])
> -  // CHECK-NEXT: entry:
> -  // CHECK-NEXT:   %[[X_ADDR:.*]] = alloca i8**, align 8
> -  // CHECK-NEXT:   store i8** %[[X]], i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:   %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:   ret i8** %[[X_RELOADED]]
> -  // CHECK-NEXT: }
> -  return x;
> -}
> -
> -char **caller(char **x) {
> -  // CHECK:                           define i8** @{{.*}}(i8** %[[X:.*]])
> -  // CHECK-NEXT:                      entry:
> -  // CHECK-NEXT:                        %[[X_ADDR:.*]] = alloca i8**, align 8
> -  // CHECK-NEXT:                        store i8** %[[X]], i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RETURNED:.*]] = call i8** @[[PASSTHROUGH]](i8** %[[X_RELOADED]])
> -  // CHECK-NEXT:                        %[[PTRINT:.*]] = ptrtoint i8** %[[X_RETURNED]] to i64
> -  // CHECK-NEXT:                        %[[OFFSETPTR:.*]] = sub i64 %[[PTRINT]], 42
> -  // CHECK-NEXT:                        %[[MASKEDPTR:.*]] = and i64 %[[OFFSETPTR]], 2147483647
> -  // CHECK-NEXT:                        %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
> -  // CHECK-SANITIZE-NEXT:               %[[PTRINT_DUP:.*]] = ptrtoint i8** %[[X_RETURNED]] to i64, !nosanitize
> -  // CHECK-SANITIZE-NEXT:               br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
> -  // CHECK-SANITIZE:                  [[HANDLER_ALIGNMENT_ASSUMPTION]]:
> -  // CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 42){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 42){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.trap(){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize
> -  // CHECK-SANITIZE:                  [[CONT]]:
> -  // CHECK-NEXT:                        call void @llvm.assume(i1 %[[MASKCOND]])
> -  // CHECK-NEXT:                        ret i8** %[[X_RETURNED]]
> -  // CHECK-NEXT:                      }
> -#line 100
> -  return passthrough(x);
> -}
>
> Removed: cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function.cpp?rev=351158&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function.cpp (original)
> +++ cfe/trunk/test/CodeGen/catch-alignment-assumption-attribute-assume_aligned-on-function.cpp (removed)
> @@ -1,43 +0,0 @@
> -// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NOSANITIZE
> -// RUN: %clang_cc1 -fsanitize=alignment -fno-sanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-NORECOVER,CHECK-SANITIZE-UNREACHABLE
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-RECOVER
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-TRAP,CHECK-SANITIZE-UNREACHABLE
> -
> -// CHECK-SANITIZE-ANYRECOVER: @[[CHAR:.*]] = {{.*}} c"'char **'\00" }
> -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_ALIGNMENT_ASSUMPTION:.*]] = {{.*}}, i32 100, i32 10 }, {{.*}}* @[[CHAR]] }
> -
> -char **__attribute__((assume_aligned(0x80000000))) passthrough(char **x) {
> -  // CHECK:      define i8** @[[PASSTHROUGH:.*]](i8** %[[X:.*]])
> -  // CHECK-NEXT: entry:
> -  // CHECK-NEXT:   %[[X_ADDR:.*]] = alloca i8**, align 8
> -  // CHECK-NEXT:   store i8** %[[X]], i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:   %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:   ret i8** %[[X_RELOADED]]
> -  // CHECK-NEXT: }
> -  return x;
> -}
> -
> -char **caller(char **x) {
> -  // CHECK:                           define i8** @{{.*}}(i8** %[[X]])
> -  // CHECK-NEXT:                      entry:
> -  // CHECK-NEXT:                        %[[X_ADDR]] = alloca i8**, align 8
> -  // CHECK-NEXT:                        store i8** %[[X]], i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RETURNED:.*]] = call i8** @[[PASSTHROUGH]](i8** %[[X_RELOADED]])
> -  // CHECK-NEXT:                        %[[PTRINT:.*]] = ptrtoint i8** %[[X_RETURNED]] to i64
> -  // CHECK-NEXT:                        %[[MASKEDPTR:.*]] = and i64 %[[PTRINT]], 2147483647
> -  // CHECK-NEXT:                        %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
> -  // CHECK-SANITIZE-NEXT:               %[[PTRINT_DUP:.*]] = ptrtoint i8** %[[X_RETURNED]] to i64, !nosanitize
> -  // CHECK-SANITIZE-NEXT:               br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
> -  // CHECK-SANITIZE:                  [[HANDLER_ALIGNMENT_ASSUMPTION]]:
> -  // CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.trap(){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize
> -  // CHECK-SANITIZE:                  [[CONT]]:
> -  // CHECK-NEXT:                        call void @llvm.assume(i1 %[[MASKCOND]])
> -  // CHECK-NEXT:                        ret i8** %[[X_RETURNED]]
> -  // CHECK-NEXT:                      }
> -#line 100
> -  return passthrough(x);
> -}
>
> Removed: cfe/trunk/test/CodeGen/catch-alignment-assumption-blacklist.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/catch-alignment-assumption-blacklist.c?rev=351158&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/catch-alignment-assumption-blacklist.c (original)
> +++ cfe/trunk/test/CodeGen/catch-alignment-assumption-blacklist.c (removed)
> @@ -1,28 +0,0 @@
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK
> -
> -// CHECK-LABEL: @baseline
> -void *baseline(void *x) {
> -  // CHECK: call void @__ubsan_handle_alignment_assumption(
> -  return __builtin_assume_aligned(x, 1);
> -}
> -
> -// CHECK-LABEL: blacklist_0
> -__attribute__((no_sanitize("undefined"))) void *blacklist_0(void *x) {
> -  return __builtin_assume_aligned(x, 1);
> -}
> -
> -// CHECK-LABEL: blacklist_1
> -__attribute__((no_sanitize("alignment"))) void *blacklist_1(void *x) {
> -  return __builtin_assume_aligned(x, 1);
> -}
> -
> -// CHECK-LABEL: dont_ignore_volatile_ptrs
> -void *dont_ignore_volatile_ptrs(void * volatile x) {
> -  // CHECK: call void @__ubsan_handle_alignment_assumption(
> -  return __builtin_assume_aligned(x, 1);
> -}
> -
> -// CHECK-LABEL: ignore_volatiles
> -void *ignore_volatiles(volatile void * x) {
> -  return __builtin_assume_aligned(x, 1);
> -}
>
> Removed: cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params-variable.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params-variable.cpp?rev=351158&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params-variable.cpp (original)
> +++ cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params-variable.cpp (removed)
> @@ -1,36 +0,0 @@
> -// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NOSANITIZE
> -// RUN: %clang_cc1 -fsanitize=alignment -fno-sanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-NORECOVER,CHECK-SANITIZE-UNREACHABLE
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-RECOVER
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-TRAP,CHECK-SANITIZE-UNREACHABLE
> -
> -// CHECK-SANITIZE-ANYRECOVER: @[[CHAR:.*]] = {{.*}} c"'char **'\00" }
> -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_ALIGNMENT_ASSUMPTION:.*]] = {{.*}}, i32 100, i32 35 }, {{.*}}* @[[CHAR]] }
> -
> -void *caller(char **x, unsigned long offset) {
> -  // CHECK:                           define i8* @{{.*}}(i8** %[[X:.*]], i64 %[[OFFSET:.*]])
> -  // CHECK-NEXT:                      entry:
> -  // CHECK-NEXT:                        %[[X_ADDR:.*]] = alloca i8**, align 8
> -  // CHECK-NEXT:                        %[[OFFSET_ADDR:.*]] = alloca i64, align 8
> -  // CHECK-NEXT:                        store i8** %[[X]], i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        store i64 %[[OFFSET]], i64* %[[OFFSET_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[BITCAST:.*]] = bitcast i8** %[[X_RELOADED]] to i8*
> -  // CHECK-NEXT:                        %[[OFFSET_RELOADED:.*]] = load i64, i64* %[[OFFSET_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[PTRINT:.*]] = ptrtoint i8* %[[BITCAST]] to i64
> -  // CHECK-NEXT:                        %[[OFFSETPTR:.*]] = sub i64 %[[PTRINT]], %[[OFFSET_RELOADED]]
> -  // CHECK-NEXT:                        %[[MASKEDPTR:.*]] = and i64 %[[OFFSETPTR]], 2147483647
> -  // CHECK-NEXT:                        %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
> -  // CHECK-SANITIZE-NEXT:               %[[PTRINT_DUP:.*]] = ptrtoint i8* %[[BITCAST]] to i64, !nosanitize
> -  // CHECK-SANITIZE-NEXT:               br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
> -  // CHECK-SANITIZE:                  [[HANDLER_ALIGNMENT_ASSUMPTION]]:
> -  // CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 %[[OFFSET_RELOADED]]){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 %[[OFFSET_RELOADED]]){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.trap(){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize
> -  // CHECK-SANITIZE:                  [[CONT]]:
> -  // CHECK-NEXT:                        call void @llvm.assume(i1 %[[MASKCOND]])
> -  // CHECK-NEXT:                        ret i8* %[[BITCAST]]
> -  // CHECK-NEXT:                      }
> -#line 100
> -  return __builtin_assume_aligned(x, 0x80000000, offset);
> -}
>
> Removed: cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params.cpp?rev=351158&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params.cpp (original)
> +++ cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-three-params.cpp (removed)
> @@ -1,33 +0,0 @@
> -// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NOSANITIZE
> -// RUN: %clang_cc1 -fsanitize=alignment -fno-sanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-NORECOVER,CHECK-SANITIZE-UNREACHABLE
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-RECOVER
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-TRAP,CHECK-SANITIZE-UNREACHABLE
> -
> -// CHECK-SANITIZE-ANYRECOVER: @[[CHAR:.*]] = {{.*}} c"'char **'\00" }
> -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_ALIGNMENT_ASSUMPTION:.*]] = {{.*}}, i32 100, i32 35 }, {{.*}}* @[[CHAR]] }
> -
> -void *caller(char **x) {
> -  // CHECK:                           define i8* @{{.*}}(i8** %[[X:.*]])
> -  // CHECK-NEXT:                      entry:
> -  // CHECK-NEXT:                        %[[X_ADDR:.*]] = alloca i8**, align 8
> -  // CHECK-NEXT:                        store i8** %[[X]], i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[BITCAST:.*]] = bitcast i8** %[[X_RELOADED]] to i8*
> -  // CHECK-NEXT:                        %[[PTRINT:.*]] = ptrtoint i8* %[[BITCAST]] to i64
> -  // CHECK-NEXT:                        %[[OFFSETPTR:.*]] = sub i64 %[[PTRINT]], 42
> -  // CHECK-NEXT:                        %[[MASKEDPTR:.*]] = and i64 %[[OFFSETPTR]], 2147483647
> -  // CHECK-NEXT:                        %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
> -  // CHECK-SANITIZE-NEXT:               %[[PTRINT_DUP:.*]] = ptrtoint i8* %[[BITCAST]] to i64, !nosanitize
> -  // CHECK-SANITIZE-NEXT:               br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
> -  // CHECK-SANITIZE:                  [[HANDLER_ALIGNMENT_ASSUMPTION]]:
> -  // CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 42){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 42){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.trap(){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize
> -  // CHECK-SANITIZE:                  [[CONT]]:
> -  // CHECK-NEXT:                        call void @llvm.assume(i1 %[[MASKCOND]])
> -  // CHECK-NEXT:                        ret i8* %[[BITCAST]]
> -  // CHECK-NEXT:                      }
> -#line 100
> -  return __builtin_assume_aligned(x, 0x80000000, 42);
> -}
>
> Removed: cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp?rev=351158&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp (original)
> +++ cfe/trunk/test/CodeGen/catch-alignment-assumption-builtin_assume_aligned-two-params.cpp (removed)
> @@ -1,32 +0,0 @@
> -// RUN: %clang_cc1 -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NOSANITIZE
> -// RUN: %clang_cc1 -fsanitize=alignment -fno-sanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-NORECOVER,CHECK-SANITIZE-UNREACHABLE
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-RECOVER
> -// RUN: %clang_cc1 -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-TRAP,CHECK-SANITIZE-UNREACHABLE
> -
> -// CHECK-SANITIZE-ANYRECOVER: @[[CHAR:.*]] = {{.*}} c"'char **'\00" }
> -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_ALIGNMENT_ASSUMPTION:.*]] = {{.*}}, i32 100, i32 35 }, {{.*}}* @[[CHAR]] }
> -
> -void *caller(char **x) {
> -  // CHECK:                           define i8* @{{.*}}(i8** %[[X:.*]])
> -  // CHECK-NEXT:                      entry:
> -  // CHECK-NEXT:                        %[[X_ADDR:.*]] = alloca i8**, align 8
> -  // CHECK-NEXT:                        store i8** %[[X]], i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[X_RELOADED:.*]] = load i8**, i8*** %[[X_ADDR]], align 8
> -  // CHECK-NEXT:                        %[[BITCAST:.*]] = bitcast i8** %[[X_RELOADED]] to i8*
> -  // CHECK-NEXT:                        %[[PTRINT:.*]] = ptrtoint i8* %[[BITCAST]] to i64
> -  // CHECK-NEXT:                        %[[MASKEDPTR:.*]] = and i64 %[[PTRINT]], 2147483647
> -  // CHECK-NEXT:                        %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
> -  // CHECK-SANITIZE-NEXT:               %[[PTRINT_DUP:.*]] = ptrtoint i8* %[[BITCAST]] to i64, !nosanitize
> -  // CHECK-SANITIZE-NEXT:               br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
> -  // CHECK-SANITIZE:                  [[HANDLER_ALIGNMENT_ASSUMPTION]]:
> -  // CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 2147483648, i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.trap(){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize
> -  // CHECK-SANITIZE:                  [[CONT]]:
> -  // CHECK-NEXT:                        call void @llvm.assume(i1 %[[MASKCOND]])
> -  // CHECK-NEXT:                        ret i8* %[[BITCAST]]
> -  // CHECK-NEXT:                      }
> -#line 100
> -  return __builtin_assume_aligned(x, 0x80000000);
> -}
>
> Removed: cfe/trunk/test/CodeGen/catch-alignment-assumption-openmp.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/catch-alignment-assumption-openmp.cpp?rev=351158&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/catch-alignment-assumption-openmp.cpp (original)
> +++ cfe/trunk/test/CodeGen/catch-alignment-assumption-openmp.cpp (removed)
> @@ -1,32 +0,0 @@
> -// RUN: %clang_cc1 -fopenmp-simd -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,CHECK-NOSANITIZE
> -// RUN: %clang_cc1 -fopenmp-simd -fsanitize=alignment -fno-sanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-NORECOVER,CHECK-SANITIZE-UNREACHABLE
> -// RUN: %clang_cc1 -fopenmp-simd -fsanitize=alignment -fsanitize-recover=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-ANYRECOVER,CHECK-SANITIZE-RECOVER
> -// RUN: %clang_cc1 -fopenmp-simd -fsanitize=alignment -fsanitize-trap=alignment -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s -implicit-check-not="call void @__ubsan_handle_alignment_assumption" --check-prefixes=CHECK,CHECK-SANITIZE,CHECK-SANITIZE-TRAP,CHECK-SANITIZE-UNREACHABLE
> -
> -// CHECK-SANITIZE-ANYRECOVER: @[[CHAR:.*]] = {{.*}} c"'char *'\00" }
> -// CHECK-SANITIZE-ANYRECOVER: @[[LINE_100_ALIGNMENT_ASSUMPTION:.*]] = {{.*}}, i32 100, i32 30 }, {{.*}}* @[[CHAR]] }
> -
> -void func(char *data) {
> -  // CHECK: define void @{{.*}}(i8* %[[DATA:.*]])
> -  // CHECK-NEXT: [[ENTRY:.*]]:
> -  // CHECK-NEXT:   %[[DATA_ADDR:.*]] = alloca i8*, align 8
> -  // CHECK:   store i8* %[[DATA]], i8** %[[DATA_ADDR]], align 8
> -  // CHECK:   %[[DATA_RELOADED:.*]] = load i8*, i8** %[[DATA_ADDR]], align 8
> -  // CHECK-NEXT:   %[[PTRINT:.*]] = ptrtoint i8* %[[DATA_RELOADED]] to i64
> -  // CHECK-NEXT:   %[[MASKEDPTR:.*]] = and i64 %[[PTRINT]], 1073741823
> -  // CHECK-NEXT:   %[[MASKCOND:.*]] = icmp eq i64 %[[MASKEDPTR]], 0
> -  // CHECK-SANITIZE-NEXT:               %[[PTRINT_DUP:.*]] = ptrtoint i8* %[[DATA_RELOADED]] to i64, !nosanitize
> -  // CHECK-SANITIZE-NEXT:               br i1 %[[MASKCOND]], label %[[CONT:.*]], label %[[HANDLER_ALIGNMENT_ASSUMPTION:[^,]+]],{{.*}} !nosanitize
> -  // CHECK-SANITIZE:                  [[HANDLER_ALIGNMENT_ASSUMPTION]]:
> -  // CHECK-SANITIZE-NORECOVER-NEXT:     call void @__ubsan_handle_alignment_assumption_abort(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-RECOVER-NEXT:       call void @__ubsan_handle_alignment_assumption(i8* bitcast ({ {{{.*}}}, {{{.*}}}, {{{.*}}}* }* @[[LINE_100_ALIGNMENT_ASSUMPTION]] to i8*), i64 %[[PTRINT_DUP]], i64 1073741824, i64 0){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-TRAP-NEXT:          call void @llvm.trap(){{.*}}, !nosanitize
> -  // CHECK-SANITIZE-UNREACHABLE-NEXT:   unreachable, !nosanitize
> -  // CHECK-SANITIZE:                  [[CONT]]:
> -  // CHECK-NEXT:                        call void @llvm.assume(i1 %[[MASKCOND]])
> -
> -#line 100
> -#pragma omp for simd aligned(data : 0x40000000)
> -  for (int x = 0; x < 1; x++)
> -    data[x] = data[x];
> -}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list