clang/lib/Sema/SemaDeclAttr.cpp
static void handleIntelFPGABankBitsAttr(Sema &S, Decl *D, const ParsedAttr &A) {
  checkForDuplicateAttribute<IntelFPGABankBitsAttr>(S, D, A);

  if (!checkAttributeAtLeastNumArgs(S, A, 1))
    return;

  if (checkAttrMutualExclusion<IntelFPGARegisterAttr>(S, D, A))
    return;

  SmallVector<Expr *, 8> Args;
  for (unsigned I = 0; I < A.getNumArgs(); ++I) {
    Args.push_back(A.getArgAsExpr(I));
  }

  S.CheckDeprecatedSYCLAttributeSpelling(A);

  S.AddIntelFPGABankBitsAttr(D, A, Args.data(), Args.size());
}
/// Handle the bank_bits attribute.
/// This attribute accepts a list of values greater than zero.
/// This is incompatible with the register attribute.
/// The numbanks and bank_bits attributes are related. If numbanks exists
/// when handling bank_bits they are checked for consistency. If numbanks
/// hasn't been added yet an implicit one is added with the correct value.
/// If the user later adds a numbanks attribute the implicit one is removed.
/// The values must be consecutive values (i.e. 3,4,5 or 2,1).
Handle the bank_bits attribute.
This attribute accepts a list of values greater than zero.
This is incompatible with the register attribute.
The numbanks and bank_bits attributes are related. If numbanks exists
when handling bank_bits they are checked for consistency. If numbanks
hasn't been added yet an implicit one is added with the correct value.
If the user later adds a numbanks attribute the implicit one is removed.
The values must be consecutive values .
Handle the bank_bits attribute . This attribute accepts a list of values greater than zero . This is incompatible with the register attribute . The numbanks and bank_bits attributes are related . If numbanks exists when handling bank_bits they are checked for consistency . If numbanks hasn ' t been added yet an implicit one is added with the correct value . If the user later adds a numbanks attribute the implicit one is removed . The values must be consecutive values .
static void handleIntelFPGABankBitsAttr(Sema &S, Decl *D, const ParsedAttr &A) {
  checkForDuplicateAttribute<IntelFPGABankBitsAttr>(S, D, A);
  if (!checkAttributeAtLeastNumArgs(S, A, 1))
    return;
  if (checkAttrMutualExclusion<IntelFPGARegisterAttr>(S, D, A))
    return;
  SmallVector<Expr *, 8> Args;
  for (unsigned I = 0; I < A.getNumArgs(); ++I) {
    Args.push_back(A.getArgAsExpr(I));
  }
  S.CheckDeprecatedSYCLAttributeSpelling(A);
  S.AddIntelFPGABankBitsAttr(D, A, Args.data(), Args.size());
}
static void handleIntelFPGABankBitsAttr ( Sema & S , Decl * D , const ParsedAttr & A ) { checkForDuplicateAttribute < IntelFPGABankBitsAttr > ( S , D , A ) ; if ( ! checkAttributeAtLeastNumArgs ( S , A , 1 ) ) return ; if ( checkAttrMutualExclusion < IntelFPGARegisterAttr > ( S , D , A ) ) return ; SmallVector < Expr * , 8 > Args ; for ( unsigned I = 0 ; I < A . getNumArgs ( ) ; ++ I ) { Args . push_back ( A . getArgAsExpr ( I ) ) ; } S . CheckDeprecatedSYCLAttributeSpelling ( A ) ; S . AddIntelFPGABankBitsAttr ( D , A , Args . data ( ) , Args . size ( ) ) ; }
Handle the bank_bits attribute.
Handle the bank_bits attribute .