New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix issue with C-code-compiled-as-C++ from 59e148d #70
Open
jnpkrn
wants to merge
1
commit into
lvc:master
Choose a base branch
from
jnpkrn:fix-cxx-c-combining
base: master
Could not load branches
Branch not found: {{ refName }}
Could not load tags
Nothing to show
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Said commit was meant to fix [Issue#64], but rather introduced new problem -- when "decltype(nullptr)" was observed (happens on transitive includes starting with standard C library headers, at least with newer stdlibc++ as this is how includes are treated by gcc when it's passed "-x c++-header"), the C-only-detection logic would short-circuit (or give up) early, leaving C++ compatibility measures off, and in turn, choking later on when valid C identifiers such as "new" are used somewhere in the headers of the C project at hand. This rather simplistic solution masks, item-wise, "decltype(nullptr)" expression consisting of otherwise C++ compatibility mangling eligible words, and restores them right after there's no danger this would happen to them, because they need to be preserved (empirically tested). [Issue#64] lvc#64 Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
jnpkrn
added a commit
to jnpkrn/libqb
that referenced
this pull request
Jan 10, 2018
1. ABICC >= 2 needs to be passed -cxx-incompatible switch because C is no longer a default for this tool (used to be vice versa), plus current version will stop choking on C vs. C++ (our C code with C++ compatibility wrapping being viewed from C++ perspective for the purpose of dumping the declared symbols, which somewhat conflicts with internal masking of the C++ keywords being used as valid C identifiers [yet some instances must not be masked here, see lvc/abi-compliance-checker#64) only if _also_ something like this is applied: lvc/abi-compliance-checker#70 2. since 20246f5, libqb.so no longer poses a symlink to the actual version-qualified shared library, but rather a standalone linker script, which confuses ABICC, so blacklist that file for the scanning purposes explicitly, together with referring to the library through it's basic version qualification (which alone, sadly, is not sufficient as ABICC proceeds to scan whole containing directory despite particular file is specified) Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
jnpkrn
added a commit
to jnpkrn/libqb
that referenced
this pull request
Jan 10, 2018
Primary trigger was the fact that "./check abi" (via build-aux/generate-docs) choked on that because abi-compliance-checker (ABICC) uses g++ to list symbols in header files playing hide-and-see regarding C identifiers otherwise conflicting with C++ keywords, which is moreover triggered only with -cxx-incompatible switch since ABICC 2.0 (and even then the respective code needs some further tweaking: lvc/abi-compliance-checker#70), and this switch wasn't historically applied. Anyway, this C++ perspective there was likely unprecedented even though libqb no doubt targets such compatiblity. To avoid its breakage within the public headers' scope in the future, arrange for checking it regularly alongside the "auto_check_header" tests (cf. make -C tests check-headers). Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
jnpkrn
added a commit
to jnpkrn/libqb
that referenced
this pull request
Jan 10, 2018
1. ABICC >= 2 needs to be passed -cxx-incompatible switch because C is no longer a default for this tool (used to be vice versa), plus current version will stop choking on C vs. C++ (our C code with C++ compatibility wrapping being viewed from C++ perspective for the purpose of dumping the declared symbols, which somewhat conflicts with internal masking of the C++ keywords being used as valid C identifiers [yet some instances must not be masked here, see lvc/abi-compliance-checker#64) only if _also_ something like this is applied: lvc/abi-compliance-checker#70 2. since 20246f5, libqb.so no longer poses a symlink to the actual version-qualified shared library, but rather a standalone linker script, which confuses ABICC, so blacklist that file for the scanning purposes explicitly, together with referring to the library through it's basic version qualification (which alone, sadly, is not sufficient as ABICC proceeds to scan whole containing directory despite particular file is specified) Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
jnpkrn
added a commit
to jnpkrn/libqb
that referenced
this pull request
Jan 11, 2018
1. ABICC >= 2 needs to be passed -cxx-incompatible switch because C is no longer a default for this tool (used to be vice versa), plus current version will stop choking on C vs. C++ (our C code with C++ compatibility wrapping being viewed from C++ perspective for the purpose of dumping the declared symbols, which somewhat conflicts with internal masking of the C++ keywords being used as valid C identifiers [yet some instances must not be masked here, see lvc/abi-compliance-checker#64) only if _also_ something like this is applied: lvc/abi-compliance-checker#70 2. since 20246f5, libqb.so no longer poses a symlink to the actual version-qualified shared library, but rather a standalone linker script, which confuses ABICC, so blacklist that file for the scanning purposes explicitly, together with referring to the library through it's basic version qualification (which alone, sadly, is not sufficient as ABICC proceeds to scan whole containing directory despite particular file is specified) Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
jnpkrn
added a commit
to jnpkrn/libqb
that referenced
this pull request
Jan 11, 2018
Primary trigger was the fact that "./check abi" (via build-aux/generate-docs) choked on that because abi-compliance-checker (ABICC) uses g++ to list symbols in header files playing hide-and-see regarding C identifiers otherwise conflicting with C++ keywords, which is moreover triggered only with -cxx-incompatible switch since ABICC 2.0 (and even then the respective code needs some further tweaking: lvc/abi-compliance-checker#70), and this switch wasn't historically applied. Anyway, this C++ perspective there was likely unprecedented even though libqb no doubt targets such compatiblity. To avoid its breakage within the public headers' scope in the future, arrange for checking it regularly alongside the "auto_check_header" tests (cf. make -C tests check-headers). Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
chrissie-c
added a commit
to ClusterLabs/libqb
that referenced
this pull request
Sep 25, 2018
* doc: qbarray.h: fix garbled Doxygen markup * build: follow-up for and fine-tuning of a rushed 6d62b64 commit (It made a service as-was, but being afforded more time, this would have accompanied that commit right away, for better understanding, brevity and uniformity.) * build: prune superfluous Makefile declarations within tests directory There was a significant redundancy wrt. build flags and EXTRA_DIST assignment (the latter become redundant as of f6e4042 at latest) spread all over the place (vivat copy&paste). Also, in one instance, CPPFLAGS (used) was confused with CFLAGS (meant). * maint: check abi: fix two issues with abi-compliance-checker/libstdc++ 1. ABICC >= 2 needs to be passed -cxx-incompatible switch because C is no longer a default for this tool (used to be vice versa), plus current version will stop choking on C vs. C++ (our C code with C++ compatibility wrapping being viewed from C++ perspective for the purpose of dumping the declared symbols, which somewhat conflicts with internal masking of the C++ keywords being used as valid C identifiers [yet some instances must not be masked here, see lvc/abi-compliance-checker#64) only if _also_ something like this is applied: lvc/abi-compliance-checker#70 2. since 20246f5, libqb.so no longer poses a symlink to the actual version-qualified shared library, but rather a standalone linker script, which confuses ABICC, so blacklist that file for the scanning purposes explicitly, together with referring to the library through it's basic version qualification (which alone, sadly, is not sufficient as ABICC proceeds to scan whole containing directory despite particular file is specified) * maint: check abi: switch to abi-dumper for creating "ABI dumps" Beside avoiding issues with abi-compliance-checker in the role of ABI dumps producer (see the preceding commit), it also seems to generate more accurate picture (maybe because it expressly requires compiling with debugging information requested). * Low: qblist.h: fix incompatibility with C++ & check it regularly * tests: check_list.c: start zeroing in on the gaps in tests' coverage * tests: print_ver: make preprocessor emit "note" rather than warning IIRC, Chrissie asked about this around inclusion of the test at hand, and it seemed there was no way but to emit a warning to get something output at all. Now it turns wrong, and moreover, we make the code not fixed on GCC specific pragmas, with a bit of luck, "#pragma message" approach is adopted more widely by compilers. Signed-off-by: Jan Pokorný <jpokorny@redhat.com> * Replace ck_assert_uint_eq() with ck_assert_int_eq() it's not available in check 0.9 * Proper check for C++ compiler (from Fabio) * add (c) to copyright dates
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Said commit was meant to fix [Issue#64], but rather introduced new
problem -- when "decltype(nullptr)" was observed (happens on transitive
includes starting with standard C library headers, at least with newer
stdlibc++ as this is how includes are treated by gcc when it's passed
"-x c++-header"), the C-only-detection logic would short-circuit (or
give up) early, leaving C++ compatibility measures off, and in turn,
choking later on when valid C identifiers such as "new" are used
somewhere in the headers of the C project at hand.
This rather simplistic solution masks, item-wise, "decltype(nullptr)"
expression consisting of otherwise C++ compatibility mangling eligible
words, and restores them right after there's no danger this would happen
to them, because they need to be preserved (empirically tested).
[Issue#64] #64