Commit 3732f4e0 authored by Alexey Bataev's avatar Alexey Bataev
Browse files

[OPENMP]Add extra checks and initialization for clause modifier.

Added initialization of the extra modifier to silence sanitizer. Added
extra checks to avoid such trouble in future.
parent 1f054d66
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -735,10 +735,12 @@ static bool parseDeclareSimdClauses(
          CKind == OMPC_linear) {
        Parser::OpenMPVarListDataTy Data;
        SmallVectorImpl<Expr *> *Vars = &Uniforms;
        if (CKind == OMPC_aligned)
        if (CKind == OMPC_aligned) {
          Vars = &Aligneds;
        else if (CKind == OMPC_linear)
        } else if (CKind == OMPC_linear) {
          Data.ExtraModifier = OMPC_LINEAR_val;
          Vars = &Linears;
        }

        P.ConsumeToken();
        if (P.ParseOpenMPVarList(OMPD_declare_simd,
@@ -747,6 +749,9 @@ static bool parseDeclareSimdClauses(
        if (CKind == OMPC_aligned) {
          Alignments.append(Aligneds.size() - Alignments.size(), Data.TailExpr);
        } else if (CKind == OMPC_linear) {
          assert(0 <= Data.ExtraModifier &&
                 Data.ExtraModifier <= OMPC_LINEAR_unknown &&
                 "Unexpected linear modifier.");
          if (P.getActions().CheckOpenMPLinearModifier(
                  static_cast<OpenMPLinearClauseKind>(Data.ExtraModifier),
                  Data.DepLinMapLastLoc))
+8 −0
Original line number Diff line number Diff line
@@ -12418,6 +12418,8 @@ OMPClause *Sema::ActOnOpenMPVarListClause(
    Res = ActOnOpenMPFirstprivateClause(VarList, StartLoc, LParenLoc, EndLoc);
    break;
  case OMPC_lastprivate:
    assert(0 <= ExtraModifier && ExtraModifier <= OMPC_LASTPRIVATE_unknown &&
           "Unexpected lastprivate modifier.");
    Res = ActOnOpenMPLastprivateClause(
        VarList, static_cast<OpenMPLastprivateModifier>(ExtraModifier),
        DepLinMapLastLoc, ColonLoc, StartLoc, LParenLoc, EndLoc);
@@ -12441,6 +12443,8 @@ OMPClause *Sema::ActOnOpenMPVarListClause(
                                       ReductionOrMapperId);
    break;
  case OMPC_linear:
    assert(0 <= ExtraModifier && ExtraModifier <= OMPC_LINEAR_unknown &&
           "Unexpected linear modifier.");
    Res = ActOnOpenMPLinearClause(
        VarList, TailExpr, StartLoc, LParenLoc,
        static_cast<OpenMPLinearClauseKind>(ExtraModifier), DepLinMapLastLoc,
@@ -12460,11 +12464,15 @@ OMPClause *Sema::ActOnOpenMPVarListClause(
    Res = ActOnOpenMPFlushClause(VarList, StartLoc, LParenLoc, EndLoc);
    break;
  case OMPC_depend:
    assert(0 <= ExtraModifier && ExtraModifier <= OMPC_DEPEND_unknown &&
           "Unexpected depend modifier.");
    Res = ActOnOpenMPDependClause(
        static_cast<OpenMPDependClauseKind>(ExtraModifier), DepLinMapLastLoc,
        ColonLoc, VarList, StartLoc, LParenLoc, EndLoc);
    break;
  case OMPC_map:
    assert(0 <= ExtraModifier && ExtraModifier <= OMPC_MAP_unknown &&
           "Unexpected map modifier.");
    Res = ActOnOpenMPMapClause(
        MapTypeModifiers, MapTypeModifiersLoc, ReductionOrMapperIdScopeSpec,
        ReductionOrMapperId, static_cast<OpenMPMapClauseKind>(ExtraModifier),