Skip to content

Commit ff8060a

Browse files
committed
[clang][NFC] Convert Sema::AssignConvertType to scoped enum
1 parent 40edb37 commit ff8060a

File tree

7 files changed

+278
-269
lines changed

7 files changed

+278
-269
lines changed

clang/include/clang/Sema/Sema.h

Lines changed: 97 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -677,6 +677,100 @@ enum class VarArgKind {
677677
Invalid
678678
};
679679

680+
/// AssignConvertType - All of the 'assignment' semantic checks return this
681+
/// enum to indicate whether the assignment was allowed. These checks are
682+
/// done for simple assignments, as well as initialization, return from
683+
/// function, argument passing, etc. The query is phrased in terms of a
684+
/// source and destination type.
685+
enum class AssignConvertType {
686+
/// Compatible - the types are compatible according to the standard.
687+
Compatible,
688+
689+
/// CompatibleVoidPtrToNonVoidPtr - The types are compatible in C because
690+
/// a void * can implicitly convert to another pointer type, which we
691+
/// differentiate for better diagnostic behavior.
692+
CompatibleVoidPtrToNonVoidPtr,
693+
694+
/// PointerToInt - The assignment converts a pointer to an int, which we
695+
/// accept as an extension.
696+
PointerToInt,
697+
698+
/// IntToPointer - The assignment converts an int to a pointer, which we
699+
/// accept as an extension.
700+
IntToPointer,
701+
702+
/// FunctionVoidPointer - The assignment is between a function pointer and
703+
/// void*, which the standard doesn't allow, but we accept as an extension.
704+
FunctionVoidPointer,
705+
706+
/// IncompatiblePointer - The assignment is between two pointers types that
707+
/// are not compatible, but we accept them as an extension.
708+
IncompatiblePointer,
709+
710+
/// IncompatibleFunctionPointer - The assignment is between two function
711+
/// pointers types that are not compatible, but we accept them as an
712+
/// extension.
713+
IncompatibleFunctionPointer,
714+
715+
/// IncompatibleFunctionPointerStrict - The assignment is between two
716+
/// function pointer types that are not identical, but are compatible,
717+
/// unless compiled with -fsanitize=cfi, in which case the type mismatch
718+
/// may trip an indirect call runtime check.
719+
IncompatibleFunctionPointerStrict,
720+
721+
/// IncompatiblePointerSign - The assignment is between two pointers types
722+
/// which point to integers which have a different sign, but are otherwise
723+
/// identical. This is a subset of the above, but broken out because it's by
724+
/// far the most common case of incompatible pointers.
725+
IncompatiblePointerSign,
726+
727+
/// CompatiblePointerDiscardsQualifiers - The assignment discards
728+
/// c/v/r qualifiers, which we accept as an extension.
729+
CompatiblePointerDiscardsQualifiers,
730+
731+
/// IncompatiblePointerDiscardsQualifiers - The assignment
732+
/// discards qualifiers that we don't permit to be discarded,
733+
/// like address spaces.
734+
IncompatiblePointerDiscardsQualifiers,
735+
736+
/// IncompatibleNestedPointerAddressSpaceMismatch - The assignment
737+
/// changes address spaces in nested pointer types which is not allowed.
738+
/// For instance, converting __private int ** to __generic int ** is
739+
/// illegal even though __private could be converted to __generic.
740+
IncompatibleNestedPointerAddressSpaceMismatch,
741+
742+
/// IncompatibleNestedPointerQualifiers - The assignment is between two
743+
/// nested pointer types, and the qualifiers other than the first two
744+
/// levels differ e.g. char ** -> const char **, but we accept them as an
745+
/// extension.
746+
IncompatibleNestedPointerQualifiers,
747+
748+
/// IncompatibleVectors - The assignment is between two vector types that
749+
/// have the same size, which we accept as an extension.
750+
IncompatibleVectors,
751+
752+
/// IntToBlockPointer - The assignment converts an int to a block
753+
/// pointer. We disallow this.
754+
IntToBlockPointer,
755+
756+
/// IncompatibleBlockPointer - The assignment is between two block
757+
/// pointers types that are not compatible.
758+
IncompatibleBlockPointer,
759+
760+
/// IncompatibleObjCQualifiedId - The assignment is between a qualified
761+
/// id type and something else (that is incompatible with it). For example,
762+
/// "id <XXX>" = "Foo *", where "Foo *" doesn't implement the XXX protocol.
763+
IncompatibleObjCQualifiedId,
764+
765+
/// IncompatibleObjCWeakRef - Assigning a weak-unavailable object to an
766+
/// object with __weak qualifier.
767+
IncompatibleObjCWeakRef,
768+
769+
/// Incompatible - We reject this conversion outright, it is invalid to
770+
/// represent it in the AST.
771+
Incompatible
772+
};
773+
680774
/// Sema - This implements semantic analysis and AST building for C.
681775
/// \nosubgrouping
682776
class Sema final : public SemaBase {
@@ -7768,107 +7862,13 @@ class Sema final : public SemaBase {
77687862
QualType UsualArithmeticConversions(ExprResult &LHS, ExprResult &RHS,
77697863
SourceLocation Loc, ArithConvKind ACK);
77707864

7771-
/// AssignConvertType - All of the 'assignment' semantic checks return this
7772-
/// enum to indicate whether the assignment was allowed. These checks are
7773-
/// done for simple assignments, as well as initialization, return from
7774-
/// function, argument passing, etc. The query is phrased in terms of a
7775-
/// source and destination type.
7776-
enum AssignConvertType {
7777-
/// Compatible - the types are compatible according to the standard.
7778-
Compatible,
7779-
7780-
/// CompatibleVoidPtrToNonVoidPtr - The types are compatible in C because
7781-
/// a void * can implicitly convert to another pointer type, which we
7782-
/// differentiate for better diagnostic behavior.
7783-
CompatibleVoidPtrToNonVoidPtr,
7784-
7785-
/// PointerToInt - The assignment converts a pointer to an int, which we
7786-
/// accept as an extension.
7787-
PointerToInt,
7788-
7789-
/// IntToPointer - The assignment converts an int to a pointer, which we
7790-
/// accept as an extension.
7791-
IntToPointer,
7792-
7793-
/// FunctionVoidPointer - The assignment is between a function pointer and
7794-
/// void*, which the standard doesn't allow, but we accept as an extension.
7795-
FunctionVoidPointer,
7796-
7797-
/// IncompatiblePointer - The assignment is between two pointers types that
7798-
/// are not compatible, but we accept them as an extension.
7799-
IncompatiblePointer,
7800-
7801-
/// IncompatibleFunctionPointer - The assignment is between two function
7802-
/// pointers types that are not compatible, but we accept them as an
7803-
/// extension.
7804-
IncompatibleFunctionPointer,
7805-
7806-
/// IncompatibleFunctionPointerStrict - The assignment is between two
7807-
/// function pointer types that are not identical, but are compatible,
7808-
/// unless compiled with -fsanitize=cfi, in which case the type mismatch
7809-
/// may trip an indirect call runtime check.
7810-
IncompatibleFunctionPointerStrict,
7811-
7812-
/// IncompatiblePointerSign - The assignment is between two pointers types
7813-
/// which point to integers which have a different sign, but are otherwise
7814-
/// identical. This is a subset of the above, but broken out because it's by
7815-
/// far the most common case of incompatible pointers.
7816-
IncompatiblePointerSign,
7817-
7818-
/// CompatiblePointerDiscardsQualifiers - The assignment discards
7819-
/// c/v/r qualifiers, which we accept as an extension.
7820-
CompatiblePointerDiscardsQualifiers,
7821-
7822-
/// IncompatiblePointerDiscardsQualifiers - The assignment
7823-
/// discards qualifiers that we don't permit to be discarded,
7824-
/// like address spaces.
7825-
IncompatiblePointerDiscardsQualifiers,
7826-
7827-
/// IncompatibleNestedPointerAddressSpaceMismatch - The assignment
7828-
/// changes address spaces in nested pointer types which is not allowed.
7829-
/// For instance, converting __private int ** to __generic int ** is
7830-
/// illegal even though __private could be converted to __generic.
7831-
IncompatibleNestedPointerAddressSpaceMismatch,
7832-
7833-
/// IncompatibleNestedPointerQualifiers - The assignment is between two
7834-
/// nested pointer types, and the qualifiers other than the first two
7835-
/// levels differ e.g. char ** -> const char **, but we accept them as an
7836-
/// extension.
7837-
IncompatibleNestedPointerQualifiers,
7838-
7839-
/// IncompatibleVectors - The assignment is between two vector types that
7840-
/// have the same size, which we accept as an extension.
7841-
IncompatibleVectors,
7842-
7843-
/// IntToBlockPointer - The assignment converts an int to a block
7844-
/// pointer. We disallow this.
7845-
IntToBlockPointer,
7846-
7847-
/// IncompatibleBlockPointer - The assignment is between two block
7848-
/// pointers types that are not compatible.
7849-
IncompatibleBlockPointer,
7850-
7851-
/// IncompatibleObjCQualifiedId - The assignment is between a qualified
7852-
/// id type and something else (that is incompatible with it). For example,
7853-
/// "id <XXX>" = "Foo *", where "Foo *" doesn't implement the XXX protocol.
7854-
IncompatibleObjCQualifiedId,
7855-
7856-
/// IncompatibleObjCWeakRef - Assigning a weak-unavailable object to an
7857-
/// object with __weak qualifier.
7858-
IncompatibleObjCWeakRef,
7859-
7860-
/// Incompatible - We reject this conversion outright, it is invalid to
7861-
/// represent it in the AST.
7862-
Incompatible
7863-
};
7864-
78657865
bool IsAssignConvertCompatible(AssignConvertType ConvTy) {
78667866
switch (ConvTy) {
78677867
default:
78687868
return false;
7869-
case Compatible:
7870-
case CompatiblePointerDiscardsQualifiers:
7871-
case CompatibleVoidPtrToNonVoidPtr:
7869+
case AssignConvertType::Compatible:
7870+
case AssignConvertType::CompatiblePointerDiscardsQualifiers:
7871+
case AssignConvertType::CompatibleVoidPtrToNonVoidPtr:
78727872
return true;
78737873
}
78747874
llvm_unreachable("impossible");

clang/lib/Sema/SemaARM.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -766,7 +766,7 @@ bool SemaARM::CheckNeonBuiltinFunctionCall(const TargetInfo &TI,
766766
if (HasConstPtr)
767767
EltTy = EltTy.withConst();
768768
QualType LHSTy = getASTContext().getPointerType(EltTy);
769-
Sema::AssignConvertType ConvTy;
769+
AssignConvertType ConvTy;
770770
ConvTy = SemaRef.CheckSingleAssignmentConstraints(LHSTy, RHS);
771771
if (RHS.isInvalid())
772772
return true;

0 commit comments

Comments
 (0)