Skip to content
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

8313396: Portable implementation of FORBID_C_FUNCTION and ALLOW_C_FUNCTION #22890

Closed
wants to merge 15 commits into from

Conversation

kimbarrett
Copy link

@kimbarrett kimbarrett commented Dec 29, 2024

Please review this change to how HotSpot prevents the use of certain C library
functions (e.g. poisons references to those functions), while permitting a
subset to be used in restricted circumstances. Reasons for poisoning a
function include it being considered obsolete, or a security concern, or there
is a HotSpot function (typically in the os:: namespace) providing similar
functionality that should be used instead.

The old mechanism, based on -Wattribute-warning and the associated attribute,
only worked for gcc. (Clang's implementation differs in an important way from
gcc, which is the subject of a clang bug that has been open for years. MSVC
doesn't provide a similar mechanism.) It also had problems with LTO, due to a
gcc bug.

The new mechanism is based on deprecation warnings, using [[deprecated]]
attributes. We redeclare or forward declare the functions we want to prevent
use of as being deprecated. This relies on deprecation warnings being
enabled, which they already are in our build configuration. All of our
supported compilers support the [[deprecated]] attribute.

Another benefit of using deprecation warnings rather than warning attributes
is the time when the check is performed. Warning attributes are checked only
if the function is referenced after all optimizations have been performed.
Deprecation is checked during initial semantic analysis. That's better for
our purposes here. (This is also part of why gcc LTO has problems with the
old mechanism, but not the new.)

Adding these redeclarations or forward declarations isn't as simple as
expected, due to differences between the various compilers. We hide the
differences behind a set of macros, FORBID_C_FUNCTION and related macros. See
the compiler-specific parts of those macros for details.

In some situations we need to allow references to these poisoned functions.

One common case is where our poisoning is visible to some 3rd party code we
don't want to modify. This is typically 3rd party headers included in HotSpot
code, such as from Google Test or the C++ Standard Library. For these the
BEGIN/END_ALLOW_FORBIDDEN_FUNCTIONS pair of macros are used demark the context
where such references are permitted.

Some of the poisoned functions are needed to implement associated HotSpot os::
functions, or in other similarly restricted contexts. For these, a wrapper
function is provided that calls the poisoned function with the warning
suppressed. These wrappers are defined in the permit_forbidden_functions
namespace, and called using the qualified name. This makes the use of these
functions stand out, suggesting they need careful scrutiny in code reviews and
the like. There are several benefits to this approach vs the old
ALLOW_C_FUNCTION macro. We can centralize the set of such functions. The
syntax for use is simpler (there were syntactic bugs with the old mechanism
that weren't always noticed for a while). The permitted reference is explicit;
there can't be an ALLOW_C_FUNCTION use that isn't actually needed.

Testing:
mach5 tier1-3, which includes various build variants such as slowdebug.
GHA sanity tests
Manual testing for warnings for direct calls to poisoned functions with all 3
compilers, and that the error messages look sane and helpful.

gcc:

<file/containing/reference>: In function 'void test_exit(int)':
<file/containing/reference>:<line>:<column>: error: 'void exit(int)' is deprecated: use os::exit [-Werror=deprecated-declarations]
   32 | void test_exit(int status) { return exit(status); }
      |                                     ~~~~^~~~~~~~

... and more stuff about the declaration ...

clang:

<file/containing/reference>:<line>:<column>: error: 'exit' is deprecated: use os::exit [-Werror,-Wdeprecated-declarations]
void test_exit(int status) { return exit(status); }
                                    ^

... and more stuff about the declaration ...

Visual Studio:

<file/containing/reference>(<line>): warning C4996: 'exit': use os::exit

Progress

  • Change must be properly reviewed (1 review required, with at least 1 Reviewer)
  • Change must not contain extraneous whitespace
  • Commit message must refer to an issue

Issue

  • JDK-8313396: Portable implementation of FORBID_C_FUNCTION and ALLOW_C_FUNCTION (Enhancement - P4)

Reviewers

Contributors

  • Martin Doerr <mdoerr@openjdk.org>

Reviewing

Using git

Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/22890/head:pull/22890
$ git checkout pull/22890

Update a local copy of the PR:
$ git checkout pull/22890
$ git pull https://git.openjdk.org/jdk.git pull/22890/head

Using Skara CLI tools

Checkout this PR locally:
$ git pr checkout 22890

View PR using the GUI difftool:
$ git pr show -t 22890

Using diff file

Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/22890.diff

Using Webrev

Link to Webrev Comment

@bridgekeeper
Copy link

bridgekeeper bot commented Dec 29, 2024

👋 Welcome back kbarrett! A progress list of the required criteria for merging this PR into master will be added to the body of your pull request. There are additional pull request commands available for use with this pull request.

@openjdk
Copy link

openjdk bot commented Dec 29, 2024

@kimbarrett This change now passes all automated pre-integration checks.

ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details.

After integration, the commit message for the final commit will be:

8313396: Portable implementation of FORBID_C_FUNCTION and ALLOW_C_FUNCTION

Co-authored-by: Martin Doerr <mdoerr@openjdk.org>
Reviewed-by: coleenp, dholmes, jsjolen

You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed.

At the time when this comment was updated there had been 38 new commits pushed to the master branch:

  • 6e43f48: 8346929: runtime/ClassUnload/DictionaryDependsTest.java fails with "Test failed: should be unloaded"
  • c885e59: 8346377: Properly support static builds for Windows
  • 0612636: 8347373: HTTP/2 flow control checks may count unprocessed data twice
  • 450636a: 8347274: Gatherers.mapConcurrent exhibits undesired behavior under variable delays, interruption, and finishing
  • 82e2a79: 8347006: LoadRangeNode floats above array guard in arraycopy intrinsic
  • 85ed78c: 8345185: Update jpackage to not include service bindings by default
  • 3b9732e: 8345471: Clean up compiler/intrinsics/sha/cli tests
  • ed0b555: 8344035: Replace predicate walking code in Loop Unswitching with a predicate visitor
  • b37f123: 8347407: [BACKOUT] C1/C2 don't handle allocation failure properly during initialization (RuntimeStub::new_runtime_stub fatal crash)
  • 1f7925c: 8347270: Remove unix_getParentPidAndTimings, unix_getChildren and unix_getCmdlineAndUserInfo
  • ... and 28 more: https://git.openjdk.org/jdk/compare/665c39c93109f9ba23f3d9555878c0fb565622df...master

As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details.

➡️ To integrate this PR with the above commit message to the master branch, type /integrate in a new comment.

@openjdk openjdk bot added the rfr Pull request is ready for review label Dec 29, 2024
@openjdk
Copy link

openjdk bot commented Dec 29, 2024

@kimbarrett The following labels will be automatically applied to this pull request:

  • graal
  • hotspot

When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing lists. If you would like to change these labels, use the /label pull request command.

@openjdk openjdk bot added graal graal-dev@openjdk.org hotspot hotspot-dev@openjdk.org labels Dec 29, 2024
@mlbridge
Copy link

mlbridge bot commented Dec 29, 2024

inline char* _fullpath(char* absPath, const char* relPath, size_t maxLength) {
return ::_fullpath(absPath, relPath, maxLength);
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we forbid the non Standard _snprintf too?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I'll add that. We should also technically be forbidding snprintf in favor of os::snprintf, but the difference
is pretty minuscule and there are a significant number of occurrences (125 today).

// these written-out wrapper functions. All that have been tried don't work
// for one reason or another.

namespace permit_forbidden_functions {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

permit_forbidden_functions sounds like a bit of a mouthful, maybe permit or permitted could work better in this case? If a call to free is to be permitted for example, permit::free(ptr) or permitted::free(ptr) sounds like "permit free", which conveys the intent pretty well, at least in my opinion

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is intentionally a mouthful. It's not intended to be used except in pretty rare situations, and it should stand
out as unusual and needing additional scrutiny by readers.

// noreturn attribute.
#ifdef __clang__
#define FORBID_NORETURN_C_FUNCTION(Signature, Alternative) \
FORBID_C_FUNCTION(__attribute__((__noreturn__)) Signature, Alternative)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

clang isn't the only one that makes a distinction between [[gnu::noreturn]] and [[noreturn]], gcc does too. It's a little strange that gcc doesn't face this same issue

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know what [[gnu::noreturn]] has to do with this? And in what way does gcc treat them differently?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[[gnu::noreturn]] is equal to __attribute__((noreturn)), I just referred to it as its scoped attribute form to make it clear that I wasn't talking about the Standard noreturn. There is funnily enough no documentation on how gcc treats them differently, I only learnt that it does while reading through gcc's source code one day

/* We used to treat C++11 noreturn attribute as equivalent to GNU's,
	 but no longer: we have to be able to tell [[noreturn]] and
	 __attribute__((noreturn)) apart.
	 Similarly for C++14 deprecated attribute, we need to emit extra
	 diagnostics for [[deprecated]] compared to [[gnu::deprecated]].  */
      /* C++17 fallthrough attribute is equivalent to GNU's.  */

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gcc does treat [[noreturn]] differently from [[gnu::noreturn]] /
attribute((noreturn)) when there is a preceding declaration that doesn't have
either kind of attribute. Compile this:

void frob(int);
//__attribute__((__noreturn__)) void frob(int);
//[[gnu::noreturn]] void frob(int);
[[noreturn]] void frob(int);

and you'll get an error:

error: function 'void frob(int)' declared '[[noreturn]]' but its first declaration was not

But uncomment either of the gnu-specific attributes and the error goes away.

C++14 7.6.3 "Noreturn attribute" says "The first declaration of a function
shall specify the noreturn attribute if any declaration of that function
specifies the noreturn attribute."

So without the declarations with gcc-specific attributes it errors, and that's
fine. The gcc-specific attributes never complained in that situation, and
continue to not complain, for backward compatibility. But other than that
error checking difference, the gcc-specific attributes seem to be treated as
equivalent to the standard attribute.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The difference between [[deprecated]] and [[gnu::deprecated]] is discussed here:
https://gcc.gnu.org/git/?p=gcc.git;a=commit;f=gcc/cp/parser.cc;h=cd647514a539943ade6461efbf056a7c3f4305c6
TL;DR - [[gnu::deprecated]] is allowed in more places than [[deprecated]].

@TheShermanTanker
Copy link
Contributor

Overall nice change, my only complaint is that to know which FORBID macro to use (IMPORTED, NORETURN, etc), you have to delve into implementation details to select the right one. That quickly becomes confusing. But unfortunately all the other approaches thus far have failed, so there aren't really any alternatives that are any better than this approach

@kimbarrett
Copy link
Author

Overall nice change, my only complaint is that to know which FORBID macro to use (IMPORTED, NORETURN, etc), you have to delve into implementation details to select the right one. That quickly becomes confusing. But unfortunately all the other approaches thus far have failed, so there aren't really any alternatives that are any better than this approach

Unfortunately, I couldn't find any way to determine whether IMPORTED or not
other than trial and error. One would think this might be documented
somewhere, but I didn't find anything.

Whether to use a NORETURN variant seems pretty straightforward. It would be
better if we could just say (for example)

FORBID_C_FUNCTION([[noreturn]] void exit(int), "use os::exit")

But that doesn't work both because of the clang weirdness, and because all
attributes must preceed the Windows dllimport spec.

We'll have to come up with something new if we ever want to forbid a function
that has other attributes that we need to mention. I'm hoping that won't
happen, but I haven't (yet) gone through any secure coding guidelines looking
for additional functions to forbid.

One option would be to have distinct arguments for the signature, like we do
for JNI/JVM entry points, e.g.

FORBID_C_FUNCTION(char*, strerror, (int))

with attributes at the end or something like that.

@@ -36,15 +37,15 @@ void MallocInfoDcmd::execute(DCmdSource source, TRAPS) {
#ifdef __GLIBC__
char* buf;
size_t size;
ALLOW_C_FUNCTION(::open_memstream, FILE* stream = ::open_memstream(&buf, &size);)
FILE* stream = ::open_memstream(&buf, &size);
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that open_memstream was never forbidden, so the ALLOW_C_FUNCTION was not needed.

if (stream == nullptr) {
_output->print_cr("Error: Could not call malloc_info(3)");
return;
}

int err = os::Linux::malloc_info(stream);
if (err == 0) {
ALLOW_C_FUNCTION(::fflush, fflush(stream);)
fflush(stream);
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that fflush was never forbidden, so the ALLOW_C_FUNCTION was not needed.

@@ -54,8 +55,8 @@ void MallocInfoDcmd::execute(DCmdSource source, TRAPS) {
} else {
ShouldNotReachHere();
}
ALLOW_C_FUNCTION(::fclose, ::fclose(stream);)
ALLOW_C_FUNCTION(::free, ::free(buf);)
::fclose(stream);
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that fclose was never forbidden, so the ALLOW_C_FUNCTION was not needed.

@TheRealMDoerr
Copy link
Contributor

Unfortunately, this doesn't compile on AIX:

globalDefinitions_gcc.hpp:42:
In file included from /opt/IBM/openxlC/17.1.1/bin/../include/c++/v1/stdlib.h:93:
/usr/include/stdlib.h:304:18: error: 'noreturn' attribute does not appear on the first declaration
        extern _NOTHROW(_NORETURN(void, exit), (int));
                        ^
/usr/include/comp_macros.h:30:35: note: expanded from macro '_NORETURN'
#define _NORETURN(_T, _F) _T _F [[noreturn]]
                                  ^
   ... (rest of output omitted)

@kimbarrett
Copy link
Author

Unfortunately, this doesn't compile on AIX: [...]

Ugh! The clang workaround for noreturn handling is going to need to be more extensive.

@jdksjolen
Copy link
Contributor

Hi,

I really like the syntactic change of this feature, and it's very nice that we get to have working auto-complete (makes it easier to find out that a specific function isn't forbidden). The syntactic change isn't shown in the PR description, isn't that useful to add?

I have a bike shedding request: Could we skip the S at the end and have it be permit_forbidden_function::free(my_ptr);? We only allow one forbidden function in that call, so this reads neater.

@TheShermanTanker
Copy link
Contributor

Hi Johan, which syntactic change are you referring to?

@jdksjolen
Copy link
Contributor

Hi Johan, which syntactic change are you referring to?

Oh, just that we don't have to repeat the name of the function we want to use. No more macro, just a namespace and a function!

Copy link
Contributor

@jdksjolen jdksjolen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've read through it all, and it seems like good code to me. I like the change in syntax a lot. I've one nit regarding comment style.

Copy link
Contributor

@coleenp coleenp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is very nice, now that I've navigated to all the pieces and see how it works. I would rather see #ifdef include the posix file rather than the dispatch header files which would help finding all the bits again.

#include <stdarg.h> // for va_list
#include <stddef.h> // for size_t

#include OS_HEADER(forbiddenFunctions)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought there was an OS_VARIANT_HEADER to dispatch directly to the posix variant, but I guess it doesn't exist. Using the semaphore example, this could save your dispatch header files, at the cost of an #ifdef. Not sure which is worse:

#if defined(LINUX) || defined(AIX)
# include "semaphore_posix.hpp"
#else
# include OS_HEADER(semaphore)
#endif

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

park.hpp has the same:

#if defined(LINUX) || defined(AIX) || defined(BSD)
# include "park_posix.hpp"
#else
# include OS_HEADER(park)
#endif

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If I was going to go that route, I'd be more inclined toward

#if !define(_WINDOWS)
#include "forbiddenFunctions_windows.hpp"
#else
#include "forbiddenFunctions_posix.hpp"
#endif

rather than list all (or maybe just a subset) of the posix-like ports. My
inclination is to leave it as-is with OS_HEADERS, since I think that's the
"intended" idiom.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall I like this change. I appreciate the effort that has been put in to try and find an elegant solution to this problem.

but having OS specific files created just to include the posix version runs counter to why we have the posix variants in the first place IMO. Please select one of the above approaches so that the new aix/bsd/linux specific files can be removed in favour of the posix one. Thanks.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I disagree. It seems to me that breaking the abstraction like that is just asking for trouble.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dholmes-ora - OS_HEADER and CPU_HEADER instead of explicit knowledge of what platforms exist and
which ones share some code in a "_posix" file and which ones have some unshared code. IMO the includer
shouldn't need to know that kind of implementation detail.

But oh well, all y'all seem to really hate the simple forwarding files and would prefer to skip that in favor of
hard-coding the file organization. In the interest of making progress, I'll do that.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@coleenp The copyrights on the new files being 2024-2025 is intentional. They were first published (in this PR)
in 2024, so I think are supposed to have that starting year.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kimbarrett I understand. I also don't like the includer needing to know about this, and maybe it is time to add OS_FAMILY_HEADER to deal with it. But in the absence of the new macro I prefer this break of abstraction to the creation of a bunch of tiny forwarding files.

Copy link
Contributor

@coleenp coleenp Jan 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer the opposite. If you break these up into a bunch of forwarding files, do all the rest of the VM the same way.

It may be my problem but I don't have a good IDE to have to navigate through a slew of similarly named files to find the real implementation.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@coleenp I thought you and I were on the same page not liking the creation of all these little files that just forward to the posix one. ???

@kimbarrett
Copy link
Author

Unfortunately, this doesn't compile on AIX:

globalDefinitions_gcc.hpp:42:
In file included from /opt/IBM/openxlC/17.1.1/bin/../include/c++/v1/stdlib.h:93:
/usr/include/stdlib.h:304:18: error: 'noreturn' attribute does not appear on the first declaration
        extern _NOTHROW(_NORETURN(void, exit), (int));
                        ^
/usr/include/comp_macros.h:30:35: note: expanded from macro '_NORETURN'
#define _NORETURN(_T, _F) _T _F [[noreturn]]
                                  ^
   ... (rest of output omitted)

Thanks for testing that port.

I restructured the implementation of FORBID_C_FUNCTION, and added more commentary about the clang issue.
I think that didn't change the resulting expansion, but I think made it easier to describe how I tried to address this
problem. The actual "solution" (I hope) is to ensure that <stdlib.h> is included before the forbidding declarations
for the noreturn functions. Please try an aix build again.

@kimbarrett
Copy link
Author

I really like the syntactic change of this feature, and it's very nice that we get to have working auto-complete (makes it easier to find out that a specific function isn't forbidden). The syntactic change isn't shown in the PR description, isn't that useful to add?

Isn't the last paragraph of the PR description (beginning with "Some of the poisoned functions...") what your are
looking for? Admittedly I didn't mention working with auto-complete as one of the benefits.

I have a bike shedding request: Could we skip the S at the end and have it be permit_forbidden_function::free(my_ptr);? We only allow one forbidden function in that call, so this reads neater.

I named it as a collection of forbidden functions. But I agree it reads better without the plural, so I've removed the S.

@TheRealMDoerr
Copy link
Contributor

Unfortunately, this doesn't compile on AIX:

globalDefinitions_gcc.hpp:42:
In file included from /opt/IBM/openxlC/17.1.1/bin/../include/c++/v1/stdlib.h:93:
/usr/include/stdlib.h:304:18: error: 'noreturn' attribute does not appear on the first declaration
        extern _NOTHROW(_NORETURN(void, exit), (int));
                        ^
/usr/include/comp_macros.h:30:35: note: expanded from macro '_NORETURN'
#define _NORETURN(_T, _F) _T _F [[noreturn]]
                                  ^
   ... (rest of output omitted)

Thanks for testing that port.

I restructured the implementation of FORBID_C_FUNCTION, and added more commentary about the clang issue. I think that didn't change the resulting expansion, but I think made it easier to describe how I tried to address this problem. The actual "solution" (I hope) is to ensure that <stdlib.h> is included before the forbidding declarations for the noreturn functions. Please try an aix build again.

Thanks! This has solved one of the problems, but not all. The next one is:

globalDefinitions_gcc.hpp:55:
In file included from /usr/include/fcntl.h:242:
/usr/include/unistd.h:181:8: error: 'noreturn' attribute does not appear on the first declaration
extern _NORETURN(void, _exit)(int);
       ^
/usr/include/comp_macros.h:30:35: note: expanded from macro '_NORETURN'
#define _NORETURN(_T, _F) _T _F [[noreturn]]

@kimbarrett
Copy link
Author

I filed an enhancement to remove the use of ::strdup. https://bugs.openjdk.org/browse/JDK-8347157

Per discussion in that bug, it's been closed as not an issue, and I'm changing the code here to add and use the
permit wrapper for strdup.

@openjdk openjdk bot removed the ready Pull request is ready to be integrated label Jan 9, 2025
@kimbarrett
Copy link
Author

@stefank Someday that long ago long discussion about include ordering and formatting needs to get cleaned up and
added to the style guide.

@stefank
Copy link
Member

stefank commented Jan 9, 2025

@stefank Someday that long ago long discussion about include ordering and formatting needs to get cleaned up and added to the style guide.

Yes. The guide that system includes should come last and be separated from the rest of the HotSpot includes was never written down here:
https://github.com/openjdk/jdk/blob/master/doc/hotspot-style.md#source-files

Copy link
Member

@dholmes-ora dholmes-ora left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nothing further from me.

Thanks

@openjdk openjdk bot added the ready Pull request is ready to be integrated label Jan 13, 2025
Copy link
Contributor

@coleenp coleenp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good for me too. I think you should allow GHA to run for this change.

@kimbarrett
Copy link
Author

This looks good for me too. I think you should allow GHA to run for this change.

I ran GHA tests on at least one early version, but I'll do another run before integrating.

@kimbarrett
Copy link
Author

Thanks for reviews.

@kimbarrett
Copy link
Author

/integrate

@openjdk
Copy link

openjdk bot commented Jan 13, 2025

Going to push as commit e0f2f4b.
Since your change was applied there have been 46 commits pushed to the master branch:

  • b0c131e: 8345368: java/io/File/createTempFile/SpecialTempFile.java fails on Windows Server 2025
  • a7915bb: 8346468: SM cleanup of common test library
  • f67b703: 8347427: JTabbedPane/8134116/Bug8134116.java has no license header
  • 062f2dc: 8347554: [BACKOUT] C2: implement optimization for series of Add of unique value
  • a289bcf: 8306579: Consider building with /Zc:throwingNew
  • cede304: 8347482: Remove unused field in ParkEvent
  • fa5ff82: 8342062: Reformat keytool and jarsigner output for keys with a named parameter set
  • cc19897: 8293123: Fix various include file ordering
  • 6e43f48: 8346929: runtime/ClassUnload/DictionaryDependsTest.java fails with "Test failed: should be unloaded"
  • c885e59: 8346377: Properly support static builds for Windows
  • ... and 36 more: https://git.openjdk.org/jdk/compare/665c39c93109f9ba23f3d9555878c0fb565622df...master

Your commit was automatically rebased without conflicts.

@openjdk openjdk bot added the integrated Pull request has been integrated label Jan 13, 2025
@openjdk openjdk bot closed this Jan 13, 2025
@openjdk openjdk bot removed ready Pull request is ready to be integrated rfr Pull request is ready for review labels Jan 13, 2025
@openjdk
Copy link

openjdk bot commented Jan 13, 2025

@kimbarrett Pushed as commit e0f2f4b.

💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored.

@kimbarrett kimbarrett deleted the new-poison branch January 14, 2025 05:02
@TheShermanTanker
Copy link
Contributor

Curious question: Did we ever find out why the attribute warning didn't fire off at the sites of forbidden methods being called inside gtest?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
graal graal-dev@openjdk.org hotspot hotspot-dev@openjdk.org integrated Pull request has been integrated
Development

Successfully merging this pull request may close these issues.

7 participants