// Module included in the following assemblies:
//
// * operators/operator-reference.adoc

[id="cluster-cloud-controller-manager-operator_{context}"]
= Cluster Cloud Controller Manager Operator

[discrete]
== Purpose

[NOTE]
====
This Operator is only fully supported for Alibaba Cloud, Microsoft Azure Stack Hub, and IBM Cloud.

It is available as a link:https://access.redhat.com/support/offerings/techpreview[Technology Preview] for Amazon Web Services (AWS), Google Cloud Platform (GCP), Microsoft Azure, {rh-openstack-first}, and VMware vSphere.
====

The Cluster Cloud Controller Manager Operator manages and updates the cloud controller managers deployed on top of {product-title}. The Operator is based on the Kubebuilder framework and `controller-runtime` libraries. It is installed via the Cluster Version Operator (CVO).

It contains the following components:

* Operator
* Cloud configuration observer

By default, the Operator exposes Prometheus metrics through the `metrics` service.

[discrete]
== Project

link:https://github.com/openshift/cluster-cloud-controller-manager-operator[cluster-cloud-controller-manager-operator]

Update to reflect Ali Cloud TP status in 4.10

// Module included in the following assemblies:
//
// * operators/operator-reference.adoc

[id="cluster-cloud-controller-manager-operator_{context}"]
= Cluster Cloud Controller Manager Operator

[discrete]
== Purpose

[NOTE]
====
This Operator is only fully supported for Microsoft Azure Stack Hub and IBM Cloud.

It is available as a link:https://access.redhat.com/support/offerings/techpreview[Technology Preview] for Alibaba Cloud, Amazon Web Services (AWS), Google Cloud Platform (GCP), Microsoft Azure, {rh-openstack-first}, and VMware vSphere.
====

The Cluster Cloud Controller Manager Operator manages and updates the cloud controller managers deployed on top of {product-title}. The Operator is based on the Kubebuilder framework and `controller-runtime` libraries. It is installed via the Cluster Version Operator (CVO).

It contains the following components:

* Operator
* Cloud configuration observer

By default, the Operator exposes Prometheus metrics through the `metrics` service.

[discrete]
== Project

link:https://github.com/openshift/cluster-cloud-controller-manager-operator[cluster-cloud-controller-manager-operator]


= To-Do List

- mock_cone_detector creates infinite area and overflows h
- (*DONE*) new waypoints shorter than old don't delete existing waypoints
- adjust waypoints for start position and cone position
- cone area goes down when very close to cone
- (*DONE*) parameterize throttle and steering PWM values
- (*DONE*) touch sensor does not work
- (*DONE*) cone detection in bright light does not work
- GUIDED mode does not work
- (*DONE*) Encode PWM values or range set to use in the waypoints file
- If waypoint encountered before cone is seen, rover goes into HOLD mode
with no recovery. Needs to be fixed.

== Possible To-Do

- (*DONE*) Change from using WP_SPEED to CRUISE_SPEED. (Seems to be used by Vicky,
while WP_SPEED is not.)
- Have a way of manually triggering parameter reload

== Notes

MAV_CMD_DO_SET_HOME appears to reset the map origin, as well as zero the
offset between the map origin and base_link (for /mavros/local_position/pose
and /mavros/local_position/odom).

Add new to-do items based on field testing from 04-14

= To-Do List

- shouldn't need intermediate waypoint to trigger EXPECTING_CONE
- have to handle case where cone waypoint is achieved before seeing cone
- need to limit time of reverse
- have to handle case where in MANUAL mode and don't see cone
- mock_cone_detector creates infinite area and overflows h
- (*DONE*) new waypoints shorter than old don't delete existing waypoints
- adjust waypoints for start position and cone position
- cone area goes down when very close to cone
- (*DONE*) parameterize throttle and steering PWM values
- (*DONE*) touch sensor does not work
- (*DONE*) cone detection in bright light does not work
- GUIDED mode does not work
- (*DONE*) Encode PWM values or range set to use in the waypoints file
- If waypoint encountered before cone is seen, rover goes into HOLD mode
with no recovery. Needs to be fixed.

== Possible To-Do

- (*DONE*) Change from using WP_SPEED to CRUISE_SPEED. (Seems to be used by Vicky,
while WP_SPEED is not.)
- Have a way of manually triggering parameter reload

== Notes

MAV_CMD_DO_SET_HOME appears to reset the map origin, as well as zero the
offset between the map origin and base_link (for /mavros/local_position/pose
and /mavros/local_position/odom).


[[ivy-plugin]]
= ivy-plugin

image:https://img.shields.io/jenkins/plugin/v/ivy.svg[Jenkins Plugin,link=https://plugins.jenkins.io/ivy]
image:https://img.shields.io/github/release/jenkinsci/ivy-plugin.svg?label=release[GitHub release,link=https://github.com/jenkinsci/ivy-plugin/releases/latest]
image:https://img.shields.io/jenkins/plugin/i/ivy.svg?color=blue[Jenkins Plugin Installs,link=https://plugins.jenkins.io/ivy]
image:https://ci.jenkins.io/job/Plugins/job/ivy-plugin/job/master/badge/icon[Build Status,link=https://ci.jenkins.io/job/Plugins/job/ivy-plugin/job/master/]

Provides Jenkins integration with http://ant.apache.org/ivy/[Apache Ivy].

See http://wiki.jenkins-ci.org/display/JENKINS/Ivy+Plugin[Ivy Plugin] on the Jenkins wiki for more information.

Convert wiki link to jenkinsio plugin link

[[ivy-plugin]]
= ivy-plugin

image:https://img.shields.io/jenkins/plugin/v/ivy.svg[Jenkins Plugin,link=https://plugins.jenkins.io/ivy]
image:https://img.shields.io/github/release/jenkinsci/ivy-plugin.svg?label=release[GitHub release,link=https://github.com/jenkinsci/ivy-plugin/releases/latest]
image:https://img.shields.io/jenkins/plugin/i/ivy.svg?color=blue[Jenkins Plugin Installs,link=https://plugins.jenkins.io/ivy]
image:https://ci.jenkins.io/job/Plugins/job/ivy-plugin/job/master/badge/icon[Build Status,link=https://ci.jenkins.io/job/Plugins/job/ivy-plugin/job/master/]

Provides Jenkins integration with http://ant.apache.org/ivy/[Apache Ivy].

See https://plugins.jenkins.io/ivy/[Ivy Plugin] on the Jenkins wiki for more information.


To complete this guide you will need to checkout the source from Github and work through the steps presented by the guide.

To get started do the following:

* link:https://github.com/{githubSlug}/archive/master.zip[Download] and unzip the source or if you already have https://git-scm.com/[Git]: `git clone https://github.com/{githubSlug}.git`
* `cd` into `{githubSlug}/initial`
* Head on over to the next section

Add a note about completed example

To complete this guide you will need to checkout the source from Github and work through the steps presented by the guide.

To get started do the following:

* link:https://github.com/{githubSlug}/archive/master.zip[Download] and unzip the source or if you already have https://git-scm.com/[Git]: `git clone https://github.com/{githubSlug}.git`
* `cd` into `{githubSlug}/initial`
* Head on over to the next section

TIP: You can go right to the completed example if you `cd` into `{githubSlug}/complete`


:source-highlighter: pygments

= Muon Clojure

Muon Clojure is just awesome and clojurific

Add doc push on snapshot release

---
---
:title: Muon Clojure
:layout: documentation
:source-highlighter: pygments
:toc: right

= Muon Clojure docs

Muon Clojure is just awesome and clojurific


[[analysis-standard-analyzer]]
=== Standard Analyzer

An analyzer of type `standard` that is built of using
<<analysis-standard-tokenizer,Standard
Tokenizer>>, with
<<analysis-standard-tokenfilter,Standard
Token Filter>>,
<<analysis-lowercase-tokenfilter,Lower
Case Token Filter>>, and
<<analysis-stop-tokenfilter,Stop
Token Filter>>.

The following are settings that can be set for a `standard` analyzer
type:

[cols="<,<",options="header",]
|=======================================================================
|Setting |Description
|`stopwords` |A list of stopword to initialize the stop filter with.
Defaults to the english stop words.

|`max_token_length` |The maximum token length. If a token is seen that
exceeds this length then it is discarded. Defaults to `255`.
|=======================================================================

Fix nonsensical sentence in standard analyzer documentation so that it is more understandable

[[analysis-standard-analyzer]]
=== Standard Analyzer

An analyzer of type `standard` is built using the
<<analysis-standard-tokenizer,Standard
Tokenizer>> with the
<<analysis-standard-tokenfilter,Standard
Token Filter>>,
<<analysis-lowercase-tokenfilter,Lower
Case Token Filter>>, and
<<analysis-stop-tokenfilter,Stop
Token Filter>>.

The following are settings that can be set for a `standard` analyzer
type:

[cols="<,<",options="header",]
|=======================================================================
|Setting |Description
|`stopwords` |A list of stopword to initialize the stop filter with.
Defaults to the english stop words.

|`max_token_length` |The maximum token length. If a token is seen that
exceeds this length then it is discarded. Defaults to `255`.
|=======================================================================


[id="serverless-create-func-kn_{context}"]
= Creating functions

You can create a basic serverless function using the `kn` CLI.

You can specify the path, runtime, and template as flags on the command line, or use the `-c` flag to start the interactive experience in the terminal.

.Procedure

* Create a function project:
+
[source,terminal]
----
$ kn func create <path> -l <runtime> -t <template>
----
** Supported runtimes include `node`, `go`, `python`, `quarkus`, and `typescript`.
** Supported templates include `http` and `events`.
+
.Example command
[source,terminal]
----
$ kn func create -l typescript -t events examplefunc
----
+
.Example output
[source,terminal]
----
Project path:  /home/user/demo/examplefunc
Function name: examplefunc
Runtime:       typescript
Template:      events
Writing events to /home/user/demo/examplefunc
----

Document the -r <repository> option of the `kn func create` command

[id="serverless-create-func-kn_{context}"]
= Creating functions

You can create a basic serverless function using the `kn` CLI.

You can specify the path, runtime, template, and repository with the template as flags on the command line, or use the `-c` flag to start the interactive experience in the terminal.

.Procedure

* Create a function project:
+
[source,terminal]
----
$ kn func create -r <repository> -l <runtime> -t <template> <path>
----
** Supported runtimes include `node`, `go`, `python`, `quarkus`, and `typescript`.
** Supported templates include `http` and `events`.
+
.Example command
[source,terminal]
----
$ kn func create -l typescript -t events examplefunc
----
+
.Example output
[source,terminal]
----
Project path:  /home/user/demo/examplefunc
Function name: examplefunc
Runtime:       typescript
Template:      events
Writing events to /home/user/demo/examplefunc
----
+
** Alternatively, you can specify a repository that contains a custom template.
+
.Example command
[source,terminal]
----
$ kn func create -r https://github.com/boson-project/templates/ -l node -t hello-world examplefunc
----
+
.Example output
[source,terminal]
----
Project path:  /home/user/demo/examplefunc
Function name: examplefunc
Runtime:       node
Template:      hello-world
Writing events to /home/user/demo/examplefunc
----


libframetime
============

A preloadable library, able to dump the frame times of any OpenGL application on Linux, on
any driver.

By default, the timing is written into /tmp/libframetime.out, but you can specify an
alternate file with the LIBFRAMETIME_FILE env var.

Usage
-----

----
LD_PRELOAD=path/to/libframetime.so dota2
----

Or with a custom output file:
----
LIBFRAMETIME_FILE=/tmp/dota2.frametime LD_PRELOAD=path/to/libframetime.so dota2
----

The accompanying awk script can be used to calculate the usual stats:
----
$ stats.awk < libframetime.out
----
----
Min/avg/max frametimes (us):    166 / 625.626 / 5955
Min/avg/max FPS:                167.926 / 1598.4 / 6024.1
----

Update readme with latest stats output

libframetime
============

A preloadable library, able to dump the frame times of any OpenGL application on Linux, on
any driver.

By default, the timing is written into /tmp/libframetime.out, but you can specify an
alternate file with the LIBFRAMETIME_FILE env var.

Usage
-----

----
LD_PRELOAD=path/to/libframetime.so dota2
----

Or with a custom output file:
----
LIBFRAMETIME_FILE=/tmp/dota2.frametime LD_PRELOAD=path/to/libframetime.so dota2
----

The accompanying awk script can be used to calculate the usual stats:
----
$ stats.awk < libframetime.out
----
----
Min/avg/max frametimes (us):    166 / 625.626 / 5955
Min/avg/max FPS:                167.926 / 1598.4 / 6024.1

50/90/95/99 percentiles (us):   410 / 434 / 589 / 5018
----


== New Check and 2 Fixes
:docname: 20180406-new-check-and-2-fixes

I fixed 3 issues for which there are releases of the following components:

* `revapi-basic-features-0.7.1` that contains a fix for https://github.com/revapi/revapi/issues/119[#119] which means
that the semver transform should no longer crash when there is no prior version of artifacts
* `revapi-java-spi-0.15.1` that includes the definition of the new `serialVersionUIDChanged` check (prompted by
https://github.com/revapi/revapi/issues/120[#120])
* `revapi-java-0.16.0` that contains the implementation of `serialVersionUIDChanged` and additionally contains
an important fix that could cause problems be reported on wrong elements in some cases.
* `revapi-maven-plugin-0.10.1` that bundles the latest revapi-basic-features version

You are urged to upgrade especially to `revapi-java-0.16.0` to avoid some head scratching when examining the Revapi
reports.

Thanks go out to Ricardo Ferreira for reporting https://github.com/revapi/revapi/issues/120[#120] and Matthew Kavanagh
for his analysis of https://github.com/revapi/revapi/issues/119[#119].

include::../util/disqus.adoc[]

Add a link to the docs in the release announcement

== New Check and 2 Fixes
:docname: 20180406-new-check-and-2-fixes

I fixed 3 issues for which there are releases of the following components:

* `revapi-basic-features-0.7.1` that contains a fix for https://github.com/revapi/revapi/issues/119[#119] which means
that the semver transform should no longer crash when there is no prior version of artifacts
* `revapi-java-spi-0.15.1` that includes the definition of the new `serialVersionUIDChanged`
https://revapi.org/modules/revapi-java/index.html#field_code_serialversionuid_code_changed[check] (prompted by
https://github.com/revapi/revapi/issues/120[#120])
* `revapi-java-0.16.0` that contains the implementation of `serialVersionUIDChanged` and additionally contains
an important fix that could cause problems be reported on wrong elements in some cases.
* `revapi-maven-plugin-0.10.1` that bundles the latest revapi-basic-features version

You are urged to upgrade especially to `revapi-java-0.16.0` to avoid some head scratching when examining the Revapi
reports.

Thanks go out to Ricardo Ferreira for reporting https://github.com/revapi/revapi/issues/120[#120] and Matthew Kavanagh
for his analysis of https://github.com/revapi/revapi/issues/119[#119].

include::../util/disqus.adoc[]


= Vert.x Unit examples

Here you'll find some examples of how to use Vert.x unit to test your asynchronous applications.

Tests are located in the link:src/test/java/io/vertx/example/unit/test directory.

Examples can be run directly from the IDE.

== Vertx Unit Test

The link:src/test/java/io/vertx/example/unit/test/VertxUnitTest.java demonstrates how the Vert.x Unit API can be used to run tests using the Vert.x Unit test runner.

Run this example by running the `main` method.

== Junit

Vert.x Unit can be used with Junit:

* link:src/test/java/io/vertx/example/unit/test/MyJunitTest.java demonstrates how to use the Vert.x Unit Junit runner
 to execute your tests
* link:src/test/java/io/vertx/example/unit/test/ParameterizedTest.java demonstrates how to inject parameters into
 your Junit tests
* link:src/test/java/io/vertx/example/unit/test/RunOnContextTest.java demonstrates how to delegate Vert.x instance
 creation to Vert.x Unit and how to use a rule to run the test methods on the event loop (caution: they must be non-blocking)
* link:src/test/java/io/vertx/example/unit/test/JUnitAndAssertJTest.java demonstrates how to use AssertJ in
 combination with Vert.x Unit
* link:src/test/java/io/vertx/example/unit/test/JUnitAndHamcrestTest.java demonstrates how to use Hamcrest in
 combination with Vert.x Unit

All the tests can be run from your IDE, or directly with Maven:

```
mvn clean test
```

Update readme with blank info


= SpringBoot WebApp Demo

SpringBoot looks like a nice way to get started.
This is a trivial webapp created using SpringBoot.

== HowTo

mvn spring-boot:run

then connect to http://localhost:8000/notaservlet

Note that is 8000 not the usual 8080 to avoid conflicts.
Change this in application.properties if you don't like it.

== War Deployment

It seems that you can't have both the instant-deployment convenience of Spring Boot
AND the security of a full WAR deployment in the same pom file.  You will need to
make several changes to deploy as a WAR file. See the section entitled
"Traditional Deployment"--"Create a deployable war file" in the
spring-boot reference manual (Section 73.1 in the current snapshot as of
this writing).

Add required "name" parameter in example

= SpringBoot WebApp Demo

SpringBoot looks like a nice way to get started.
This is a trivial webapp created using SpringBoot.

== HowTo

mvn spring-boot:run

then connect to

http://localhost:8000/notaservlet?name=Robin Smith

Note that is 8000 not the usual 8080 to avoid conflicts.
Change this in application.properties if you don't like it.

== War Deployment

It seems that you can't have both the instant-deployment convenience of Spring Boot
AND the security of a full WAR deployment in the same pom file.  You will need to
make several changes to deploy as a WAR file. See the section entitled
"Traditional Deployment"--"Create a deployable war file" in the
spring-boot reference manual (Section 73.1 in the current snapshot as of
this writing).


= Changelog

== Version 0.4.0

Date: unreleased

- Add encode/decode functions to JWS/JWT implementation. Them instead of return
  plain value, return a monadic either. That allows granular error reporting
  instead something like nil that not very useful. The previous sign/unsign
  are conserved for backward compatibility but maybe in future will be removed.
- Rename parameter `maxage` to `max-age` on jws implementation. This change
  introduces a little backward incompatibility.

== Version 0.3.0

Date: 2014-01-18

- First version splitted from monolitic buddy package.
- No changes from original version.

Add deprecatio not on changelog.

= Changelog

== Version 0.4.0

Date: unreleased

- Add encode/decode functions to JWS/JWT implementation. Them instead of return
  plain value, return a monadic either. That allows granular error reporting
  instead something like nil that not very useful. The previous sign/unsign
  are conserved for backward compatibility but maybe in future will be removed.
- Rename parameter `maxage` to `max-age` on jws implementation. This change
  introduces a little backward incompatibility.
- Django based generic signing is deprecated.

== Version 0.3.0

Date: 2014-01-18

- First version splitted from monolitic buddy package.
- No changes from original version.


To run the tests:

[source, bash]
----
./grailsw
grails> test-app
grails> open test-report
----

Add Gradle check to testApp snippet

To run the tests:

[source, bash]
----
./grailsw
grails> test-app
grails> open test-report
----

or

[source, bash]
----
./gradlew check
open build/reports/tests/index.html
----


= Spring Boot and Two DataSources

This project demonstrates how to use two `DataSource` s with Spring Boot.

It utilizes:

* Spring Data JPA/REST
* Flyway migrations for the two `DataSource` s
* Separate Hibernate properties for each `DataSource`
* Application properties with YAML
* Thymeleaf
* Unit tests for components

Add DataTables and links to readme

= Spring Boot and Two DataSources

This project demonstrates how to use two `DataSource` s with Spring Boot.

It utilizes:

* Spring Data https://github.com/spring-projects/spring-data-jpa[JPA] / https://github.com/spring-projects/spring-data-rest[REST]
* https://github.com/flyway/flyway[Flyway] migrations for the two `DataSource` s
* Separate Hibernate properties for each `DataSource` defined in the application.yml
* https://github.com/thymeleaf/thymeleaf[Thymeleaf]
* https://github.com/DataTables/DataTablesSrc[DataTables]
* Unit tests for components


= Database Table Replicator (DbShadow)
:Author: David Thompson, Matt Conroy
:Email: <dthompsn1@gmail.com> <matt@conroy.cc>
:Revision: 0.0.1 2017-02-08

== Description
Have you ever had the need to copy data from one database to another? How about between to different types of
databases? How about just verifying that your database tables between replicated instances are in sync?

DbShadow is a Java command line application that can help you perform these actions. Using the power of JDBC, it
can read data from one database instance and then using primary keys compare, propogate, and locate differences within
a separate database instance.

== ReleaseNotes
0.0.1 - Base code

== Usage

Add a little more docs. More to come.

= Database Table Replicator (DbShadow)
:Author: David Thompson, Matt Conroy
:Email: <dthompsn1@gmail.com> <matt@conroy.cc>
:Revision: 0.0.1 2017-02-08

== Description
Have you ever had the need to copy data from one database to another? How about between to different types of
databases? How about just verifying that your database tables between replicated instances are in sync?

DbShadow is a Java command line application that can help you perform these actions. Using the power of JDBC, it
can read data from one database instance and then using primary keys compare, propogate, and locate differences within
a separate database instance.

== ReleaseNotes
0.0.1 - Base code

== Building
DbShadow uses Scala Build Tool (sbt) in order to build. Clone the repo and type
....
$ sbt clean compile
....

In order to package the system into a Java binary that's useful for somebody to use:
....
$ sbt clean universal:packageZipTarball
....
This will produce a tarball that can then be installed with a bash script for launching.

== Usage
Help usage is available with the command line.

$ dbshadow -- --help

More documentation to follow.


icon:plus[] GraphQL: Nodes can now be loaded in the context of a schema. This will return all nodes which use the schema.

Add breaking GraphQL change to changelog

CAUTION: GraphQL: The root field releases has been removed. The root field release now takes no parameters and loads the active release.
icon:plus[] GraphQL: Nodes can now be loaded in the context of a schema. This will return all nodes which use the schema.


=== Apm-Server version HEAD
https://github.com/elastic/apm-server/compare/x...master[View commits]

==== Breaking changes

==== Bugfixes

==== Added

==== Deprecated

==== Known Issue

Add minor schema changes to Changelog.

=== Apm-Server version HEAD
https://github.com/elastic/apm-server/compare/x...master[View commits]

==== Breaking changes

==== Bugfixes
*Bugfixes in fields.yml leading to ES schema changes*
- changed `context.system.title` to `context.system.process_title`, removed `transaction.context`, `trace.context` (already available on top level). {pull}10[10]

==== Added

==== Deprecated

==== Known Issue


[[Johnzon-Johnzon]]
Johnzon
~~~~~~~

*Available as of Camel 2.18*

Johnzon is a link:data-format.html[Data Format] which uses the
http://johnzon.apache.org/[Johnzon Library]

[source,java]
-------------------------------
from("activemq:My.Queue").
  marshal().json(JsonLibrary.Johnzon).
  to("mqseries:Another.Queue");
-------------------------------

[[JacksonXML-Dependencies]]
Dependencies
^^^^^^^^^^^^

To use Johnzon in your camel routes you need to add the dependency
on *camel-johnzon* which implements this data format.

If you use maven you could just add the following to your pom.xml,
substituting the version number for the latest & greatest release (see
link:download.html[the download page for the latest versions]).

[source,xml]
----------------------------------------------------------
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-johnzon</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----------------------------------------------------------

Fix paragraph name in Johnzon docs for Gitbook

[[Johnzon-Johnzon]]
Johnzon
~~~~~~~

*Available as of Camel 2.18*

Johnzon is a link:data-format.html[Data Format] which uses the
http://johnzon.apache.org/[Johnzon Library]

[source,java]
-------------------------------
from("activemq:My.Queue").
  marshal().json(JsonLibrary.Johnzon).
  to("mqseries:Another.Queue");
-------------------------------

[[Johnzon-Dependencies]]
Dependencies
^^^^^^^^^^^^

To use Johnzon in your camel routes you need to add the dependency
on *camel-johnzon* which implements this data format.

If you use maven you could just add the following to your pom.xml,
substituting the version number for the latest & greatest release (see
link:download.html[the download page for the latest versions]).

[source,xml]
----------------------------------------------------------
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-johnzon</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----------------------------------------------------------


= bitcoinj-addons Release Process

== Main Release Process

. Update `CHANGELOG.adoc`
. Set versions
.. `README.adoc` (check/set bitcoinj version variable, too)
.. bitcoinj-dsl `ExtensionModule`
.. `gradle.properties`
. Commit version bump and changelog.
. Full build, test
.. `./gradlew clean jenkinsBuild install regTest`
.. Recommended: test with *OmniJ* regTests.
. Tag: `git tag -a v0.x.y -m "Release 0.x.y"`
. Push: `git push --tags origin master`
. Publish to Bintray:
.. `./gradlew bintrayUpload`
.. Confirm publish of artifacts in Bintray Web UI.
. Update github-pages site (including JavaDoc): `./gradlew publishSite`

== Announcements

. Not yet.

== After release

. Set versions back to -SNAPSHOT
.. `gradle.properties`
.. bitcoinj-groovy `ExtensionModule`
.. *Not* `README.adoc` -- it should match release version
. Commit and push to master

Update build-process (use `buildCI` target)

= bitcoinj-addons Release Process

== Main Release Process

. Update `CHANGELOG.adoc`
. Set versions
.. `README.adoc` (check/set bitcoinj version variable, too)
.. bitcoinj-dsl `ExtensionModule`
.. `gradle.properties`
. Commit version bump and changelog.
. Full build, test
.. `./gradlew clean buildCI install regTest`
.. Recommended: test with *OmniJ* regTests.
. Tag: `git tag -a v0.x.y -m "Release 0.x.y"`
. Push: `git push --tags origin master`
. Publish to Bintray:
.. `./gradlew bintrayUpload`
.. Confirm publish of artifacts in Bintray Web UI.
. Update github-pages site (including JavaDoc): `./gradlew publishSite`

== Announcements

. Not yet.

== After release

. Set versions back to -SNAPSHOT
.. `gradle.properties`
.. bitcoinj-groovy `ExtensionModule`
.. *Not* `README.adoc` -- it should match release version
. Commit and push to master


[role="xpack"]
[[fleet-apis]]

TIP: For the {kib} {fleet} APIs, see the
{fleet-guide}/fleet-api-docs.html[`Fleet API Documentation`].

== Fleet APIs

The following APIs support {fleet}'s use of {es} as a data store for internal
agent and action data. These APIs are experimental and for internal use by
{fleet} only.

* <<get-global-checkpoints,Get global checkpoints>>

// top-level
include::get-global-checkpoints.asciidoc[]

Relocate tip for Fleet APIs

[role="xpack"]
[[fleet-apis]]
== Fleet APIs

TIP: For the {kib} {fleet} APIs, see the
{fleet-guide}/fleet-api-docs.html[Fleet API Documentation].

The following APIs support {fleet}'s use of {es} as a data store for internal
agent and action data. These APIs are experimental and for internal use by
{fleet} only.

* <<get-global-checkpoints,Get global checkpoints>>

// top-level
include::get-global-checkpoints.asciidoc[]


= Report an issue
:awestruct-layout: normalBase
:showtitle:

== Issue tracker

We welcome issue reports (bugs, improvements, new feature requests, ...) in our issue tracker:

*Show https://issues.jboss.org/browse/drools[the JIRA issue tracker].*

Log in and click on the button _Create Issue_ to report a bug, improvement or feature request.

== Pull requests on GitHub

Want to fix the issue yourself? Fork https://github.com/droolsjbpm[the git repository] and send in a pull request.
We usually process all pull requests within a few days.

Add the known kanban boards

= Report an issue
:awestruct-layout: normalBase
:showtitle:

== Issue tracker

We welcome issue reports (bugs, improvements, new feature requests, ...) in our issue tracker:

*Show https://issues.jboss.org/browse/drools[the JIRA issue tracker].*

Log in and click on the button _Create Issue_ to report a bug, improvement or feature request.

== Pull requests on GitHub

Want to fix the issue yourself? Fork https://github.com/droolsjbpm[the git repository] and send in a pull request.
We usually process all pull requests within a few days.

== Kanban boards

* https://issues.jboss.org/secure/RapidBoard.jspa?rapidView=4016[Drools]
* https://issues.jboss.org/secure/RapidBoard.jspa?rapidView=3828[OptaPlanner]
* https://issues.jboss.org/secure/RapidBoard.jspa?rapidView=3972[jBPM]
* AppFormer (todo)
* https://issues.jboss.org/secure/RapidBoard.jspa?rapidView=3838[Designer.NEXT]


// set attributes usually set by Antora
ifndef::site-gen-antora[]
:moduledir: ..
:attachmentsdir: {moduledir}/assets/attachments
:examplesdir: {moduledir}/examples
:imagesdir: {moduledir}/assets/images
:partialsdir: {moduledir}/pages/_partials
endif::[]

:ProductName: Debezium
:debezium-version: 1.0.0.Final
:debezium-dev-version: 1.1
:debezium-kafka-version: 2.4.0
:debezium-docker-label: 1.0
:install-version: 1.0
:confluent-platform-version: 5.3.1
:strimzi-version: 0.13.0
:jira-url: https://issues.redhat.com
:prodname: Debezium
:assemblies: ../assemblies
:modules: ../../modules

:mysql-connector-plugin-download: https://repo1.maven.org/maven2/io/debezium/debezium-connector-mysql/1.0.0.Final/debezium-connector-mysql-1.0.0.Final-plugin.tar.gz

:mysql-version: 8.0

Remove definition of unnecessary ProductName attribute in docs

// set attributes usually set by Antora
ifndef::site-gen-antora[]
:moduledir: ..
:attachmentsdir: {moduledir}/assets/attachments
:examplesdir: {moduledir}/examples
:imagesdir: {moduledir}/assets/images
:partialsdir: {moduledir}/pages/_partials
endif::[]

:debezium-version: 1.0.0.Final
:debezium-dev-version: 1.1
:debezium-kafka-version: 2.4.0
:debezium-docker-label: 1.0
:install-version: 1.0
:confluent-platform-version: 5.3.1
:strimzi-version: 0.13.0
:jira-url: https://issues.redhat.com
:prodname: Debezium
:assemblies: ../assemblies
:modules: ../../modules

:mysql-connector-plugin-download: https://repo1.maven.org/maven2/io/debezium/debezium-connector-mysql/1.0.0.Final/debezium-connector-mysql-1.0.0.Final-plugin.tar.gz

:mysql-version: 8.0


// Allow examples to render correctly in previews despite being
// a nested directory
:idprefix:
:idseparator: -
:icons: font
:doc-guides: ../
:doc-examples: ../_examples
:imagesdir: ../../asciidoc/images
:includes: ../includes
:root: ../../asciidoc/

Fix broken xrefs that use the doc-guides attribute

// Allow examples to render correctly in previews despite being
// a nested directory
:idprefix:
:idseparator: -
:icons: font
:doc-guides: ..
:doc-examples: ../_examples
:imagesdir: ../../asciidoc/images
:includes: ../includes
:root: ../../asciidoc/


[id="security-container-content"]
= Securing container content
include::modules/common-attributes.adoc[]
:context: security-container-content

toc::[]

To ensure the security of the content inside your containers
you need to start with trusted base images, such as Red Hat
Universal Base Images, and add trusted software. To check the
ongoing security of your container images, there are both
Red Hat and third-party tools for scanning images.

// Security inside the container
include::modules/security-container-content-inside.adoc[leveloffset=+1]

// Red Hat Universal Base Images
include::modules/security-container-content-universal.adoc[leveloffset=+1]

// Container content scanning
include::modules/security-container-content-scanning.adoc[leveloffset=+1]

// Integrating external scanning tools with OpenShift
include::modules/security-container-content-external-scanning.adoc[leveloffset=+1]
.Additional resources
* xref:../../openshift_images/images-understand.adoc#images-imagestream-use_images-understand[Image stream objects]
* xref:../../rest_api/index.adoc#rest-api[{product-title} {product-version} REST APIs]

Comment out ref to API reference page

[id="security-container-content"]
= Securing container content
include::modules/common-attributes.adoc[]
:context: security-container-content

toc::[]

To ensure the security of the content inside your containers
you need to start with trusted base images, such as Red Hat
Universal Base Images, and add trusted software. To check the
ongoing security of your container images, there are both
Red Hat and third-party tools for scanning images.

// Security inside the container
include::modules/security-container-content-inside.adoc[leveloffset=+1]

// Red Hat Universal Base Images
include::modules/security-container-content-universal.adoc[leveloffset=+1]

// Container content scanning
include::modules/security-container-content-scanning.adoc[leveloffset=+1]

// Integrating external scanning tools with OpenShift
include::modules/security-container-content-external-scanning.adoc[leveloffset=+1]
.Additional resources
* xref:../../openshift_images/images-understand.adoc#images-imagestream-use_images-understand[Image stream objects]
// * xref::../../rest_api/index.adoc#rest-api[{product-title} {product-version} REST APIs]


[[plugins_list]]
== List of plugins

This is a non-exhaustive list of Erlang.mk plugins, sorted
alphabetically.

=== elixir.mk

An https://github.com/botsunit/elixir.mk[Elixir plugin] for
Erlang.mk. http://elixir-lang.org/[Elixir] is an alternative
language for the BEAM.

=== elvis.mk

An https://github.com/inaka/elvis.mk[Elvis plugin] for Erlang.mk.
Elvis is an https://github.com/inaka/elvis[Erlang style reviewer].

=== geas

https://github.com/crownedgrouse/geas[Geas] gives aggregated
information on a project and its dependencies, and is available
as an Erlang.mk plugin.

=== hexer.mk

An https://github.com/inaka/hexer.mk[Hex plugin] for Erlang.mk.
Hex is a https://hex.pm/[package manager for the Elixir ecosystem].

=== lfe.mk

An https://github.com/ninenines/lfe.mk[LFE plugin] for Erlang.mk.
LFE, or http://lfe.io/[Lisp Flavoured Erlang], is an alternative
language for the BEAM.

=== reload.mk

A https://github.com/bullno1/reload.mk[live reload plugin] for Erlang.mk.

Add the Efene plugin to the list

[[plugins_list]]
== List of plugins

This is a non-exhaustive list of Erlang.mk plugins, sorted
alphabetically.

=== efene.mk

An https://github.com/ninenines/efene.mk[Efene plugin] for Erlang.mk.
http://efene.org/[Efene] is an alternative language for the BEAM.

=== elixir.mk

An https://github.com/botsunit/elixir.mk[Elixir plugin] for
Erlang.mk. http://elixir-lang.org/[Elixir] is an alternative
language for the BEAM.

=== elvis.mk

An https://github.com/inaka/elvis.mk[Elvis plugin] for Erlang.mk.
Elvis is an https://github.com/inaka/elvis[Erlang style reviewer].

=== geas

https://github.com/crownedgrouse/geas[Geas] gives aggregated
information on a project and its dependencies, and is available
as an Erlang.mk plugin.

=== hexer.mk

An https://github.com/inaka/hexer.mk[Hex plugin] for Erlang.mk.
Hex is a https://hex.pm/[package manager for the Elixir ecosystem].

=== lfe.mk

An https://github.com/ninenines/lfe.mk[LFE plugin] for Erlang.mk.
LFE, or http://lfe.io/[Lisp Flavoured Erlang], is an alternative
language for the BEAM.

=== reload.mk

A https://github.com/bullno1/reload.mk[live reload plugin] for Erlang.mk.


// Module included in the following assemblies:
//
// * installing/installing_bare_metal/installing-bare-metal.adoc
// * installing/installing_bare_metal/installing-restricted-networks-bare-metal.adoc
// * installing/installing_vsphere/installing-restricted-networks-vsphere.adoc
// * installing/installing_vsphere/installing-vsphere.adoc
// * registry/configuring-registry-storage/configuring-registry-storage-baremetal.adoc
// * registry/configuring-registry-storage/configuring-registry-storage-vsphere.adoc

[id="registry-change-management-state_{context}"]
= Change image registry ManagementState

To start the image registry, you must change `ManagementState` Image Registry Operator configuration from `Removed` to `Managed`.

.Procedure

* Change `ManagementState` Image Registry Operator configuration from `Removed` to `Managed`. For example:
+
[source,yaml]
----
apiVersion: imageregistry.operator.openshift.io/v1
kind: Config
metadata:
  creationTimestamp: <time>
  finalizers:
    - imageregistry.operator.openshift.io/finalizer
  generation: 3
  name: cluster
  resourceVersion:  <version>
  selfLink: <link>
spec:
  readOnly: false
  disableRedirect: false
  requests:
    read:
      maxInQueue: 0
      maxRunning: 0
      maxWaitInQueue: 0s
    write:
      maxInQueue: 0
      maxRunning: 0
      maxWaitInQueue: 0s
  defaultRoute: true
  managementState: Managed
----

Simplify command to change managementState

// Module included in the following assemblies:
//
// * installing/installing_bare_metal/installing-bare-metal.adoc
// * installing/installing_bare_metal/installing-restricted-networks-bare-metal.adoc
// * installing/installing_vsphere/installing-restricted-networks-vsphere.adoc
// * installing/installing_vsphere/installing-vsphere.adoc
// * registry/configuring_registry_storage/configuring-registry-storage-baremetal.adoc
// * registry/configuring_registry_storage/configuring-registry-storage-vsphere.adoc
// * virt/virtual_machines/importing_vms/virt-importing-vmware-vm.adoc

[id="registry-change-management-state_{context}"]
= Changing the image registry's management state

To start the image registry, you must change the Image Registry Operator configuration's `managementState` from `Removed` to `Managed`.

.Procedure

* Change `managementState` Image Registry Operator configuration from `Removed` to `Managed`. For example:
+
[source,terminal]
----
$ oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}'
----


= Packed deployments

We use the term 'packed deployment' to mean that everything required at runtime is built (if necessary) and packed into an archive, ready for deployment and execution in the target operating environment.

It is common to create 'uberjars' containing pre-compiled Clojure code, togther with dependent pre-compiled library code from Clojure and other JVM languages.

Advantages of this approach include:

* Start up time is fast, ideal for AWS Lambdas and for coping with sudden spikes in traffic, for example, using AWS auto-scaling groups.
* Immutable

Disadvantages include:

* Uberjars can be large, meaning they _can_ be costly to build, store and transfer across network links.
* Lossy uberjar build process, possible licensing issues and ambiguities.
* Require a full redeploy on every change
* Distance between dev and prod

NOTE: Coming soon, documentation about integration with `pack`.

Add documentation on building uberjars

= Packed deployments

We use the term 'packed deployment' to mean that everything required at runtime is built (if necessary) and packed into an archive, ready for deployment and execution in the target operating environment.

It is common to create 'uberjars' containing pre-compiled Clojure code, togther with dependent pre-compiled library code from Clojure and other JVM languages.

Advantages of this approach include:

* Start up time is fast, ideal for AWS Lambdas and for coping with sudden spikes in traffic, for example, using AWS auto-scaling groups.
* Immutable

Disadvantages include:

* Uberjars can be large, meaning they _can_ be costly to build, store and transfer across network links.
* Lossy uberjar build process, possible licensing issues and ambiguities.
* Require a full redeploy on every change
* Distance between dev and prod

== Creating an uberjar

From the top-level directory, run the following:

[source]
----
edge$ bin/uberjar main
----

This creates an uberjar named `main.jar`.

NOTE: By default, uberjars are built using the https://github.com/juxt/pack.alpha#capsule[*capsule* strategy] in
JUXT's https://github.com/juxt/pack.alpha[pack] tool.

== Running the uberjar

[source]
----
edge$ java -jar main.jar
----


== Spring Boot Application Plugin

The plugin `com.bmuschko.docker-spring-boot-application` is a highly opinionated plugin for projects applying the https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-gradle-plugin.html[Spring Boot plugin].
Under the covers the plugin preconfigures tasks for creating and pushing Docker images for your Spring Boot application.
The default configuration is tweakable via an exposed extension. The plugin https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#reacting-to-other-plugins[reacts] to either the `java` or `war` plugin.

include::31-usage.adoc[]

include::32-extension.adoc[]

include::33-tasks.adoc[]

include::34-examples.adoc[]

Add note about supported Spring Boot plugin version

== Spring Boot Application Plugin

The plugin `com.bmuschko.docker-spring-boot-application` is a highly opinionated plugin for projects applying the https://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-gradle-plugin.html[Spring Boot plugin].
Under the covers the plugin preconfigures tasks for creating and pushing Docker images for your Spring Boot application.
The default configuration is tweakable via an exposed extension. The plugin https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#reacting-to-other-plugins[reacts] to either the `java` or `war` plugin.

[IMPORTANT]
The plugin only supports projects that use a 2.x version of the Spring Boot plugin.

include::31-usage.adoc[]

include::32-extension.adoc[]

include::33-tasks.adoc[]

include::34-examples.adoc[]


=== 5.0.0-M1

*Date of Release:* June 30, 2016

*Scope:* First milestone release of JUnit 5

==== Summary of Changes

===== JUnit Platform

- `org.junit.platform.console.ConsoleRunner` has been renamed to `ConsoleLauncher`

===== JUnit Jupiter

- `ExtensionContext.getElement()` now returns `Optional<AnnotatedElement>`.

===== JUnit Vintage

- ???

Document package migration in release notes

=== 5.0.0-M1

*Date of Release:* June 30, 2016

*Scope:* First milestone release of JUnit 5

==== Summary of Changes

The following is a list of global changes. For details regarding changes specific to the
Platform, Jupiter, and Vintage, consult the dedicated subsections.

.Package Migration
[cols="20,80"]
|===
| Old Base Package                 | New Base Package

| `org.junit.gen5.api`           | `org.junit.jupiter.api`
| `org.junit.gen5.commons`       | `org.junit.platform.commons`
| `org.junit.gen5.console`       | `org.junit.platform.console`
| `org.junit.gen5.engine.junit4` | `org.junit.vintage.engine`
| `org.junit.gen5.engine.junit5` | `org.junit.jupiter.engine`
| `org.junit.gen5.engine`        | `org.junit.platform.engine`
| `org.junit.gen5.gradle`        | `org.junit.platform.gradle.plugin`
| `org.junit.gen5.junit4.runner` | `org.junit.platform.runner`
| `org.junit.gen5.launcher`      | `org.junit.platform.launcher`
| `org.junit.gen5.surefire`      | `org.junit.platform.surefire.provider`
|===

===== JUnit Platform

- `org.junit.platform.console.ConsoleRunner` renamed to `ConsoleLauncher`

===== JUnit Jupiter

- `ExtensionContext.getElement()` now returns `Optional<AnnotatedElement>`

===== JUnit Vintage

- ???


IronBee Reference Manual
========================
Brian Rectanus, Ivan Ristic
v0.9.0, 2010-2014
:doctype: book
:encoding: utf-8
:toc2:
:toclevels: 3

include::ch-preface.adoc[]

include::ch-introduction.adoc[]

include::ch-server-configuration.adoc[]

include::ch-ironbee-configuration.adoc[]

include::ch-diagnostics-devel-tools.adoc[]

include::ch-inspection.adoc[]

include::ch-rule-reference.adoc[]

include::ch-extending-ironbee.adoc[]

include::ch-installation-guide.adoc[]

include::ap-configuration-examples.adoc[]

include::ap-todo.adoc[]

include::ap-comparison-with-modsecurity.adoc[]

Remove Ivan as doc author (sorry Ivan, old asciidoc only supports one author).

IronBee Reference Manual
========================
Brian Rectanus
v0.9.0, 2010-2014
:doctype: book
:encoding: utf-8
:toc2:
:toclevels: 3

include::ch-preface.adoc[]

include::ch-introduction.adoc[]

include::ch-server-configuration.adoc[]

include::ch-ironbee-configuration.adoc[]

include::ch-diagnostics-devel-tools.adoc[]

include::ch-inspection.adoc[]

include::ch-rule-reference.adoc[]

include::ch-extending-ironbee.adoc[]

include::ch-installation-guide.adoc[]

include::ap-configuration-examples.adoc[]

include::ap-todo.adoc[]

include::ap-comparison-with-modsecurity.adoc[]


[[new]]
= What's New in Spring Security 5.8

Spring Security 5.8 provides a number of new features.
Below are the highlights of the release.

* https://github.com/spring-projects/spring-security/pull/11638[gh-11638] - Refresh remote JWK when unknown KID error occurs
* https://github.com/spring-projects/spring-security/pull/11782[gh-11782] - @WithMockUser Supported as Merged Annotation
* https://github.com/spring-projects/spring-security/issues/11661[gh-11661] - Configurable authentication converter for resource-servers with token introspection
* https://github.com/spring-projects/spring-security/pull/11771[gh-11771] - `HttpSecurityDsl` should support `apply` method
* https://github.com/spring-projects/spring-security/pull/11232[gh-11232] - `ClientRegistrations#rest` defines 30s connect and read timeouts
* https://github.com/spring-projects/spring-security/pull/11464[gh-11464] - Remember Me supports SHA256 algorithm

Update What's New for 5.8

[[new]]
= What's New in Spring Security 5.8

Spring Security 5.8 provides a number of new features.
Below are the highlights of the release.

* https://github.com/spring-projects/spring-security/pull/11638[gh-11638] - Refresh remote JWK when unknown KID error occurs
* https://github.com/spring-projects/spring-security/pull/11782[gh-11782] - @WithMockUser Supported as Merged Annotation
* https://github.com/spring-projects/spring-security/issues/11661[gh-11661] - Configurable authentication converter for resource-servers with token introspection
* https://github.com/spring-projects/spring-security/pull/11771[gh-11771] - `HttpSecurityDsl` should support `apply` method
* https://github.com/spring-projects/spring-security/pull/11232[gh-11232] - `ClientRegistrations#rest` defines 30s connect and read timeouts
* https://github.com/spring-projects/spring-security/pull/11464[gh-11464] - Remember Me supports SHA256 algorithm
* https://github.com/spring-projects/spring-security/pull/11908[gh-11908] - Make X-Xss-Protection header value configurable in ServerHttpSecurity


= Full Ergodox EZ build environment for Void Linux

Create a chroot like so:

[source]
xbps-install -S -R https://repo.voidlinux.eu/current -r /tmp/foo base-voidstrap

Then you can run.

INFO: /tmp/foo here must be absolute. Limitation of xbps-uunshare.

[source]
xbps-uunshare /tmp/foo xbps-install -- -S gcc wget unzip dfu-programmer zip make teensy_loader_cli git avr-gcc avr-libc

You can fetch qmk like so:

[source]
xbps-uunshare /tmp/foo git -- clone --depth 1 https://github.com/qmk/qmk_firmware.git

Build with

[source]
xbps-uunshare /tmp/foo /bin/sh -- -c '(cd /qmk_firmware && make ergodox-ez-default-teensy)'

Remove reference to git, prefer -b in further statement

= Full Ergodox EZ build environment for Void Linux

Create a chroot like so:

[source]
xbps-install -S -R https://repo.voidlinux.eu/current -r /tmp/foo base-voidstrap

Then you can run.

INFO: /tmp/foo here must be absolute. Limitation of xbps-uunshare.

[source]
xbps-uunshare /tmp/foo xbps-install -- -S gcc wget unzip dfu-programmer zip make teensy_loader_cli avr-gcc avr-libc

You can fetch qmk like so:

[source]
xbps-uunshare /tmp/foo git -- clone --depth 1 https://github.com/qmk/qmk_firmware.git

Build with

[source]
xbps-uunshare /tmp/foo /bin/sh -- -c '(cd /qmk_firmware && make ergodox-ez-default-teensy)'


[[release-notes-5.3.0-M1]]
== 5.3.0-M1

*Date of Release:* ❓

*Scope:* ❓

For a complete list of all _closed_ issues and pull requests for this release, consult the
link:{junit5-repo}+/milestone/23?closed=1+[5.3 M1] milestone page in the JUnit repository
on GitHub.

[[release-notes-5.3.0-M1-junit-platform]]
=== JUnit Platform

==== Bug Fixes

* ❓

==== Deprecations and Breaking Changes

* ❓

==== New Features and Improvements

* ❓

[[release-notes-5.3.0-M1-junit-jupiter]]
=== JUnit Jupiter

==== Bug Fixes

* ❓

==== Deprecations and Breaking Changes

* ❓

==== New Features and Improvements

* New `assertThrows` methods in `Assertions` provide a more specific failure
  message if the lambda returns a result instead of throwing the expected
  exception.

[[release-notes-5.3.0-M1-junit-vintage]]
=== JUnit Vintage

==== Bug Fixes

* ❓

==== Deprecations and Breaking Changes

* ❓

==== New Features and Improvements

* ❓

Document `--details verbose` stacktrace emission fix

[[release-notes-5.3.0-M1]]
== 5.3.0-M1

*Date of Release:* ❓

*Scope:* ❓

For a complete list of all _closed_ issues and pull requests for this release, consult the
link:{junit5-repo}+/milestone/23?closed=1+[5.3 M1] milestone page in the JUnit repository
on GitHub.

[[release-notes-5.3.0-M1-junit-platform]]
=== JUnit Platform

==== Bug Fixes

* Full stacktrace is printed to the console, when running the `ConsoleLauncher`
  in `--details verbose` mode.

==== Deprecations and Breaking Changes

* ❓

==== New Features and Improvements

* ❓

[[release-notes-5.3.0-M1-junit-jupiter]]
=== JUnit Jupiter

==== Bug Fixes

* ❓

==== Deprecations and Breaking Changes

* ❓

==== New Features and Improvements

* New `assertThrows` methods in `Assertions` provide a more specific failure
  message if the lambda returns a result instead of throwing the expected
  exception.

[[release-notes-5.3.0-M1-junit-vintage]]
=== JUnit Vintage

==== Bug Fixes

* ❓

==== Deprecations and Breaking Changes

* ❓

==== New Features and Improvements

* ❓


==== Changes to Configuration Model

In preparation for Hibernate 5.2 support the previous "SessionFactoryBean" notion has been removed. Now if you wish to customize `SessionFactory` creation you should instead register a custom `org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory` in Spring.

Update upgrade notes regarding Hibernate 5.2

==== Changes to Configuration Model

In preparation for Hibernate 5.2 support the previous "SessionFactoryBean" notion has been removed. Now if you wish to customize `SessionFactory` creation you should instead register a custom `org.grails.orm.hibernate.connections.HibernateConnectionSourceFactory` in Spring.

==== IdentityEnumType Handling Changed

Previous versions of GORM shipped with a `org.grails.orm.hibernate.cfg.IdentityEnumType` class for altering the handling of enums. In order to support different versions of Hibernate 5.x which feature different signatures for the `org.hibernate.usertype.UserType` interface this class has been removed.

If you wish to obtain the same functionality you need to change your `mapping` block to:

[source,groovy]
----
static mapping = {
   myEnum enumType:"identity"
}
----

==== Changes to Support Hibernate 5.2

Hibernate 5.2 includes many breaking API changes, in order to support Hibernate 5.2 several classes have been removed or rewritten. Including:

* `org.grails.orm.hibernate.proxy.GroovyAwareJavassistLazyInitializer`
* `org.grails.orm.hibernate.proxy.GroovyAwareJavassistProxyFactory`
* `org.grails.orm.hibernate.persister.entity.GroovyAwareJoinedSubclassEntityPersister`
* `org.grails.orm.hibernate.persister.entity.GroovyAwareSingleTableEntityPersister`

Most of these classes are considered internal, however if you have extended or references these classes you may need to modify your code appropriately.


[[vm-max-map-count]]
=== Virtual memory

Elasticsearch uses a <<default_fs,`mmapfs`>> directory by
default for 64bit systems to store its indices.  The default operating system limits on mmap
counts is likely to be too low, which may result in out of memory exceptions.

On Linux, you can increase the limits by running the following command as
`root`:

[source,sh]
-------------------------------------
sysctl -w vm.max_map_count=262144
-------------------------------------

To set this value permanently, update the `vm.max_map_count` setting in
`/etc/sysctl.conf`.  To verify after rebooting, run `sysctl vm.max_map_count`.

The RPM and Debian packages will configure this setting automatically.  No
further configuration is required.

Remove another reference to 64-bit systems.

[[vm-max-map-count]]
=== Virtual memory

Elasticsearch uses a <<default_fs,`mmapfs`>> directory by
default to store its indices.  The default operating system limits on mmap
counts is likely to be too low, which may result in out of memory exceptions.

On Linux, you can increase the limits by running the following command as
`root`:

[source,sh]
-------------------------------------
sysctl -w vm.max_map_count=262144
-------------------------------------

To set this value permanently, update the `vm.max_map_count` setting in
`/etc/sysctl.conf`.  To verify after rebooting, run `sysctl vm.max_map_count`.

The RPM and Debian packages will configure this setting automatically.  No
further configuration is required.


===== Delete Amazon Load Balancer

====== Type

+deleteAmazonLoadBalancer+

====== Description

This stage provides orchestration for deleting an Amazon Elastic Load Balancer. This is a destructive process, which cannot be reversed. If the provided +loadBalancerName+ is not found for _all_ provided +regions+, the operation will fail validation.

CAUTION: This operation marks the end of a Load Balancer's life. The process cannot be undone, and the configuration cannot be reconstituted. A load balancer of the same configuration will need to be recreated from scratch.

====== Services Involved

_orca_, _kato_, _oort_

====== Steps

_deleteAmazonLoadBalancer_, _forceCacheRefresh_, _monitorDelete_, _sendNotification_

====== Example Request Body
[source,javascript]
----
{
  "type": "deleteAmazonLoadBalancer",
  "loadBalancerName": "kato-main-frontend",
  "regions": ["us-east-1", "us-west-1", "us-west-2", "eu-west-1"],
  "credentials": "test"
}
----

====== Description of inputs

[width="100%",frame="topbot",options="header,footer"]
|======================
|Key               | Type   | Required | Value
|loadBalancerName  | string | true     | The name of the load balancer.
|regions           | array  | true     | An object that provides a named region to array of region names. For example, +["us-east-1", "us-west-1"]+ will inform the deployment engine to delete the ELB those specific regions.
|credentials       | string | true     | The named account credentials that are to be used for this operation.
|======================

Update and fix errors in delete ELB docs

===== Delete Amazon Load Balancer

====== Type

+deleteAmazonLoadBalancer+

====== Description

This stage provides orchestration for deleting an Amazon Elastic Load Balancer. This is a destructive process, which cannot be reversed.

CAUTION: This operation marks the end of a Load Balancer's life. The process cannot be undone, and the configuration cannot be reconstituted. A load balancer of the same configuration will need to be recreated from scratch.

====== Services Involved

_orca_, _kato_, _oort_

====== Steps

_deleteAmazonLoadBalancer_, _forceCacheRefresh_, _monitorDelete_

====== Example Request Body
[source,javascript]
----
{
  "type": "deleteAmazonLoadBalancer",
  "loadBalancerName": "kato-main-frontend",
  "regions": ["us-east-1", "us-west-1", "us-west-2", "eu-west-1"],
  "credentials": "test"
}
----

====== Description of inputs

[width="100%",frame="topbot",options="header,footer"]
|======================
|Key               | Type   | Required | Value
|loadBalancerName  | string | true     | The name of the load balancer.
|regions           | array  | true     | An object that provides a named region to array of region names. For example, +["us-east-1", "us-west-1"]+ will inform the deployment engine to delete from those specific regions.
|credentials       | string | true     | The named account credentials that are to be used for this operation.
|======================


[[breaking_70_plugins_changes]]
=== Plugins changes

==== Azure Repository plugin

* The legacy azure settings which where starting with `cloud.azure.storage.` prefix have been removed.
This includes `account`, `key`, `default` and `timeout`.
You need to use settings which are starting with `azure.client.` prefix instead.

* Global timeout setting `cloud.azure.storage.timeout` has been removed.
You must set it per azure client instead. Like `azure.client.default.timeout: 10s` for example.

See {plugins}/repository-azure-usage.html#repository-azure-repository-settings[Azure Repository settings].

==== Google Cloud Storage Repository plugin

* The repository settings `application_name`, `connect_timeout` and `read_timeout` have been removed and
must now be specified in the client settings instead.

See {plugins}/repository-gcs-client.html#repository-gcs-client[Google Cloud Storage Client Settings].

Fix broken cross link in documentation

[[breaking_70_plugins_changes]]
=== Plugins changes

==== Azure Repository plugin

* The legacy azure settings which where starting with `cloud.azure.storage.` prefix have been removed.
This includes `account`, `key`, `default` and `timeout`.
You need to use settings which are starting with `azure.client.` prefix instead.

* Global timeout setting `cloud.azure.storage.timeout` has been removed.
You must set it per azure client instead. Like `azure.client.default.timeout: 10s` for example.

See {plugins}/repository-azure-repository-settings.html#repository-azure-repository-settings[Azure Repository settings].

==== Google Cloud Storage Repository plugin

* The repository settings `application_name`, `connect_timeout` and `read_timeout` have been removed and
must now be specified in the client settings instead.

See {plugins}/repository-gcs-client.html#repository-gcs-client[Google Cloud Storage Client Settings].


= Spring Cloud Data Flow Reference Guide
Sabby Anandan; Marius Bogoevici; Eric Bottard; Mark Fisher; Ilayaperumal Gopinathan; Gunnar Hillert; Mark Pollack; Patrick Peralta; Glenn Renfro; Thomas Risberg; Dave Syer; David Turanski; Janne Valkealahti
:doctype: book
:toc:
:toclevels: 4
:source-highlighter: prettify
:numbered:
:icons: font
:hide-uri-scheme:

:spring-cloud-dataflow-docs: http://docs.spring.io/spring-cloud-dataflow/docs/{project-version}/reference
:spring-cloud-dataflow-docs-current: http://docs.spring.io/spring-cloud-dataflow/docs/current-SNAPSHOT/reference/html/
:github-repo: spring-projects/spring-cloud-dataflow
:github-code: http://github.com/{github-repo}

:dataflow-asciidoc: https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/master/spring-cloud-dataflow-docs/src/main/asciidoc

// ======================================================================================

include::preface.adoc[]
include::spring-cloud-dataflow-overview.adoc[]
include::architecture.adoc[]
include::getting-started.adoc[]
include::streams.adoc[]
include::tasks.adoc[]
include::dashboard.adoc[]
include::howto.adoc[]
include::appendix.adoc[]

// ======================================================================================

Fix GitHub repo url in adoc files

= Spring Cloud Data Flow Reference Guide
Sabby Anandan; Marius Bogoevici; Eric Bottard; Mark Fisher; Ilayaperumal Gopinathan; Gunnar Hillert; Mark Pollack; Patrick Peralta; Glenn Renfro; Thomas Risberg; Dave Syer; David Turanski; Janne Valkealahti
:doctype: book
:toc:
:toclevels: 4
:source-highlighter: prettify
:numbered:
:icons: font
:hide-uri-scheme:

:spring-cloud-dataflow-docs: http://docs.spring.io/spring-cloud-dataflow/docs/{project-version}/reference
:spring-cloud-dataflow-docs-current: http://docs.spring.io/spring-cloud-dataflow/docs/current-SNAPSHOT/reference/html/
:github-repo: spring-cloud/spring-cloud-dataflow
:github-code: http://github.com/{github-repo}

:dataflow-asciidoc: https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/master/spring-cloud-dataflow-docs/src/main/asciidoc

// ======================================================================================

include::preface.adoc[]
include::spring-cloud-dataflow-overview.adoc[]
include::architecture.adoc[]
include::getting-started.adoc[]
include::streams.adoc[]
include::tasks.adoc[]
include::dashboard.adoc[]
include::howto.adoc[]
include::appendix.adoc[]

// ======================================================================================


//
// Copyright (c) 2016-2017 Eclipse Microprofile Contributors:
// Red Hat
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

= Interoperable JWT RBAC for Microprofile
:author: Scott Stark; Pedro Igor Silva
:email: sstark@redhat.com
:revnumber: 1.0
:revdate: 2017-09-14
:revremark: Proposed Final Draft
:version-label!:
:sectanchors:
:doctype: book
:license: Apache License v2.0
:source-highlighter: coderay
:toc: left
:toclevels: 4
:sectnumlevels: 4
ifdef::backend-pdf[]
:pagenums:
endif::[]

include::license-alv2.asciidoc[]

include::background.asciidoc[]

include::interoperability.asciidoc[]

include::future-directions.asciidoc[]

include::sample-impl.asciidoc[]

Update title and email. Add section numbers.

//
// Copyright (c) 2016-2017 Eclipse Microprofile Contributors:
// Red Hat
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

= Eclipse MicroProfile Interoperable JWT RBAC
:author: Scott Stark; Pedro Igor Silva
:email: microprofile@googlegroups.com
:revnumber: 1.0
:revdate: 2017-09-14
:revremark: Proposed Final Draft
:version-label!:
:sectanchors:
:doctype: book
:license: Apache License v2.0
:source-highlighter: coderay
:toc: left
:toclevels: 4
:sectnumlevels: 4
ifdef::backend-pdf[]
:pagenums:
:numbered:
endif::[]

include::license-alv2.asciidoc[]

include::background.asciidoc[]

include::interoperability.asciidoc[]

include::future-directions.asciidoc[]

include::sample-impl.asciidoc[]


[[search-aggregations-metrics-geobounds-aggregation]]
=== Geo Bounds Aggregation

A metric aggregation that computes the bounding box containing all geo_point values for a field.

.Experimental!
[IMPORTANT]
=====
This feature is marked as experimental, and may be subject to change in the
future.  If you use this feature, please let us know your experience with it!
=====

Example:

[source,js]
--------------------------------------------------
{
    "query" : {
        "match" : { "business_type" : "shop" }
    },
    "aggs" : {
        "viewport" : {
            "geo_bounds" : {
                "field" : "location" <1>
                "wrap_longitude" : "true" <2>
            }
        }
    }
}
--------------------------------------------------

<1> The `geo_bounds` aggregation specifies the field to use to obtain the bounds
<2> `wrap_longitude` is an optional parameter which specifies whether the bounding box should be allowed to overlap the international date line. The default value is `true`

The above aggregation demonstrates how one would compute the bounding box of the location field for all documents with a business type of shop

The response for the above aggregation:

[source,js]
--------------------------------------------------
{
    ...

    "aggregations": {
        "viewport": {
            "bounds": {
                "top_left": {
                    "lat": 80.45,
                    "lon": -160.22
                },
                "bottom_right": {
                    "lat": 40.65,
                    "lon": 42.57
                }
            }
        }
    }
}
--------------------------------------------------

Fix missing comma and boolean true

[[search-aggregations-metrics-geobounds-aggregation]]
=== Geo Bounds Aggregation

A metric aggregation that computes the bounding box containing all geo_point values for a field.

.Experimental!
[IMPORTANT]
=====
This feature is marked as experimental, and may be subject to change in the
future.  If you use this feature, please let us know your experience with it!
=====

Example:

[source,js]
--------------------------------------------------
{
    "query" : {
        "match" : { "business_type" : "shop" }
    },
    "aggs" : {
        "viewport" : {
            "geo_bounds" : {
                "field" : "location", <1>
                "wrap_longitude" : true <2>
            }
        }
    }
}
--------------------------------------------------

<1> The `geo_bounds` aggregation specifies the field to use to obtain the bounds
<2> `wrap_longitude` is an optional parameter which specifies whether the bounding box should be allowed to overlap the international date line. The default value is `true`

The above aggregation demonstrates how one would compute the bounding box of the location field for all documents with a business type of shop

The response for the above aggregation:

[source,js]
--------------------------------------------------
{
    ...

    "aggregations": {
        "viewport": {
            "bounds": {
                "top_left": {
                    "lat": 80.45,
                    "lon": -160.22
                },
                "bottom_right": {
                    "lat": 40.65,
                    "lon": 42.57
                }
            }
        }
    }
}
--------------------------------------------------


:libVersion: 0.1.7

# ADAL

image:https://api.bintray.com/packages/jmspt/maven/adal/images/download.svg[Build Status,link=https://bintray.com/jmspt/maven/adal/_latestVersion]

Android Development Accelaration Library

Add the dependency in the form:
[source, groovy, subs='attributes']
dependencies {
  /* Include all modules */
  compile 'com.massivedisaster.adal:adal:{libVersion}'
  /* Specific modules*/
  compile 'com.massivedisaster.adal:adal-accounts:{libVersion}'
  compile 'com.massivedisaster.adal:adal-adapters:{libVersion}'
  compile 'com.massivedisaster.adal:adal-analytics:{libVersion}'
  compile 'com.massivedisaster.adal:adal-bus:{libVersion}'
  compile 'com.massivedisaster.adal:adal-fragments:{libVersion}'
  compile 'com.massivedisaster.adal:adal-managers:{libVersion}'
  compile 'com.massivedisaster.adal:adal-network:{libVersion}'
  compile 'com.massivedisaster.adal:adal-utils:{libVersion}'
  compile 'com.massivedisaster.adal:adal-location:{libVersion}'
}

Add readme reference to license.

:libVersion: 0.1.7

# ADAL

image:https://api.bintray.com/packages/jmspt/maven/adal/images/download.svg[Build Status,link=https://bintray.com/jmspt/maven/adal/_latestVersion]

Android Development Accelaration Library

Add the dependency in the form:
[source, groovy, subs='attributes']
dependencies {
  /* Include all modules */
  compile 'com.massivedisaster.adal:adal:{libVersion}'
  /* Specific modules*/
  compile 'com.massivedisaster.adal:adal-accounts:{libVersion}'
  compile 'com.massivedisaster.adal:adal-adapters:{libVersion}'
  compile 'com.massivedisaster.adal:adal-analytics:{libVersion}'
  compile 'com.massivedisaster.adal:adal-bus:{libVersion}'
  compile 'com.massivedisaster.adal:adal-fragments:{libVersion}'
  compile 'com.massivedisaster.adal:adal-managers:{libVersion}'
  compile 'com.massivedisaster.adal:adal-network:{libVersion}'
  compile 'com.massivedisaster.adal:adal-utils:{libVersion}'
  compile 'com.massivedisaster.adal:adal-location:{libVersion}'
}

### License
[GNU LESSER GENERAL PUBLIC LICENSE](LICENSE.md)


= clojuTRE
clojuTRE
2017-09-02
:jbake-type: event
:jbake-edition: 2017
:jbake-link: http://clojutre.org/2017/
:jbake-location: Tampere, Finland
:jbake-start: 2017-09-92
:jbake-end: 2017-09-02

clojuTRE is a free Clojure conference organized by http://www.metosin.fi/[Metosin]. The event has single track, late start, short talks (20 minutes and 5 minutes Q&A) and a funky after party for networking, discussions and draft beer. We welcome both newbies and seasoned Clojurists.

Fix type on Clojutre start date

= clojuTRE
clojuTRE
2017-09-02
:jbake-type: event
:jbake-edition: 2017
:jbake-link: http://clojutre.org/2017/
:jbake-location: Tampere, Finland
:jbake-start: 2017-09-02
:jbake-end: 2017-09-02

clojuTRE is a Clojure conference organized by http://www.metosin.fi/[Metosin]. The event has single track, late start, short talks (20 minutes and 5 minutes Q&A) and a funky after party for networking, discussions and draft beer. We welcome both newbies and seasoned Clojurists.


; RUN: llc -mtriple x86_64-linux %s -o - | FileCheck %s
define i32 @f(i1 %foo, i16* %tm_year2, i8* %bar, i16 %zed, i32 %zed2) {
entry:
  br i1 %foo, label %return, label %if.end

if.end:
  %rem = srem i32 %zed2, 100
  %conv3 = trunc i32 %rem to i16
  store i16 %conv3, i16* %tm_year2
  %sext = shl i32 %rem, 16
  %conv5 = ashr exact i32 %sext, 16
  %div = sdiv i32 %conv5, 10
  %conv6 = trunc i32 %div to i8
  store i8 %conv6, i8* %bar
  br label %return

return:
  %retval.0 = phi i32 [ 0, %if.end ], [ -1, %entry ]
  ret i32 %retval.0
}

; We were miscompiling this and using %ax instead of %cx in the movw.
; CHECK: movswl	%cx, %ecx
; CHECK: movw	%cx, (%rsi)
; CHECK: movslq	%ecx, %rcx

Add a cpu to try to fix the atom builder.

; RUN: llc -mtriple x86_64-linux -mcpu core %s -o - | FileCheck %s
define i32 @f(i1 %foo, i16* %tm_year2, i8* %bar, i16 %zed, i32 %zed2) {
entry:
  br i1 %foo, label %return, label %if.end

if.end:
  %rem = srem i32 %zed2, 100
  %conv3 = trunc i32 %rem to i16
  store i16 %conv3, i16* %tm_year2
  %sext = shl i32 %rem, 16
  %conv5 = ashr exact i32 %sext, 16
  %div = sdiv i32 %conv5, 10
  %conv6 = trunc i32 %div to i8
  store i8 %conv6, i8* %bar
  br label %return

return:
  %retval.0 = phi i32 [ 0, %if.end ], [ -1, %entry ]
  ret i32 %retval.0
}

; We were miscompiling this and using %ax instead of %cx in the movw.
; CHECK: movswl	%cx, %ecx
; CHECK: movw	%cx, (%rsi)
; CHECK: movslq	%ecx, %rcx


; a load or store of a pointer indicates that the pointer is not null.
; Any succeeding uses of the pointer should get this info

; RUN: llvm-as < %s | opt -cee -instcombine -simplifycfg | llvm-dis | not grep br

implementation   ; Functions:

int %nullptr(int* %j) {
bb0:
	store int 7, int* %j               ; j != null
	%cond220 = seteq int* %j, null     ; F
	br bool %cond220, label %bb3, label %bb4  ; direct branch

bb3:
	ret int 4                          ; Dead code
bb4:
	ret int 3                          ; Live code
}

Make the test test what it is supposed to

; a load or store of a pointer indicates that the pointer is not null.
; Any succeeding uses of the pointer should get this info

; RUN: llvm-as < %s | opt -cee -instcombine -simplifycfg | llvm-dis | not grep br

implementation   ; Functions:

declare void %foo()
declare void %bar()

int %nullptr(int* %j) {
bb0:
	store int 7, int* %j               ; j != null
	%cond220 = seteq int* %j, null     ; F
	br bool %cond220, label %bb3, label %bb4  ; direct branch

bb3:
	call void %foo()
	ret int 4                          ; Dead code
bb4:
	call void %bar()
	ret int 3                          ; Live code
}


; RUN: lli -jit-kind=orc-lazy %s; [ $? -eq 30 ]
define i32 @baz() {
entry:
  ret i32 2
}

define i32 @bar() {
entry:
  %call = call i32 @baz()
  %mul = mul nsw i32 3, %call
  ret i32 %mul
}

define i32 @foo() {
entry:
  %call = call i32 @bar()
  %mul = mul nsw i32 5, %call
  ret i32 %mul
}

define i32 @main(i32 %argc, i8** %argv) {
entry:
  %call = call i32 @foo()
  ret i32 %call
}

Make exit-code test use same mechanism as existing one.

; RUN: sh -c 'lli -jit-kind=orc-lazy %s; echo $?' | FileCheck %s
; CHECK: {{^30$}}
define i32 @baz() {
entry:
  ret i32 2
}

define i32 @bar() {
entry:
  %call = call i32 @baz()
  %mul = mul nsw i32 3, %call
  ret i32 %mul
}

define i32 @foo() {
entry:
  %call = call i32 @bar()
  %mul = mul nsw i32 5, %call
  ret i32 %mul
}

define i32 @main(i32 %argc, i8** %argv) {
entry:
  %call = call i32 @foo()
  ret i32 %call
}


; RUN: opt -module-summary %s -o %t1.bc
; RUN: opt -module-summary -o %t2.bc %S/Inputs/not-prevailing.ll
; RUN: not --crash llvm-lto2 run -o %t3.bc %t1.bc %t2.bc -r %t1.bc,bar,px \
; RUN:     -r %t1.bc,foo,x -r %t2.bc,foo,x -save-temps 2>&1 | FileCheck %s

; CHECK: Assertion {{.*}} "Symbol with interposable and available_externally linkages"' failed

target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define available_externally i32 @foo() {
  ret i32 1
}

define i32 @bar() {
  %1 = call i32 @foo()
  ret i32 %1
}

Fix test failure introduced in r327041

; RUN: opt -module-summary %s -o %t1.bc
; RUN: opt -module-summary -o %t2.bc %S/Inputs/not-prevailing.ll
; RUN: not --crash llvm-lto2 run -o %t3.bc %t1.bc %t2.bc -r %t1.bc,bar,px \
; RUN:     -r %t1.bc,foo,x -r %t2.bc,foo,x -save-temps 2>&1 | FileCheck %s

; CHECK: "Symbol with interposable and available_externally linkages"

target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define available_externally i32 @foo() {
  ret i32 1
}

define i32 @bar() {
  %1 = call i32 @foo()
  ret i32 %1
}


; RUN: llc < %s | FileCheck %s

define i8 @foobar(double %d, double* %x) {
entry:
  %tmp2 = load double* %x, align 8
  %cmp = fcmp oeq double %tmp2, %d
  %conv3 = zext i1 %cmp to i8
  ret i8 %conv3
}

; test that the load is folded.
; CHECK: ucomisd	(%rdi), %xmm0

Add -march to fix the bots.

; RUN: llc -march=x86-64 < %s | FileCheck %s

define i8 @foobar(double %d, double* %x) {
entry:
  %tmp2 = load double* %x, align 8
  %cmp = fcmp oeq double %tmp2, %d
  %conv3 = zext i1 %cmp to i8
  ret i8 %conv3
}

; test that the load is folded.
; CHECK: ucomisd	(%rdi), %xmm0


; REQUIRES: x86
; RUN: llvm-as %s -o %t.o

; RUN: ld.lld %t.o -o %t.so -shared
; RUN: llvm-objdump -d -section=".text" -no-leading-addr -no-show-raw-insn %t.so | FileCheck %s

; RUN: ld.lld -mllvm -mcpu=znver1 %t.o -o %m.so -shared
; RUN: llvm-objdump -d -section=".text" -no-leading-addr -no-show-raw-insn %m.so | FileCheck -check-prefix=ZNVER1 %s

; CHECK: nop{{$}}

; ZNVER1: nopw

target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define void @foo() #0 {
entry:
  call void asm sideeffect ".p2align        4, 0x90", "~{dirflag},~{fpsr},~{flags}"()
  ret void
}

attributes #0 = { "no-frame-pointer-elim"="true" }

Fix lit substitution in test.

; REQUIRES: x86
; RUN: llvm-as %s -o %t.o

; RUN: ld.lld %t.o -o %t.so -shared
; RUN: llvm-objdump -d -section=".text" -no-leading-addr -no-show-raw-insn %t.so | FileCheck %s

; RUN: ld.lld -mllvm -mcpu=znver1 %t.o -o %t.znver1.so -shared
; RUN: llvm-objdump -d -section=".text" -no-leading-addr -no-show-raw-insn %t.znver1.so | FileCheck -check-prefix=ZNVER1 %s

; CHECK: nop{{$}}

; ZNVER1: nopw

target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define void @foo() #0 {
entry:
  call void asm sideeffect ".p2align        4, 0x90", "~{dirflag},~{fpsr},~{flags}"()
  ret void
}

attributes #0 = { "no-frame-pointer-elim"="true" }


; RUN: llc < %s -mtriple=i686-pc-linux | FileCheck %s

%struct.s = type { double, float }

define void @g() nounwind {
entry:
  %tmp = alloca %struct.s, align 4
  call void @f(%struct.s* inreg sret %tmp, i32 inreg 41, i32 inreg 42, i32 43)
  ret void
  ; CHECK: g:
  ; CHECK: subl {{.*}}, %esp
  ; CHECK-NEXT: $43, (%esp)
  ; CHECK-NEXT: leal    16(%esp), %eax
  ; CHECK-NEXT: movl    $41, %edx
  ; CHECK-NEXT: movl    $42, %ecx
  ; CHECK-NEXT: calll   f
}

declare void @f(%struct.s* inreg sret, i32 inreg, i32 inreg, i32)

Add a cpu to the test. Should fix the atom bot.

; RUN: llc < %s -mtriple=i686-pc-linux -mcpu=corei7 | FileCheck %s

%struct.s = type { double, float }

define void @g() nounwind {
entry:
  %tmp = alloca %struct.s, align 4
  call void @f(%struct.s* inreg sret %tmp, i32 inreg 41, i32 inreg 42, i32 43)
  ret void
  ; CHECK: g:
  ; CHECK: subl {{.*}}, %esp
  ; CHECK-NEXT: $43, (%esp)
  ; CHECK-NEXT: leal    16(%esp), %eax
  ; CHECK-NEXT: movl    $41, %edx
  ; CHECK-NEXT: movl    $42, %ecx
  ; CHECK-NEXT: calll   f
}

declare void @f(%struct.s* inreg sret, i32 inreg, i32 inreg, i32)


; RUN: llc < %s -march=x86 | FileCheck %s

%struct.s = type { double, float }

define void @g() nounwind {
entry:
  %tmp = alloca %struct.s, align 4
  call void @f(%struct.s* inreg sret %tmp, i32 inreg 41, i32 inreg 42, i32 43)
  ret void
  ; CHECK: g:
  ; CHECK: subl {{.*}}, %esp
  ; CHECK-NEXT: $43, (%esp)
  ; CHECK-NEXT: leal    16(%esp), %eax
  ; CHECK-NEXT: movl    $41, %edx
  ; CHECK-NEXT: movl    $42, %ecx
  ; CHECK-NEXT: calll   f
}

declare void @f(%struct.s* inreg sret, i32 inreg, i32 inreg, i32)

Add a triple to the test.

; RUN: llc < %s -mtriple=i686-pc-linux | FileCheck %s

%struct.s = type { double, float }

define void @g() nounwind {
entry:
  %tmp = alloca %struct.s, align 4
  call void @f(%struct.s* inreg sret %tmp, i32 inreg 41, i32 inreg 42, i32 43)
  ret void
  ; CHECK: g:
  ; CHECK: subl {{.*}}, %esp
  ; CHECK-NEXT: $43, (%esp)
  ; CHECK-NEXT: leal    16(%esp), %eax
  ; CHECK-NEXT: movl    $41, %edx
  ; CHECK-NEXT: movl    $42, %ecx
  ; CHECK-NEXT: calll   f
}

declare void @f(%struct.s* inreg sret, i32 inreg, i32 inreg, i32)


; RUN: as < %s | opt -cee

implementation

declare void %foo(int)

void %test(int %A, bool %C) {
	br bool %C, label %bb3, label %bb1
bb1:                                    ;[#uses=0]
        %cond212 = setgt int %A, 9              ; <bool> [#uses=1]
        br bool %cond212, label %bb2, label %bb3

bb2:                                    ;[#uses=1]
	%cond = setgt int %A, 7
        br bool %cond, label %bb3, label %bb7

bb3:                                    ;[#uses=1]
	%X = phi int [ 0, %0], [ 12, %bb1]
        call void %foo( int %X )
        br label %bb7

bb7:                                    ;[#uses=2]
        ret void
}

Fix testcase to accurately expose bug

; RUN: as < %s | opt -cee

implementation

declare void %foo(int)

void %test(int %A, bool %C) {
	br bool %C, label %bb0, label %bb1
bb0:
	br label %bb3
Unreachable:
	br label %bb2
bb1:                                    ;[#uses=0]
        %cond212 = setgt int %A, 9              ; <bool> [#uses=1]
        br bool %cond212, label %bb2, label %bb7

bb2:                                    ;[#uses=1]
	%cond = setgt int %A, 7
        br bool %cond, label %bb3, label %bb7

bb3:                                    ;[#uses=1]
	%X = phi int [ 0, %bb0], [ 12, %bb2]
        call void %foo( int %X )
        br label %bb7

bb7:                                    ;[#uses=2]
        ret void
}


; Test to ensure that non-prevailing weak aliasee is kept as a weak definition
; when the alias is not dead.
; RUN: opt -module-summary %s -o %t1.bc
; RUN: llvm-lto2 run %t1.bc \
; RUN:	 -r=%t1.bc,__a,lx \
; RUN:	 -r=%t1.bc,__b,l \
; RUN:	 -r=%t1.bc,a,plx \
; RUN:	 -r=%t1.bc,b,pl \
; RUN:   -o %t2.o -save-temps

; Check that __a is kept as a weak def. __b can be dropped since its alias is
; not live and will also be dropped.
; RUN: llvm-dis %t2.o.1.1.promote.bc -o - | FileCheck %s
; CHECK: define weak hidden void @__a
; CHECK: declare hidden void @__b
; CHECK: declare void @b

target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-unknown-linux-gnu"

@a = hidden alias void (), void ()* @__a

define weak hidden void @__a() {
entry:
  ret void
}

@b = hidden alias void (), void ()* @__b

define weak hidden void @__b() {
entry:
  ret void
}

Fix target for new X86 test

; Test to ensure that non-prevailing weak aliasee is kept as a weak definition
; when the alias is not dead.
; RUN: opt -module-summary %s -o %t1.bc
; RUN: llvm-lto2 run %t1.bc \
; RUN:	 -r=%t1.bc,__a,lx \
; RUN:	 -r=%t1.bc,__b,l \
; RUN:	 -r=%t1.bc,a,plx \
; RUN:	 -r=%t1.bc,b,pl \
; RUN:   -o %t2.o -save-temps

; Check that __a is kept as a weak def. __b can be dropped since its alias is
; not live and will also be dropped.
; RUN: llvm-dis %t2.o.1.1.promote.bc -o - | FileCheck %s
; CHECK: define weak hidden void @__a
; CHECK: declare hidden void @__b
; CHECK: declare void @b

target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@a = hidden alias void (), void ()* @__a

define weak hidden void @__a() {
entry:
  ret void
}

@b = hidden alias void (), void ()* @__b

define weak hidden void @__b() {
entry:
  ret void
}


; This is the test case taken from appel's book that illustrates a hard case
; that SCCP gets right. BB3 should be completely eliminated.
;
; RUN: if as < %s | opt -sccp -dce | dis | grep BB3
; RUN: then exit 1
; RUN: else exit 0
; RUN: fi

int "test function"(int %i0, int %j0)
begin
BB1:
	br label %BB2
BB2:
	%j2 = phi int [%j4, %BB7], [1, %BB1]
	%k2 = phi int [%k4, %BB7], [0, %BB1]
	%kcond = setlt int %k2, 100
	br bool %kcond, label %BB3, label %BB4

BB3:
	%jcond = setlt int %j2, 20
	br bool %jcond, label %BB5, label %BB6

BB4:
	ret int %j2

BB5:
	%k3 = add int %k2, 1
	br label %BB7

BB6:
	%k5 = add int %k2, 1
	br label %BB7

BB7:
	%j4 = phi int [1, %BB5], [%k2, %BB6]
	%k4 = phi int [%k3, %BB5], [%k5, %BB6]
	br label %BB2
end

Add const prop pass to eliminate dead branches

; This is the test case taken from appel's book that illustrates a hard case
; that SCCP gets right. BB3 should be completely eliminated.
;
; RUN: if as < %s | opt -sccp -constprop -dce | dis | grep BB3
; RUN: then exit 1
; RUN: else exit 0
; RUN: fi

int "test function"(int %i0, int %j0)
begin
BB1:
	br label %BB2
BB2:
	%j2 = phi int [%j4, %BB7], [1, %BB1]
	%k2 = phi int [%k4, %BB7], [0, %BB1]
	%kcond = setlt int %k2, 100
	br bool %kcond, label %BB3, label %BB4

BB3:
	%jcond = setlt int %j2, 20
	br bool %jcond, label %BB5, label %BB6

BB4:
	ret int %j2

BB5:
	%k3 = add int %k2, 1
	br label %BB7

BB6:
	%k5 = add int %k2, 1
	br label %BB7

BB7:
	%j4 = phi int [1, %BB5], [%k2, %BB6]
	%k4 = phi int [%k3, %BB5], [%k5, %BB6]
	br label %BB2
end


; RUN: llc < %s -mtriple=i686-pc-linux | FileCheck %s

define i64 @foo(i32 %sum) {
entry:
  %conv = sext i32 %sum to i64
  %shr = lshr i64 %conv, 2
  %or = or i64 4611686018360279040, %shr
  ret i64 %or
}

; CHECK: foo
; CHECK: shrl $2
; CHECK: orl $-67108864
; CHECK-NOT: movl $-1
; CHECK: movl $1073741823
; CHECK: ret

Add '-mcpu=' to prevent breaking on ATOM due to different code schedule

; RUN: llc < %s -mcpu=pentium4 -mtriple=i686-pc-linux | FileCheck %s

define i64 @foo(i32 %sum) {
entry:
  %conv = sext i32 %sum to i64
  %shr = lshr i64 %conv, 2
  %or = or i64 4611686018360279040, %shr
  ret i64 %or
}

; CHECK: foo
; CHECK: shrl $2
; CHECK: orl $-67108864
; CHECK-NOT: movl $-1
; CHECK: movl $1073741823
; CHECK: ret


; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
; RUN: diff %t1.ll %t2.ll

declare bool %llvm.isunordered(float, float)
declare bool %llvm.isunordered(double, double)

declare void %llvm.prefetch(sbyte*, uint, uint)

declare uint %llvm.ctpop(uint)
declare ushort %llvm.cttz(ushort)
declare ulong %llvm.ctlz(ulong)

implementation

; Test llvm intrinsics
;
void %libm() {
        call bool %llvm.isunordered(float 0.0, float 1.0)
        call bool %llvm.isunordered(double 0.0, double 0x7FF8000000000000)
	call void %llvm.prefetch(sbyte* null, uint 1, uint 3)
        call uint %llvm.ctpop(uint 3)
        call ushort %llvm.cttz(ushort 7)
        call ulong %llvm.ctlz(ulong 65000)
	ret void
}

Add note to self to complete the testing of all intrinsic functions as specified in the LangRef document.

; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
; RUN: diff %t1.ll %t2.ll

declare bool %llvm.isunordered(float, float)
declare bool %llvm.isunordered(double, double)

declare void %llvm.prefetch(sbyte*, uint, uint)

declare uint %llvm.ctpop(uint)
declare ushort %llvm.cttz(ushort)
declare ulong %llvm.ctlz(ulong)

implementation

; Test llvm intrinsics
;
void %libm() {
        call bool %llvm.isunordered(float 0.0, float 1.0)
        call bool %llvm.isunordered(double 0.0, double 0x7FF8000000000000)
	call void %llvm.prefetch(sbyte* null, uint 1, uint 3)
        call uint %llvm.ctpop(uint 3)
        call ushort %llvm.cttz(ushort 7)
        call ulong %llvm.ctlz(ulong 65000)
	ret void
}

; FIXME: test ALL the intrinsics in this file.


; This test ensures that "strength reduction" of conditional expressions are
; working.  Basically this boils down to converting setlt,gt,le,ge instructions
; into equivalent setne,eq instructions.
;

; RUN: if as < %s | opt -instcombine | dis | grep -v seteq | grep -v setne | grep set
; RUN: then exit 1
; RUN: else exit 0
; RUN: fi

bool "test1"(uint %A) {
	%B = setge uint %A, 1   ; setne %A, 0
	ret bool %B
}

bool "test2"(uint %A) {
	%B = setgt uint %A, 0   ; setne %A, 0
	ret bool %B
}

bool "test3"(sbyte %A) {
	%B = setge sbyte %A, -127   ; setne %A, -128
	ret bool %B
}

Add more strength reduction testcases

; This test ensures that "strength reduction" of conditional expressions are
; working.  Basically this boils down to converting setlt,gt,le,ge instructions
; into equivalent setne,eq instructions.
;

; RUN: if as < %s | opt -instcombine | dis | grep -v seteq | grep -v setne | grep set
; RUN: then exit 1
; RUN: else exit 0
; RUN: fi

bool "test1"(uint %A) {
	%B = setge uint %A, 1   ; setne %A, 0
	ret bool %B
}

bool "test2"(uint %A) {
	%B = setgt uint %A, 0   ; setne %A, 0
	ret bool %B
}

bool "test3"(sbyte %A) {
	%B = setge sbyte %A, -127   ; setne %A, -128
	ret bool %B
}

bool %test4(sbyte %A) {
	%B = setle sbyte %A, 126  ; setne %A, 127
	ret bool %B
}

bool %test5(sbyte %A) {
	%B = setlt sbyte %A, 127 ; setne %A, 127
	ret bool %B
}


; For PR1248
; RUN: llvm-as %s -o - | opt -instcombine | llvm-dis | grep 'ugt i32 %tmp6, 11'
define i1 @test(i32 %tmp6) {
  %tmp7 = sdiv i32 %tmp6, 12     ; <i32> [#uses=1]
  icmp ne i32 %tmp7, -6           ; <i1>:1 [#uses=1]
  ret i1 %1
}

Make this test actually match the generated code.

; For PR1248
; RUN: llvm-as %s -o - | opt -instcombine | llvm-dis | grep 'ugt i32 .*, 11'
define i1 @test(i32 %tmp6) {
  %tmp7 = sdiv i32 %tmp6, 12     ; <i32> [#uses=1]
  icmp ne i32 %tmp7, -6           ; <i1>:1 [#uses=1]
  ret i1 %1
}


; This function should have exactly one call to fixdfdi, no more!

; RUN: llvm-as < %s | llc -march=ppc32 | grep 'bl .*fixdfdi' | wc -l | grep 1

double %test2(double %tmp.7705) {
        %mem_tmp.2.0.in = cast double %tmp.7705 to long                ; <long> [#uses=1]
        %mem_tmp.2.0 = cast long %mem_tmp.2.0.in to double
	ret double %mem_tmp.2.0
}

Make sure to disable 64-bit extensions for this test

; This function should have exactly one call to fixdfdi, no more!

; RUN: llvm-as < %s | llc -march=ppc32 -mattr=-64bit | grep 'bl .*fixdfdi' | wc -l | grep 1

double %test2(double %tmp.7705) {
        %mem_tmp.2.0.in = cast double %tmp.7705 to long                ; <long> [#uses=1]
        %mem_tmp.2.0 = cast long %mem_tmp.2.0.in to double
	ret double %mem_tmp.2.0
}


; RUN: llvm-as < %s | llvm-dis > %t1.ll
; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
; RUN: diff %t1.ll %t2.ll

%FunTy = type i32(i8 @zext)

declare i16 @(sext) "test"(i16 @sext %arg)      ; Differ only by vararg
declare i16 "test2" (i16 %a1, i16 %a2)

implementation

define i32 %main(i32 %argc, i8 **%argv) {
    %val = trunc i32 %argc to i16
    %res = call i16 @sext (i16 @sext) *%test(i16 %val)
    %two = add i16 %res, %res
    %retVal = sext i16 %two to i32
    ret i32 %retVal
}

Test @zext and @sext fully as well as testing the "short" call syntax.

; RUN: llvm-as < %s | llvm-dis > %t1.ll
; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
; RUN: diff %t1.ll %t2.ll

%ZFunTy = type i32(i8 @zext)
%SFunTy = type i32(i8 @sext)

declare i16 @(sext) "test"(i16 @sext %arg)
declare i8 @zext "test2" (i16 @zext %a2)

implementation

define i32 %main(i32 %argc, i8 **%argv) {
    %val = trunc i32 %argc to i16
    %res = call i16 @sext (i16 @sext) *%test(i16 %val)
    %two = add i16 %res, %res
    %res = call i8 @zext %test2(i16 %two @zext)
    %retVal = sext i16 %two to i32
    ret i32 %retVal
}


; RUN: llc -mtriple=thumb-eabi %s -o - | FileCheck %s

define void @f1() {
	%c = alloca i8, align 1
	ret void
}

define i32 @f2() {
	ret i32 1
}

; CHECK: add
; CHECK-NOT: add

Make this test not match its own filename, when being run from a path that includes the string 'add'.

; RUN: llc -mtriple=thumb-eabi < %s -o - | FileCheck %s

define void @f1() {
	%c = alloca i8, align 1
	ret void
}

define i32 @f2() {
	ret i32 1
}

; CHECK: add
; CHECK-NOT: add


; RUN: llvm-as -f %s -o %t.bc
; RUN: lli %t.bc > /dev/null

declare void %exit(int)

int %test(sbyte %C, short %S) {
  %X = cast short %S to int
  ret int %X
}

void %FP(void(int) * %F) {
	%X = call int %test(sbyte 123, short 1024)
	call void %F(int %X)
	ret void
}

int %main() {
	call void %FP(void(int)* %exit)
	ret int 1
}

Exit only with a value from 0-255.

; RUN: llvm-as -f %s -o %t.bc
; RUN: lli %t.bc > /dev/null

declare void %exit(int)

int %test(sbyte %C, short %S) {
  %X = cast short %S to ubyte
  %Y = cast ubyte %X to int
  ret int %Y
}

void %FP(void(int) * %F) {
	%X = call int %test(sbyte 123, short 1024)
	call void %F(int %X)
	ret void
}

int %main() {
	call void %FP(void(int)* %exit)
	ret int 1
}


; Tests for SSE1 and below, without SSE2+.
; RUN: llc < %s -mcpu=pentium3 -O3 | FileCheck %s

define <8 x i16> @test1(<8 x i32> %a) nounwind {
; CHECK: test1
  ret <8 x i16> zeroinitializer
}

Make sure this forces the x86 targets

; Tests for SSE1 and below, without SSE2+.
; RUN: llc < %s -march=x86 -mcpu=pentium3 -O3 | FileCheck %s
; RUN: llc < %s -march=x86-64 -mcpu=pentium3 -O3 | FileCheck %s

define <8 x i16> @test1(<8 x i32> %a) nounwind {
; CHECK: test1
  ret <8 x i16> zeroinitializer
}


; RUN: llc < %s -march=thumb -mattr=+v6  | FileCheck %s -check-prefix=V6
; RUN: llc < %s -march=thumb -mattr=+v6m | FileCheck %s -check-prefix=V6M

declare void @llvm.memory.barrier( i1 , i1 , i1 , i1 , i1 )

define void @t1() {
; V6: t1:
; V6_TEMPORARILY_DISABLED: blx {{_*}}sync_synchronize

; V6M: t1:
; V6M: dsb
  call void @llvm.memory.barrier( i1 false, i1 false, i1 false, i1 true, i1 true )
  ret void
}

define void @t2() {
; V6: t2:
; V6_TEMPORARILY_DISABLED: blx {{_*}}sync_synchronize

; V6M: t2:
; V6M: dmb
  call void @llvm.memory.barrier( i1 false, i1 false, i1 false, i1 true, i1 false )
  ret void
}

Fix test and re-enable it.

; RUN: llc < %s -mtriple=thumbv6-apple-darwin  | FileCheck %s -check-prefix=V6
; RUN: llc < %s -march=thumb -mattr=+v6m       | FileCheck %s -check-prefix=V6M

declare void @llvm.memory.barrier( i1 , i1 , i1 , i1 , i1 )

define void @t1() {
; V6: t1:
; V6: blx {{_*}}sync_synchronize

; V6M: t1:
; V6M: dsb
  call void @llvm.memory.barrier( i1 false, i1 false, i1 false, i1 true, i1 true )
  ret void
}

define void @t2() {
; V6: t2:
; V6: blx {{_*}}sync_synchronize

; V6M: t2:
; V6M: dmb
  call void @llvm.memory.barrier( i1 false, i1 false, i1 false, i1 true, i1 false )
  ret void
}


; test phi node

%Y = global int 6

void %blah(int *%X) {
	br label %T
T:
	phi int* [%X, %0], [%Y, %Dead]
	ret void
Dead:
	br label %T
}

int %main() {
	br label %Test
Test:
	%X = phi int [7, %0], [%Y, %Dead]
	ret int 0
Dead:
	%Y = shr int 12, ubyte 4
	br label %Test
}

Add new testcase for repeated preds

; test phi node

%Y = global int 6

void %blah(int *%X) {
	br label %T
T:
	phi int* [%X, %0], [%Y, %Dead]
	ret void
Dead:
	br label %T
}

int %test(bool %C) {
	br bool %C, label %T, label %T
T:
	%X = phi int [123, %0], [123, %0]
	ret int %X
}

int %main() {
	br label %Test
Test:
	%X = phi int [0, %0], [%Y, %Dead]
	ret int %X
Dead:
	%Y = shr int 12, ubyte 4
	br label %Test
}


; RUN: llc < %s -march=x86-64

define x86_fp80 @foo(x86_fp80 %a) {
  %1 = tail call x86_fp80 @copysignl(x86_fp80 0xK7FFF8000000000000000, x86_fp80 %a) nounwind readnone
  ret x86_fp80 %1
}

declare x86_fp80 @copysignl(x86_fp80, x86_fp80) nounwind readnone

Check output of x86 copysignl testcase.

; RUN: llc < %s -march=x86-64 | FileCheck %s

; CHECK-LABEL: LCPI0_0:
; CHECK-NEXT: .long 4286578688
; CHECK-LABEL: LCPI0_1:
; CHECK-NEXT: .long 2139095040

; CHECK-LABEL: foo:
; CHECK: movq {{.*}}, %rax
; CHECK: shlq $48, %rax
; CHECK: sets %al
; CHECK: testb %al, %al
; CHECK: flds LCPI0_0(%rip)
; CHECK: flds LCPI0_1(%rip)
; CHECK: fcmovne %st(1), %st(0)
; CHECK: fstp %st(1)
; CHECK: retq
define x86_fp80 @foo(x86_fp80 %a) {
  %1 = tail call x86_fp80 @copysignl(x86_fp80 0xK7FFF8000000000000000, x86_fp80 %a) nounwind readnone
  ret x86_fp80 %1
}

declare x86_fp80 @copysignl(x86_fp80, x86_fp80) nounwind readnone


; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | grep shufp | wc -l | grep 1
; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | grep movlhps

void %test_v4sf(<4 x float>* %P, float %X, float %Y) {
	%tmp = insertelement <4 x float> zeroinitializer, float %X, uint 0
	%tmp2 = insertelement <4 x float> %tmp, float %X, uint 1
	%tmp4 = insertelement <4 x float> %tmp2, float %Y, uint 2
	%tmp6 = insertelement <4 x float> %tmp4, float %Y, uint 3
	store <4 x float> %tmp6, <4 x float>* %P
	ret void
}

void %test_v2sd(<2 x double>* %P, double %X, double %Y) {
	%tmp = insertelement <2 x double> zeroinitializer, double %X, uint 0
	%tmp2 = insertelement <2 x double> %tmp, double %Y, uint 1
	store <2 x double> %tmp2, <2 x double>* %P
	ret void
}

Use movhpd is even better than movlhps.

; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | grep shufp | wc -l | grep 1
; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | grep movhpd

void %test_v4sf(<4 x float>* %P, float %X, float %Y) {
	%tmp = insertelement <4 x float> zeroinitializer, float %X, uint 0
	%tmp2 = insertelement <4 x float> %tmp, float %X, uint 1
	%tmp4 = insertelement <4 x float> %tmp2, float %Y, uint 2
	%tmp6 = insertelement <4 x float> %tmp4, float %Y, uint 3
	store <4 x float> %tmp6, <4 x float>* %P
	ret void
}

void %test_v2sd(<2 x double>* %P, double %X, double %Y) {
	%tmp = insertelement <2 x double> zeroinitializer, double %X, uint 0
	%tmp2 = insertelement <2 x double> %tmp, double %Y, uint 1
	store <2 x double> %tmp2, <2 x double>* %P
	ret void
}


; RUN: llc < %s -march=x86-64 | FileCheck %s
; RUN: llc < %s -march=x86 | FileCheck %s
; CHECK: _memcpy
define void @foo([40000 x i32] *%P) nounwind {
  call void @bar([40000 x i32] * byval align 1 %P)
  ret void
}

declare void @bar([40000 x i32] *%P )

Disable this test temporarily to reduce BuildBot complaints.

; R UN: llc < %s -march=x86-64 | FileCheck %s
; R UN: llc < %s -march=x86 | FileCheck %s
; C HECK: _memcpy
define void @foo([40000 x i32] *%P) nounwind {
  call void @bar([40000 x i32] * byval align 1 %P)
  ret void
}

declare void @bar([40000 x i32] *%P )


; RUN: llc < %s -march=r600 -mcpu=redwood -filetype=obj | llvm-readobj -s - | FileCheck --check-prefix=ELF-CHECK %s
; RUN: llc < %s -march=r600 -mcpu=redwood -o - | FileCheck --check-prefix=CONFIG-CHECK %s

; ELF-CHECK: Format: ELF32
; ELF-CHECK: Name: .AMDGPU.config

; CONFIG-CHECK: .section .AMDGPU.config
; CONFIG-CHECK-NEXT: .long   2
; CONFIG-CHECK-NEXT: .long   1
define void @test(float addrspace(1)* %out, i32 %p) {
   %i = add i32 %p, 2
   %r = bitcast i32 %i to float
   store float %r, float addrspace(1)* %out
   ret void
}

Add a test to check that use_kill is emitted

; RUN: llc < %s -march=r600 -mcpu=redwood -filetype=obj | llvm-readobj -s - | FileCheck --check-prefix=ELF-CHECK %s
; RUN: llc < %s -march=r600 -mcpu=redwood -o - | FileCheck --check-prefix=CONFIG-CHECK %s

; ELF-CHECK: Format: ELF32
; ELF-CHECK: Name: .AMDGPU.config

; CONFIG-CHECK: .section .AMDGPU.config
; CONFIG-CHECK-NEXT: .long   2
; CONFIG-CHECK-NEXT: .long   1
; CONFIG-CHECK-NEXT: .long   0
define void @test(float addrspace(1)* %out, i32 %p) {
   %i = add i32 %p, 2
   %r = bitcast i32 %i to float
   store float %r, float addrspace(1)* %out
   ret void
}


; Test that appending linkage works correctly.

; RUN: echo "%X = appending global [1x int] [int 8]" | as > Output/%s.2.bc
; RUN: as < %s > Output/%s.1.bc
; RUN: link Output/%s.[12].bc | dis | grep 7 | grep 4 | grep 8

%X = appending global [2 x int] [int 7, int 4]

Add uses of the appending variable

; Test that appending linkage works correctly.

; RUN: echo "%X = appending global [1x int] [int 8]" | as > Output/%s.2.bc
; RUN: as < %s > Output/%s.1.bc
; RUN: link Output/%s.[12].bc | dis | grep 7 | grep 4 | grep 8

%X = appending global [2 x int] [int 7, int 4]

%Y = global int* getelementptr ([2 x int]* %X, long 0, long 0)

void %foo(long %V) {
  %Y = getelementptr [2 x int]* %X, long 0, long %V
  ret void
}


; RUN: analyze %s -datastructure-gc -dsgc-dspass=td -dsgc-abort-if-incomplete=X

%G = internal global int 5

implementation

internal void %leaf(int *%X) {
	store int 0, int* %X
	ret void
}

internal void %intermediate(void(int*)* %Fn, int* %Ptr) {
	call void %Fn(int* %Ptr)
	ret void
}

int %main() {
	call void %intermediate(void(int*)* %leaf, int* %G)
	ret int 0
}

Make testcase a bit more interesting

; RUN: analyze %s -datastructure-gc -dsgc-dspass=td -dsgc-abort-if-incomplete=X

%G = internal global int 5

implementation

internal void %leaf(int *%X) {
	store int 0, int* %X
	ret void
}
internal void %leaf2(int* %X) { ret void }

internal void %intermediate(void(int*)* %Fn, int* %Ptr) {
	call void %Fn(int* %Ptr)
	ret void
}

int %main() {
	call void %intermediate(void(int*)* %leaf, int* %G)
	call void %intermediate(void(int*)* %leaf2, int* %G)
	call void %intermediate(void(int*)* %leaf, int* %G)
	call void %intermediate(void(int*)* %leaf2, int* %G)
	ret int 0
}