Files
libreoffice/compilerplugins/clang/test/oncevar.cxx
Noel Grandin 9c2b43e86f improve oncevar loplugin
we look for any kind of scalar variable now that deserves to be inlined,
and we check for variables that cannot be inlined because they are being
passed by reference, or modified, or have their address taken

Change-Id: Ia744a180e91d1516140a1555d4514f6fa4de1c0b
Reviewed-on: https://gerrit.libreoffice.org/38966
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2017-06-20 07:49:45 +02:00

55 lines
2.4 KiB
C++

/* -*- 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 <rtl/ustring.hxx>
/*int foo() { return 1; }*/
void call_value(int); // expected-error {{extern prototype in main file without definition [loplugin:externandnotdefined]}}
void call_const_ref(int const &); // expected-error {{extern prototype in main file without definition [loplugin:externandnotdefined]}}
void call_ref(int &); // expected-error {{extern prototype in main file without definition [loplugin:externandnotdefined]}}
void call_value(OUString); // expected-error {{extern prototype in main file without definition [loplugin:externandnotdefined]}}
void call_const_ref(OUString const &); // expected-error {{extern prototype in main file without definition [loplugin:externandnotdefined]}}
void call_ref(OUString &); // expected-error {{extern prototype in main file without definition [loplugin:externandnotdefined]}}
int main() {
/* TODO
int i;
int x = 2;
if ( (i = foo()) == 0 ) {
x = 1;
}
*/
int i1 = 2; // expected-error {{var used only once, should be inlined or declared const [loplugin:oncevar]}}
call_value(i1); // expected-note {{used here [loplugin:oncevar]}}
int i2 = 2; // expected-error {{var used only once, should be inlined or declared const [loplugin:oncevar]}}
call_const_ref(i2); // expected-note {{used here [loplugin:oncevar]}}
// don't expect warnings here
int i3;
call_ref(i3);
int const i4 = 2;
call_value(i4);
OUString s1("xxx"); // expected-error {{var used only once, should be inlined or declared const [loplugin:oncevar]}}
call_value(s1); // expected-note {{used here [loplugin:oncevar]}}
OUString s2("xxx"); // expected-error {{var used only once, should be inlined or declared const [loplugin:oncevar]}}
call_const_ref(s2); // expected-note {{used here [loplugin:oncevar]}}
// don't expect warnings here
OUString s3;
call_ref(s3);
OUString const s4("xxx");
call_value(s4);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */