summaryrefslogtreecommitdiff
path: root/src/shared/cplusplus/CheckSpecifier.cpp
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2009-02-10 17:20:47 +0100
committerThorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com>2009-02-10 17:22:16 +0100
commit146a534932b66af491f6cce014095a480d1790b3 (patch)
tree4a1665aecd008ff2dbe4831044a5b8214f231cf4 /src/shared/cplusplus/CheckSpecifier.cpp
parentc721304a4731a91a9e143a54d2ab3ef89526e05e (diff)
downloadqt-creator-146a534932b66af491f6cce014095a480d1790b3.tar.gz
Fixed all crashes due to refencing undefined types
Introduced UndefinedType class to replace null pointer. Done with Roberto Raggi
Diffstat (limited to 'src/shared/cplusplus/CheckSpecifier.cpp')
-rw-r--r--src/shared/cplusplus/CheckSpecifier.cpp24
1 files changed, 13 insertions, 11 deletions
diff --git a/src/shared/cplusplus/CheckSpecifier.cpp b/src/shared/cplusplus/CheckSpecifier.cpp
index 20a3662e7b..fddfd52568 100644
--- a/src/shared/cplusplus/CheckSpecifier.cpp
+++ b/src/shared/cplusplus/CheckSpecifier.cpp
@@ -200,30 +200,30 @@ bool CheckSpecifier::visit(SimpleSpecifierAST *ast)
break;
case T_CHAR:
- if (_fullySpecifiedType.type())
+ if (_fullySpecifiedType)
translationUnit()->error(ast->specifier_token,
"duplicate data type in declaration");
_fullySpecifiedType.setType(control()->integerType(IntegerType::Char));
break;
case T_WCHAR_T:
- if (_fullySpecifiedType.type())
+ if (_fullySpecifiedType)
translationUnit()->error(ast->specifier_token,
"duplicate data type in declaration");
_fullySpecifiedType.setType(control()->integerType(IntegerType::WideChar));
break;
case T_BOOL:
- if (_fullySpecifiedType.type())
+ if (_fullySpecifiedType)
translationUnit()->error(ast->specifier_token,
"duplicate data type in declaration");
_fullySpecifiedType.setType(control()->integerType(IntegerType::Bool));
break;
case T_SHORT:
- if (Type *tp = _fullySpecifiedType.type()) {
+ if (_fullySpecifiedType) {
IntegerType *intType = control()->integerType(IntegerType::Int);
- if (tp != intType)
+ if (_fullySpecifiedType.type() != intType)
translationUnit()->error(ast->specifier_token,
"duplicate data type in declaration");
}
@@ -231,7 +231,8 @@ bool CheckSpecifier::visit(SimpleSpecifierAST *ast)
break;
case T_INT:
- if (Type *tp = _fullySpecifiedType.type()) {
+ if (_fullySpecifiedType) {
+ Type *tp = _fullySpecifiedType.type();
IntegerType *shortType = control()->integerType(IntegerType::Short);
IntegerType *longType = control()->integerType(IntegerType::Long);
IntegerType *longLongType = control()->integerType(IntegerType::LongLong);
@@ -244,7 +245,8 @@ bool CheckSpecifier::visit(SimpleSpecifierAST *ast)
break;
case T_LONG:
- if (Type *tp = _fullySpecifiedType.type()) {
+ if (_fullySpecifiedType) {
+ Type *tp = _fullySpecifiedType.type();
IntegerType *intType = control()->integerType(IntegerType::Int);
IntegerType *longType = control()->integerType(IntegerType::Long);
FloatType *doubleType = control()->floatType(FloatType::Double);
@@ -263,16 +265,16 @@ bool CheckSpecifier::visit(SimpleSpecifierAST *ast)
break;
case T_FLOAT:
- if (_fullySpecifiedType.type())
+ if (_fullySpecifiedType)
translationUnit()->error(ast->specifier_token,
"duplicate data type in declaration");
_fullySpecifiedType.setType(control()->floatType(FloatType::Float));
break;
case T_DOUBLE:
- if (Type *tp = _fullySpecifiedType.type()) {
+ if (_fullySpecifiedType) {
IntegerType *longType = control()->integerType(IntegerType::Long);
- if (tp == longType) {
+ if (_fullySpecifiedType.type() == longType) {
_fullySpecifiedType.setType(control()->floatType(FloatType::LongDouble));
break;
}
@@ -283,7 +285,7 @@ bool CheckSpecifier::visit(SimpleSpecifierAST *ast)
break;
case T_VOID:
- if (_fullySpecifiedType.type())
+ if (_fullySpecifiedType)
translationUnit()->error(ast->specifier_token,
"duplicate data type in declaration");
_fullySpecifiedType.setType(control()->voidType());