summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2008-01-18 02:25:57 +0000
committerAnders Carlsson <andersca@mac.com>2008-01-18 02:25:57 +0000
commit60bfc161a01e470792dd68906231a6bff77c73c0 (patch)
treed58a24bd16d4d415a46cc83966dcf536aab6db9b
parent159ee39f4d3382165e8374a6879850808509d827 (diff)
downloadbcm5719-llvm-60bfc161a01e470792dd68906231a6bff77c73c0.tar.gz
bcm5719-llvm-60bfc161a01e470792dd68906231a6bff77c73c0.zip
Assert that the type of the cast is equal to the _unqualified_ type of the subexpression. Fixes a problem spotted by Nuno Lopes.
llvm-svn: 46158
-rw-r--r--clang/CodeGen/CGExprAgg.cpp2
-rw-r--r--clang/test/CodeGen/struct.c9
2 files changed, 10 insertions, 1 deletions
diff --git a/clang/CodeGen/CGExprAgg.cpp b/clang/CodeGen/CGExprAgg.cpp
index 5836262175f..3781407f988 100644
--- a/clang/CodeGen/CGExprAgg.cpp
+++ b/clang/CodeGen/CGExprAgg.cpp
@@ -142,7 +142,7 @@ void AggExprEmitter::VisitImplicitCastExpr(ImplicitCastExpr *E)
QualType STy = E->getSubExpr()->getType().getCanonicalType();
QualType Ty = E->getType().getCanonicalType();
- assert(STy == Ty && "Implicit cast types must be equal");
+ assert(STy.getUnqualifiedType() == Ty && "Implicit cast types must be equal");
Visit(E->getSubExpr());
}
diff --git a/clang/test/CodeGen/struct.c b/clang/test/CodeGen/struct.c
index 8f9ecd6080a..be5917a3da9 100644
--- a/clang/test/CodeGen/struct.c
+++ b/clang/test/CodeGen/struct.c
@@ -127,3 +127,12 @@ void f11()
a1 = a2;
a2 = a1;
}
+
+/* Implicit casts (due to const) */
+void f12()
+{
+ struct _a a1;
+ const struct _a a2;
+
+ a1 = a2;
+} \ No newline at end of file
OpenPOWER on IntegriCloud