summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaChecking.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-02-22 02:45:07 +0000
committerDouglas Gregor <dgregor@apple.com>2011-02-22 02:45:07 +0000
commita78f193e7ecf512dd0953acf1626d9c4f4478f2a (patch)
tree17fdbf502a968bafd961ba28bd48f45fd11c9635 /clang/lib/Sema/SemaChecking.cpp
parentc1b7775e0fea63dbac1857b4e153b42bc7382a74 (diff)
downloadbcm5719-llvm-a78f193e7ecf512dd0953acf1626d9c4f4478f2a.tar.gz
bcm5719-llvm-a78f193e7ecf512dd0953acf1626d9c4f4478f2a.zip
Warn about implicit conversions between values of different, named
enumeration types. Fixes <rdar://problem/8559831>. llvm-svn: 126183
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
-rw-r--r--clang/lib/Sema/SemaChecking.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index 556665483e6..bb5ef7f9b39 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -2861,6 +2861,17 @@ void CheckImplicitConversion(Sema &S, Expr *E, QualType T,
return DiagnoseImpCast(S, E, T, CC, DiagID);
}
+ // Diagnose conversions between different enumeration types.
+ if (const EnumType *SourceEnum = Source->getAs<EnumType>())
+ if (const EnumType *TargetEnum = Target->getAs<EnumType>())
+ if ((SourceEnum->getDecl()->getIdentifier() ||
+ SourceEnum->getDecl()->getTypedefForAnonDecl()) &&
+ (TargetEnum->getDecl()->getIdentifier() ||
+ TargetEnum->getDecl()->getTypedefForAnonDecl()) &&
+ SourceEnum != TargetEnum)
+ return DiagnoseImpCast(S, E, T, CC,
+ diag::warn_impcast_different_enum_types);
+
return;
}
OpenPOWER on IntegriCloud