r183575 - Revert "Properly consider the range of enum for range comparisons in C mode"
Rafael EspĂndola
rafael.espindola at gmail.com
Fri Jun 7 15:11:36 PDT 2013
please also add the testcase the original patch was breaking.
Cheers,
Rafael
On 7 June 2013 18:07, David Majnemer <david.majnemer at gmail.com> wrote:
> Author: majnemer
> Date: Fri Jun 7 17:07:20 2013
> New Revision: 183575
>
> URL: http://llvm.org/viewvc/llvm-project?rev=183575&view=rev
> Log:
> Revert "Properly consider the range of enum for range comparisons in C mode"
>
> The approach r183084 took was wrong, back it out.
>
> Modified:
> cfe/trunk/lib/Sema/SemaChecking.cpp
> cfe/trunk/test/Sema/outof-range-constant-compare.c
>
> Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=183575&r1=183574&r2=183575&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaChecking.cpp Fri Jun 7 17:07:20 2013
> @@ -4020,23 +4020,20 @@ struct IntRange {
> if (const ComplexType *CT = dyn_cast<ComplexType>(T))
> T = CT->getElementType().getTypePtr();
>
> + // For enum types, use the known bit width of the enumerators.
> if (const EnumType *ET = dyn_cast<EnumType>(T)) {
> - if (C.getLangOpts().CPlusPlus) {
> - // For enum types, use the known bit width of the enumerators.
> - EnumDecl *Enum = ET->getDecl();
> - if (!Enum->isCompleteDefinition())
> - return IntRange(C.getIntWidth(QualType(T, 0)), false);
> + EnumDecl *Enum = ET->getDecl();
> + if (!Enum->isCompleteDefinition())
> + return IntRange(C.getIntWidth(QualType(T, 0)), false);
>
> - unsigned NumPositive = Enum->getNumPositiveBits();
> - unsigned NumNegative = Enum->getNumNegativeBits();
> + unsigned NumPositive = Enum->getNumPositiveBits();
> + unsigned NumNegative = Enum->getNumNegativeBits();
>
> - if (NumNegative == 0)
> - return IntRange(NumPositive, true/*NonNegative*/);
> - else
> - return IntRange(std::max(NumPositive + 1, NumNegative),
> - false/*NonNegative*/);
> - } else
> - T = C.getCanonicalType(ET->getDecl()->getIntegerType().getTypePtr());
> + if (NumNegative == 0)
> + return IntRange(NumPositive, true/*NonNegative*/);
> + else
> + return IntRange(std::max(NumPositive + 1, NumNegative),
> + false/*NonNegative*/);
> }
>
> const BuiltinType *BT = cast<BuiltinType>(T);
>
> Modified: cfe/trunk/test/Sema/outof-range-constant-compare.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/outof-range-constant-compare.c?rev=183575&r1=183574&r2=183575&view=diff
> ==============================================================================
> --- cfe/trunk/test/Sema/outof-range-constant-compare.c (original)
> +++ cfe/trunk/test/Sema/outof-range-constant-compare.c Fri Jun 7 17:07:20 2013
> @@ -147,11 +147,3 @@ int main()
>
> return 1;
> }
> -
> -typedef enum {
> - alpha=0, bravo, charlie, delta, echo
> -} named_t;
> -
> -static int bar(named_t foo) {
> - return foo > 42;
> -}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list