2017-09-20 12:18:04 +02:00
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
/*
* This file is part of the LibreOffice project .
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2.0 . If a copy of the MPL was not distributed with this
* file , You can obtain one at http : //mozilla.org/MPL/2.0/.
*/
# include <exception>
extern int foo ( ) ;
2017-11-07 23:27:54 +01:00
extern int bar ( int = 0 ) ;
2017-09-28 10:33:09 +02:00
class Class { } ;
2017-09-20 12:18:04 +02:00
2017-09-28 10:33:09 +02:00
void top1 ( ) {
2017-09-20 12:18:04 +02:00
if ( foo ( ) = = 1 ) { // expected-note {{if condition here [loplugin:flatten]}}
2017-10-06 10:44:29 +02:00
foo ( ) ;
} else {
throw std : : exception ( ) ; // expected-error {{unconditional throw in else branch, rather invert the condition, throw early, and flatten the normal case [loplugin:flatten]}}
}
// no warning expected
if ( foo ( ) = = 1 ) {
2017-09-28 10:33:09 +02:00
Class aClass ;
( void ) aClass ;
2017-09-20 12:18:04 +02:00
} else {
2017-10-06 10:44:29 +02:00
throw std : : exception ( ) ;
2017-09-20 12:18:04 +02:00
}
2017-09-28 10:33:09 +02:00
}
void top2 ( ) {
if ( foo ( ) = = 2 ) {
throw std : : exception ( ) ; // expected-error {{unconditional throw in then branch, just flatten the else [loplugin:flatten]}}
2017-10-06 10:44:29 +02:00
} else {
foo ( ) ;
}
// no warning expected
if ( foo ( ) = = 2 ) {
throw std : : exception ( ) ;
2017-09-28 10:33:09 +02:00
} else {
Class aClass ;
( void ) aClass ;
}
}
2017-09-20 12:18:04 +02:00
2017-09-28 10:33:09 +02:00
void top3 ( ) {
// no warning expected
if ( foo ( ) = = 2 ) {
throw std : : exception ( ) ;
} else {
Class aClass ;
( void ) aClass ;
}
int x = 1 ;
( void ) x ;
}
void top4 ( ) {
// no warning expected
if ( foo ( ) = = 2 ) {
Class aClass ;
( void ) aClass ;
} else {
throw std : : exception ( ) ;
}
int x = 1 ;
( void ) x ;
}
2017-09-30 10:40:32 +02:00
void top5 ( ) {
# if 1
if ( foo ( ) = = 2 ) {
2017-09-30 22:39:33 +02:00
if ( foo ( ) = = 3 ) { // expected-note {{if condition here [loplugin:flatten]}}
bar ( ) ;
} else {
throw std : : exception ( ) ; // expected-error {{unconditional throw in else branch, rather invert the condition, throw early, and flatten the normal case [loplugin:flatten]}}
}
2017-09-30 10:40:32 +02:00
} else
# endif
2017-09-30 22:39:33 +02:00
throw std : : exception ( ) ; // no warning expected
2017-09-30 10:40:32 +02:00
}
2017-09-28 10:33:09 +02:00
int main ( ) {
2017-09-20 12:18:04 +02:00
// no warning expected
if ( bar ( ) = = 3 ) {
throw std : : exception ( ) ;
} else {
throw std : : exception ( ) ;
}
}
2017-10-06 10:44:29 +02:00
void top6 ( ) {
// no warning expected
if ( foo ( ) = = 2 ) {
Class aClass ;
( void ) aClass ;
} else if ( foo ( ) = = 2 ) {
Class aClass ;
( void ) aClass ;
} else {
throw std : : exception ( ) ;
}
int x = 1 ;
( void ) x ;
}
2017-11-07 23:27:54 +01:00
void top7 ( ) {
// no warning expected
if ( foo ( ) = = 1 ) {
throw std : : exception ( ) ;
} else if ( foo ( ) = = 2 ) {
throw std : : exception ( ) ;
} else {
throw std : : exception ( ) ;
}
}
void top8 ( ) {
if ( foo ( ) = = 1 ) {
if ( foo ( ) = = 2 ) {
throw std : : exception ( ) ; // expected-error {{unconditional throw in then branch, just flatten the else [loplugin:flatten]}}
} else {
bar ( ) ;
}
} else if ( foo ( ) = = 2 ) {
bar ( 1 ) ;
} else {
bar ( 2 ) ;
}
}
2017-09-20 12:18:04 +02:00
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */