diff options
author | Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com> | 2009-02-10 17:20:47 +0100 |
---|---|---|
committer | Thorbjørn Lindeijer <thorbjorn.lindeijer@nokia.com> | 2009-02-10 17:22:16 +0100 |
commit | 146a534932b66af491f6cce014095a480d1790b3 (patch) | |
tree | 4a1665aecd008ff2dbe4831044a5b8214f231cf4 /src/shared/cplusplus/CheckSpecifier.cpp | |
parent | c721304a4731a91a9e143a54d2ab3ef89526e05e (diff) | |
download | qt-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.cpp | 24 |
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()); |