Home | History | Annotate | Download | only in unittest
      1 /*
      2   Copyright (C) 2008-2008 Google Inc
      3      opensource (at) google.com
      4 
      5   This program is free software; you can redistribute it and/or
      6   modify it under the terms of the GNU General Public License as
      7   published by the Free Software Foundation; either version 2 of the
      8   License, or (at your option) any later version.
      9 
     10   This program is distributed in the hope that it will be useful, but
     11   WITHOUT ANY WARRANTY; without even the implied warranty of
     12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13   General Public License for more details.
     14 
     15   You should have received a copy of the GNU General Public License
     16   along with this program; if not, write to the Free Software
     17   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
     18   02111-1307, USA.
     19 
     20   The GNU General Public License is contained in the file COPYING.
     21 */
     22 
     23 /* Author: Konstantin Serebryany <opensource (at) google.com>
     24 
     25  This file contains a set of unit tests for a data race detection tool.
     26 
     27  These tests can be compiled with pthreads (default) or
     28  with any other library that supports threads, locks, cond vars, etc.
     29 
     30 */
     31 
     32 #include "old_test_suite.h"
     33 #include "test_utils.h"
     34 
     35 #include <gtest/gtest.h>
     36 
     37 
     38 namespace OptIgnoreTests {  // {{{1 Test how the tool works with indirect calls to fun_r functions
     39 int GLOB = 0;
     40 
     41 void NOINLINE NotIgnoredRacey() {
     42   GLOB++;
     43 }
     44 
     45 void NOINLINE IntermediateJumpHereFunction() {
     46   NotIgnoredRacey();
     47   usleep(1);  // Prevent tail call optimization.
     48 }
     49 
     50 void NOINLINE DoTailCall() {
     51   IntermediateJumpHereFunction();  // This tail call should be optimized.
     52 }
     53 
     54 // Test that a function that is called using jump is ignored.
     55 TEST(IgnoreTests, DISABLED_TailCall) {
     56   MyThreadArray mta(DoTailCall, DoTailCall);
     57   mta.Start();
     58   mta.Join();
     59   usleep(1);
     60 }
     61 
     62 }
     63