fix type of ?: operator. If one of the operator is void, the type should be void as well.
Please confirm this is safe
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51957 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index ecc1f2b..4673ae4 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -917,12 +917,14 @@
// C99 6.5.15p5: "If both operands have void type, the result has void type."
// The following || allows only one side to be void (a GCC-ism).
if (lexT->isVoidType() || rexT->isVoidType()) {
- if (!lexT->isVoidType())
+ if (!lexT->isVoidType()) {
Diag(rex->getLocStart(), diag::ext_typecheck_cond_one_void,
rex->getSourceRange());
+ return rexT.getUnqualifiedType();
+ }
if (!rexT->isVoidType())
Diag(lex->getLocStart(), diag::ext_typecheck_cond_one_void,
- lex->getSourceRange());
+ lex->getSourceRange());
return lexT.getUnqualifiedType();
}
// C99 6.5.15p6 - "if one operand is a null pointer constant, the result has