mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 05:16:06 +00:00

A significant number of our tests in C accidentally use functions without prototypes. This patch converts the function signatures to have a prototype for the situations where the test is not specific to K&R C declarations. e.g., void func(); becomes void func(void); This is the tenth batch of tests being updated (there are a significant number of other tests left to be updated).
41 lines
885 B
C
41 lines
885 B
C
// RUN: %clang_cc1 %s -O3 -emit-llvm -o - | FileCheck %s
|
|
//
|
|
// PR13214
|
|
// No assumption may be made about the order that a frontend emits branch
|
|
// targets (basic blocks). However, the backend's basic block layout makes an
|
|
// attempt to preserve source order of control flow, and any bias toward source
|
|
// order must start with the frontend.
|
|
//
|
|
// Note that the frontend inverts branches to simplify the condition, so the
|
|
// order of a branch instruction's labels cannot be used as a source order bias.
|
|
|
|
void calla(void);
|
|
void callb(void);
|
|
void callc(void);
|
|
|
|
// CHECK: @test1
|
|
// CHECK: @calla
|
|
// CHECK: @callb
|
|
// CHECK: @callc
|
|
// CHECK: ret void
|
|
void test1(int a) {
|
|
if (a)
|
|
calla();
|
|
else
|
|
callb();
|
|
callc();
|
|
}
|
|
|
|
// CHECK: @test2
|
|
// CHECK: @callb
|
|
// CHECK: @calla
|
|
// CHECK: @callc
|
|
// CHECK: ret void
|
|
void test2(int a) {
|
|
if (!a)
|
|
callb();
|
|
else
|
|
calla();
|
|
callc();
|
|
}
|