Skip to content

Commit cf49cae

Browse files
Michael Benfieldgburgessiv
authored andcommitted
[Clang] -Wunused-but-set-parameter and -Wunused-but-set-variable
These are intended to mimic warnings available in gcc. Differential Revision: https://reviews.llvm.org/D100581
1 parent 00d19c6 commit cf49cae

25 files changed

Lines changed: 304 additions & 52 deletions

clang/include/clang/Basic/DiagnosticGroups.td

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,7 @@ def UnusedMemberFunction : DiagGroup<"unused-member-function",
725725
def UnusedLabel : DiagGroup<"unused-label">;
726726
def UnusedLambdaCapture : DiagGroup<"unused-lambda-capture">;
727727
def UnusedParameter : DiagGroup<"unused-parameter">;
728+
def UnusedButSetParameter : DiagGroup<"unused-but-set-parameter">;
728729
def UnusedResult : DiagGroup<"unused-result">;
729730
def PotentiallyEvaluatedExpression : DiagGroup<"potentially-evaluated-expression">;
730731
def UnevaluatedExpression : DiagGroup<"unevaluated-expression",
@@ -734,6 +735,7 @@ def UnusedValue : DiagGroup<"unused-value", [UnusedComparison, UnusedResult,
734735
def UnusedConstVariable : DiagGroup<"unused-const-variable">;
735736
def UnusedVariable : DiagGroup<"unused-variable",
736737
[UnusedConstVariable]>;
738+
def UnusedButSetVariable : DiagGroup<"unused-but-set-variable">;
737739
def UnusedLocalTypedef : DiagGroup<"unused-local-typedef">;
738740
def UnusedPropertyIvar : DiagGroup<"unused-property-ivar">;
739741
def UnusedGetterReturnValue : DiagGroup<"unused-getter-return-value">;
@@ -875,7 +877,7 @@ def Unused : DiagGroup<"unused",
875877
// UnusedMemberFunction, (clean-up llvm before enabling)
876878
UnusedPrivateField, UnusedLambdaCapture,
877879
UnusedLocalTypedef, UnusedValue, UnusedVariable,
878-
UnusedPropertyIvar]>,
880+
UnusedButSetVariable, UnusedPropertyIvar]>,
879881
DiagCategory<"Unused Entity Issue">;
880882

881883
// Format settings.
@@ -927,6 +929,7 @@ def Extra : DiagGroup<"extra", [
927929
MissingMethodReturnType,
928930
SignCompare,
929931
UnusedParameter,
932+
UnusedButSetParameter,
930933
NullPointerArithmetic,
931934
EmptyInitStatement,
932935
StringConcatation,

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,12 @@ def note_riscv_repeated_interrupt_attribute : Note<
311311
"repeated RISC-V 'interrupt' attribute is here">;
312312
def warn_unused_parameter : Warning<"unused parameter %0">,
313313
InGroup<UnusedParameter>, DefaultIgnore;
314+
def warn_unused_but_set_parameter : Warning<"parameter %0 set but not used">,
315+
InGroup<UnusedButSetParameter>, DefaultIgnore;
314316
def warn_unused_variable : Warning<"unused variable %0">,
315317
InGroup<UnusedVariable>, DefaultIgnore;
318+
def warn_unused_but_set_variable : Warning<"variable %0 set but not used">,
319+
InGroup<UnusedButSetVariable>, DefaultIgnore;
316320
def warn_unused_local_typedef : Warning<
317321
"unused %select{typedef|type alias}0 %1">,
318322
InGroup<UnusedLocalTypedef>, DefaultIgnore;

clang/include/clang/Sema/Sema.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1518,6 +1518,11 @@ class Sema final {
15181518

15191519
bool WarnedStackExhausted = false;
15201520

1521+
/// Increment when we find a reference; decrement when we find an ignored
1522+
/// assignment. Ultimately the value is 0 if every reference is an ignored
1523+
/// assignment.
1524+
llvm::DenseMap<const VarDecl *, int> RefsMinusAssignments;
1525+
15211526
public:
15221527
Sema(Preprocessor &pp, ASTContext &ctxt, ASTConsumer &consumer,
15231528
TranslationUnitKind TUKind = TU_Complete,
@@ -4870,6 +4875,10 @@ class Sema final {
48704875
void DiagnoseUnusedNestedTypedefs(const RecordDecl *D);
48714876
void DiagnoseUnusedDecl(const NamedDecl *ND);
48724877

4878+
/// If VD is set but not otherwise used, diagnose, for a parameter or a
4879+
/// variable.
4880+
void DiagnoseUnusedButSetDecl(const VarDecl *VD);
4881+
48734882
/// Emit \p DiagID if statement located on \p StmtLoc has a suspicious null
48744883
/// statement as a \p Body, and it is located on the same line.
48754884
///

clang/lib/Sema/SemaDecl.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1906,6 +1906,41 @@ void Sema::DiagnoseUnusedDecl(const NamedDecl *D) {
19061906
Diag(D->getLocation(), DiagID) << D << Hint;
19071907
}
19081908

1909+
void Sema::DiagnoseUnusedButSetDecl(const VarDecl *VD) {
1910+
// If it's not referenced, it can't be set.
1911+
if (!VD->isReferenced() || !VD->getDeclName() || VD->hasAttr<UnusedAttr>())
1912+
return;
1913+
1914+
const auto *Ty = VD->getType().getTypePtr()->getBaseElementTypeUnsafe();
1915+
1916+
if (Ty->isReferenceType() || Ty->isDependentType())
1917+
return;
1918+
1919+
if (const TagType *TT = Ty->getAs<TagType>()) {
1920+
const TagDecl *Tag = TT->getDecl();
1921+
if (Tag->hasAttr<UnusedAttr>())
1922+
return;
1923+
// In C++, don't warn for record types that don't have WarnUnusedAttr, to
1924+
// mimic gcc's behavior.
1925+
if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(Tag)) {
1926+
if (!RD->hasAttr<WarnUnusedAttr>())
1927+
return;
1928+
}
1929+
}
1930+
1931+
auto iter = RefsMinusAssignments.find(VD);
1932+
if (iter == RefsMinusAssignments.end())
1933+
return;
1934+
1935+
assert(iter->getSecond() >= 0 &&
1936+
"Found a negative number of references to a VarDecl");
1937+
if (iter->getSecond() != 0)
1938+
return;
1939+
unsigned DiagID = isa<ParmVarDecl>(VD) ? diag::warn_unused_but_set_parameter
1940+
: diag::warn_unused_but_set_variable;
1941+
Diag(VD->getLocation(), DiagID) << VD;
1942+
}
1943+
19091944
static void CheckPoppedLabel(LabelDecl *L, Sema &S) {
19101945
// Verify that we have no forward references left. If so, there was a goto
19111946
// or address of a label taken, but no definition of it. Label fwd
@@ -1938,6 +1973,10 @@ void Sema::ActOnPopScope(SourceLocation Loc, Scope *S) {
19381973
DiagnoseUnusedDecl(D);
19391974
if (const auto *RD = dyn_cast<RecordDecl>(D))
19401975
DiagnoseUnusedNestedTypedefs(RD);
1976+
if (VarDecl *VD = dyn_cast<VarDecl>(D)) {
1977+
DiagnoseUnusedButSetDecl(VD);
1978+
RefsMinusAssignments.erase(VD);
1979+
}
19411980
}
19421981

19431982
if (!D->getDeclName()) continue;

clang/lib/Sema/SemaExpr.cpp

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18350,8 +18350,9 @@ void Sema::CleanupVarDeclMarking() {
1835018350
"MarkVarDeclODRUsed failed to cleanup MaybeODRUseExprs?");
1835118351
}
1835218352

18353-
static void DoMarkVarDeclReferenced(Sema &SemaRef, SourceLocation Loc,
18354-
VarDecl *Var, Expr *E) {
18353+
static void DoMarkVarDeclReferenced(
18354+
Sema &SemaRef, SourceLocation Loc, VarDecl *Var, Expr *E,
18355+
llvm::DenseMap<const VarDecl *, int> &RefsMinusAssignments) {
1835518356
assert((!E || isa<DeclRefExpr>(E) || isa<MemberExpr>(E) ||
1835618357
isa<FunctionParmPackExpr>(E)) &&
1835718358
"Invalid Expr argument to DoMarkVarDeclReferenced");
@@ -18368,6 +18369,10 @@ static void DoMarkVarDeclReferenced(Sema &SemaRef, SourceLocation Loc,
1836818369
bool UsableInConstantExpr =
1836918370
Var->mightBeUsableInConstantExpressions(SemaRef.Context);
1837018371

18372+
if (Var->isLocalVarDeclOrParm() && !Var->hasExternalStorage()) {
18373+
RefsMinusAssignments.insert({Var, 0}).first->getSecond()++;
18374+
}
18375+
1837118376
// C++20 [expr.const]p12:
1837218377
// A variable [...] is needed for constant evaluation if it is [...] a
1837318378
// variable whose name appears as a potentially constant evaluated
@@ -18523,16 +18528,18 @@ static void DoMarkVarDeclReferenced(Sema &SemaRef, SourceLocation Loc,
1852318528
/// (C++ [basic.def.odr]p2, C99 6.9p3). Note that this should not be
1852418529
/// used directly for normal expressions referring to VarDecl.
1852518530
void Sema::MarkVariableReferenced(SourceLocation Loc, VarDecl *Var) {
18526-
DoMarkVarDeclReferenced(*this, Loc, Var, nullptr);
18531+
DoMarkVarDeclReferenced(*this, Loc, Var, nullptr, RefsMinusAssignments);
1852718532
}
1852818533

18529-
static void MarkExprReferenced(Sema &SemaRef, SourceLocation Loc,
18530-
Decl *D, Expr *E, bool MightBeOdrUse) {
18534+
static void
18535+
MarkExprReferenced(Sema &SemaRef, SourceLocation Loc, Decl *D, Expr *E,
18536+
bool MightBeOdrUse,
18537+
llvm::DenseMap<const VarDecl *, int> &RefsMinusAssignments) {
1853118538
if (SemaRef.isInOpenMPDeclareTargetContext())
1853218539
SemaRef.checkDeclIsAllowedInOpenMPTarget(E, D);
1853318540

1853418541
if (VarDecl *Var = dyn_cast<VarDecl>(D)) {
18535-
DoMarkVarDeclReferenced(SemaRef, Loc, Var, E);
18542+
DoMarkVarDeclReferenced(SemaRef, Loc, Var, E, RefsMinusAssignments);
1853618543
return;
1853718544
}
1853818545

@@ -18578,7 +18585,8 @@ void Sema::MarkDeclRefReferenced(DeclRefExpr *E, const Expr *Base) {
1857818585
if (!isConstantEvaluated() && FD->isConsteval() &&
1857918586
!RebuildingImmediateInvocation)
1858018587
ExprEvalContexts.back().ReferenceToConsteval.insert(E);
18581-
MarkExprReferenced(*this, E->getLocation(), E->getDecl(), E, OdrUse);
18588+
MarkExprReferenced(*this, E->getLocation(), E->getDecl(), E, OdrUse,
18589+
RefsMinusAssignments);
1858218590
}
1858318591

1858418592
/// Perform reference-marking and odr-use handling for a MemberExpr.
@@ -18597,13 +18605,15 @@ void Sema::MarkMemberReferenced(MemberExpr *E) {
1859718605
}
1859818606
SourceLocation Loc =
1859918607
E->getMemberLoc().isValid() ? E->getMemberLoc() : E->getBeginLoc();
18600-
MarkExprReferenced(*this, Loc, E->getMemberDecl(), E, MightBeOdrUse);
18608+
MarkExprReferenced(*this, Loc, E->getMemberDecl(), E, MightBeOdrUse,
18609+
RefsMinusAssignments);
1860118610
}
1860218611

1860318612
/// Perform reference-marking and odr-use handling for a FunctionParmPackExpr.
1860418613
void Sema::MarkFunctionParmPackReferenced(FunctionParmPackExpr *E) {
1860518614
for (VarDecl *VD : *E)
18606-
MarkExprReferenced(*this, E->getParameterPackLocation(), VD, E, true);
18615+
MarkExprReferenced(*this, E->getParameterPackLocation(), VD, E, true,
18616+
RefsMinusAssignments);
1860718617
}
1860818618

1860918619
/// Perform marking for a reference to an arbitrary declaration. It

clang/lib/Sema/SemaExprCXX.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7787,9 +7787,34 @@ ExprResult Sema::ActOnNoexceptExpr(SourceLocation KeyLoc, SourceLocation,
77877787
return BuildCXXNoexceptExpr(KeyLoc, Operand, RParen);
77887788
}
77897789

7790+
static void MaybeDecrementCount(
7791+
Expr *E, llvm::DenseMap<const VarDecl *, int> &RefsMinusAssignments) {
7792+
DeclRefExpr *LHS = nullptr;
7793+
if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
7794+
if (!BO->isAssignmentOp())
7795+
return;
7796+
LHS = dyn_cast<DeclRefExpr>(BO->getLHS());
7797+
} else if (CXXOperatorCallExpr *COCE = dyn_cast<CXXOperatorCallExpr>(E)) {
7798+
if (!COCE->isAssignmentOp())
7799+
return;
7800+
LHS = dyn_cast<DeclRefExpr>(COCE->getArg(0));
7801+
}
7802+
if (!LHS)
7803+
return;
7804+
VarDecl *VD = dyn_cast<VarDecl>(LHS->getDecl());
7805+
if (!VD)
7806+
return;
7807+
auto iter = RefsMinusAssignments.find(VD);
7808+
if (iter == RefsMinusAssignments.end())
7809+
return;
7810+
iter->getSecond()--;
7811+
}
7812+
77907813
/// Perform the conversions required for an expression used in a
77917814
/// context that ignores the result.
77927815
ExprResult Sema::IgnoredValueConversions(Expr *E) {
7816+
MaybeDecrementCount(E, RefsMinusAssignments);
7817+
77937818
if (E->hasPlaceholderType()) {
77947819
ExprResult result = CheckPlaceholderExpr(E);
77957820
if (result.isInvalid()) return E;

clang/test/CXX/expr/expr.prim/expr.prim.lambda/p12.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang_cc1 -std=c++11 %s -Wunused -Wno-unused-lambda-capture -verify
1+
// RUN: %clang_cc1 -std=c++11 %s -Wunused -Wno-unused-but-set-variable -Wno-unused-lambda-capture -verify
22

33
void odr_used() {
44
int i = 17;

clang/test/CodeGen/2007-10-30-Volatile.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %clang_cc1 -emit-llvm %s -o /dev/null -Wall -Werror
1+
// RUN: %clang_cc1 -emit-llvm %s -o /dev/null -Wall -Wno-unused-but-set-variable -Werror
22
void bork() {
33
char * volatile p = 0;
44
volatile int cc = 0;

clang/test/CodeGen/X86/x86_32-xsave.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
// RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=i686-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVE
2-
// RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=i686-unknown-unknown -target-feature +xsave -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVE
1+
// RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=i686-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVE
2+
// RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=i686-unknown-unknown -target-feature +xsave -fno-signed-char -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVE
33

4-
// RUN: %clang_cc1 %s -DTEST_XGETBV -O0 -triple=i686-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XGETBV
5-
// RUN: %clang_cc1 %s -DTEST_XSETBV -O0 -triple=i686-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSETBV
4+
// RUN: %clang_cc1 %s -DTEST_XGETBV -O0 -triple=i686-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XGETBV
5+
// RUN: %clang_cc1 %s -DTEST_XSETBV -O0 -triple=i686-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSETBV
66

7-
// RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEOPT
8-
// RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEOPT
7+
// RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVEOPT
8+
// RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -fno-signed-char -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVEOPT
99

10-
// RUN: %clang_cc1 %s -DTEST_XSAVEC -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsavec -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEC
11-
// RUN: %clang_cc1 %s -DTEST_XSAVEC -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsavec -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEC
10+
// RUN: %clang_cc1 %s -DTEST_XSAVEC -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsavec -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVEC
11+
// RUN: %clang_cc1 %s -DTEST_XSAVEC -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsavec -fno-signed-char -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVEC
1212

13-
// RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsaves -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVES
14-
// RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsaves -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVES
13+
// RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsaves -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVES
14+
// RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=i686-unknown-unknown -target-feature +xsave -target-feature +xsaves -fno-signed-char -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVES
1515

1616
// Don't include mm_malloc.h, it's system specific.
1717
#define __MM_MALLOC_H

clang/test/CodeGen/X86/x86_64-xsave.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
// RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVE
2-
// RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVE
1+
// RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVE
2+
// RUN: %clang_cc1 %s -DTEST_XSAVE -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -fno-signed-char -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVE
33

4-
// RUN: %clang_cc1 %s -DTEST_XGETBV -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XGETBV
5-
// RUN: %clang_cc1 %s -DTEST_XSETBV -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSETBV
4+
// RUN: %clang_cc1 %s -DTEST_XGETBV -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XGETBV
5+
// RUN: %clang_cc1 %s -DTEST_XSETBV -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -fno-signed-char -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSETBV
66

7-
// RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEOPT
8-
// RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEOPT
7+
// RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVEOPT
8+
// RUN: %clang_cc1 %s -DTEST_XSAVEOPT -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaveopt -fno-signed-char -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVEOPT
99

10-
// RUN: %clang_cc1 %s -DTEST_XSAVEC -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsavec -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEC
11-
// RUN: %clang_cc1 %s -DTEST_XSAVEC -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsavec -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVEC
10+
// RUN: %clang_cc1 %s -DTEST_XSAVEC -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsavec -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVEC
11+
// RUN: %clang_cc1 %s -DTEST_XSAVEC -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsavec -fno-signed-char -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVEC
1212

13-
// RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaves -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVES
14-
// RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaves -fno-signed-char -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=XSAVES
13+
// RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaves -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVES
14+
// RUN: %clang_cc1 %s -DTEST_XSAVES -O0 -triple=x86_64-unknown-unknown -target-feature +xsave -target-feature +xsaves -fno-signed-char -emit-llvm -o - -Wall -Wno-unused-but-set-variable -Werror | FileCheck %s --check-prefix=XSAVES
1515

1616
// Don't include mm_malloc.h, it's system specific.
1717
#define __MM_MALLOC_H

0 commit comments

Comments
 (0)