-
Notifications
You must be signed in to change notification settings - Fork 50
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
libc: add const-correct string.h overloads
libcxx provides const-correct overloads for a few string.h functions. These overloads use clang's enable_if attribute, so they're preferred over our FORTIFY'ed equivalents. This weakens _FORTIFY_SOURCE=2 when used with some of these functions, since clang needs to see __pass_object_size in order to pass an accurate result for __builtin_object_size(s, 1) at a callsite. Since those functions don't have __pass_object_size on their params, clang can't do that. This makes LLVM lower the __builtin_object_size calls, which means we get the same result as __builtin_object_size(s, 0). We have to provide all of the overloads in Bionic, since enable_if is only used to disambiguate overloads with (otherwise) the same type. In other words: // overload 1 char *strchr(const char *, int s) __attribute__((enable_if(1, ""))); // overload 2 char *strchr(char *, int s); void foo() { char cs[1] = {}; strchr(static_cast<const char *>(cs), '\0'); // calls overload #1. strchr(cs, '\0'); // calls overload #2. } Bug: 34747525 Test: m checkbuild on bullhead internal master + AOSP. vts -m BionicUnitTests passes on both. Surprisingly, the only code that this seems to break is contained in Bionic. Change-Id: Ie406f42fb3d1c5bf940dc857889876fc39b57c90
- Loading branch information
1 parent
07807a1
commit bd3d208
Showing
6 changed files
with
108 additions
and
14 deletions.
There are no files selected for viewing
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
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
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
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
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
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