Bug 210855 - benchmarks/bonnie++ : use of volatile char messes up EOF comparison; more (armv6 with -mcpu=cortex-a7 for/on rpi2)
Summary: benchmarks/bonnie++ : use of volatile char messes up EOF comparison; more (ar...
Status: New
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: --- Affects Only Me
Assignee: Jun Kuriyama
URL: http://beefy8.nyi.freebsd.org/data/he...
Keywords:
Depends on:
Blocks:
 
Reported: 2016-07-05 20:56 UTC by Mark Millard
Modified: 2018-03-12 23:32 UTC (History)
2 users (show)

See Also:
bugzilla: maintainer-feedback? (kuriyama)


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Mark Millard 2016-07-05 20:56:55 UTC
The main report is from what the building compiler reported:

getc_putc.cpp:210:47: warning: comparison of constant -1 with expression of type 'volatile char' is always false [-Wtautological-constant-out-of-range-compare]
  TEST_FUNC_READ("getc()", if( (c = getc(fp)) == EOF), res[Getc]);
                               ~~~~~~~~~~~~~~ ^  ~~~
./getc_putc.h:26:31: note: expanded from macro 'TEST_FUNC_READ'
  TEST_FUNC("Reading", XNAME, XCODE, XRES)
                              ^~~~~
./getc_putc.h:13:5: note: expanded from macro 'TEST_FUNC'
    XCODE \
    ^~~~~
getc_putc.cpp:225:65: warning: comparison of constant -1 with expression of type 'volatile char' is always false [-Wtautological-constant-out-of-range-compare]
  TEST_FUNC_READ("getc_unlocked()", if( (c = getc_unlocked(fp)) == EOF), res[GetcUnlocked]);
                                        ~~~~~~~~~~~~~~~~~~~~~~~ ^  ~~~
./getc_putc.h:26:31: note: expanded from macro 'TEST_FUNC_READ'
  TEST_FUNC("Reading", XNAME, XCODE, XRES)
                              ^~~~~
./getc_putc.h:13:5: note: expanded from macro 'TEST_FUNC'
    XCODE \
    ^~~~~

getc_putc_helper.cpp:48:57: warning: comparison of constant -1 with expression of type 'volatile char' is always false [-Wtautological-constant-out-of-range-com
pare]
  TEST_FUNC_READ("getc() no thread", if( (c = getc(fp)) == EOF), res[1]);
                                         ~~~~~~~~~~~~~~ ^  ~~~
./getc_putc.h:26:31: note: expanded from macro 'TEST_FUNC_READ'
  TEST_FUNC("Reading", XNAME, XCODE, XRES)
                              ^~~~~
./getc_putc.h:13:5: note: expanded from macro 'TEST_FUNC'
    XCODE \
    ^~~~~



getc returns a wider type than char variants and signed even if char is not: it returns an int. This is part of enabling the EOF test protocol without reserving character values.



bon_io.cpp:161:76: warning: format specifies type 'long' but the argument has type 'off_t' (aka 'long long') [-Wformat]
    sprintf(m_buf, "Error in lseek to chunk %d(" OFF_T_PRINTF ")", offset, real_offset);
                                                                           ^~~~~~~~~~~


The width mismatch leads to big-endian vs. little-endian (vs. pdp-endian) issues. powerpc, for example, being big-endian but 32 bit could have problems with just the "high half" being used here.




Side notes:

bonnie++.cpp:709:57: warning: comparison of integers of different signs: 'unsigned int' and 'int' [-Wsign-compare]
  if(globals.ram && directory_size * MaxDataPerFile * 2 > (globals.ram << 10))
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~~~~~~~
Comment 1 Mark Millard 2016-08-02 08:37:12 UTC
The build was of bonnie++-1.97_3 --which is still in place as of /usr/ports/ -r419343 .
Comment 2 Mark Linimon freebsd_committer freebsd_triage 2017-02-03 12:56:24 UTC
This error is still seen as of 20170128, although the port does build.
Comment 3 w.schwarzenfeld freebsd_triage 2018-03-12 23:32:39 UTC
ping!