[PATCH] D40288: [clang-format] Add option to group multiple #include blocks when sorting includes
KrzysztofKapusta added a comment. @krasimir thanks for the review! I don't have commit rights. Would you push this for me? Repository: rL LLVM https://reviews.llvm.org/D40288 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D40381: Parse concept definition
changyu updated this revision to Diff 124319. changyu added a comment. - Fixed indent issues. - Moved TODO on boolean atomic constraints to ActOnConceptDefinition where we are currently checking for boolean constraint expression https://reviews.llvm.org/D40381 Files: include/clang/AST/DeclTemplate.h include/clang/AST/RecursiveASTVisitor.h include/clang/Basic/DeclNodes.td include/clang/Basic/DiagnosticSemaKinds.td include/clang/Basic/TemplateKinds.h include/clang/Parse/Parser.h include/clang/Sema/Sema.h include/clang/Serialization/ASTBitCodes.h lib/AST/ASTDumper.cpp lib/AST/DeclBase.cpp lib/AST/DeclTemplate.cpp lib/CodeGen/CGDecl.cpp lib/Parse/ParseTemplate.cpp lib/Sema/SemaTemplate.cpp lib/Sema/SemaTemplateInstantiateDecl.cpp lib/Serialization/ASTCommon.cpp lib/Serialization/ASTReaderDecl.cpp lib/Serialization/ASTWriter.cpp lib/Serialization/ASTWriterDecl.cpp test/CXX/concepts-ts/expr/expr.prim/expr.prim.id/p3.cpp test/Parser/cxx-concept-declaration.cpp tools/libclang/CIndex.cpp Index: tools/libclang/CIndex.cpp === --- tools/libclang/CIndex.cpp +++ tools/libclang/CIndex.cpp @@ -5906,6 +5906,7 @@ case Decl::PragmaComment: case Decl::PragmaDetectMismatch: case Decl::UsingPack: + case Decl::Concept: return C; // Declaration kinds that don't make any sense here, but are Index: test/Parser/cxx-concept-declaration.cpp === --- test/Parser/cxx-concept-declaration.cpp +++ test/Parser/cxx-concept-declaration.cpp @@ -1,7 +1,31 @@ // Support parsing of concepts -// Disabled for now. -// expected-no-diagnostics -// RUN: %clang_cc1 -std=c++14 -fconcepts-ts -x c++ -verify %s -// template concept C1 = true; +// RUN: %clang_cc1 -std=c++2a -fconcepts-ts -verify %s +template concept C1 = true; + +// TODO: Following line should fail. +template concept C1 = true; + +template concept D1 = true; // expected-error {{expected template parameter}} + +template concept C2 = 0.f; // expected-error {{constraint expression must be 'bool'}} + +struct S1 { + template concept C1 = true; // expected-error {{concept declarations may only appear in global or namespace scope}} +}; + +template +template +concept C4 = true; // expected-error {{extraneous template parameter list in concept definition}} + +template concept C5 = true; // expected-note {{previous}} expected-note {{previous}} +int C5; // expected-error {{redefinition}} +struct C5 {}; // expected-error {{redefinition}} + +// TODO: Last of the following two lines should fail. +struct C6 {}; +template concept C6 = true; + +// TODO: Add test to prevent explicit specialization, partial specialization +// and explicit instantiation of concepts. Index: test/CXX/concepts-ts/expr/expr.prim/expr.prim.id/p3.cpp === --- /dev/null +++ test/CXX/concepts-ts/expr/expr.prim/expr.prim.id/p3.cpp @@ -0,0 +1,5 @@ +// RUN: %clang_cc1 -std=c++2a -fconcepts-ts -verify %s +// expected-no-diagnostics + +template concept C = true; +static_assert(C); Index: lib/Serialization/ASTWriterDecl.cpp === --- lib/Serialization/ASTWriterDecl.cpp +++ lib/Serialization/ASTWriterDecl.cpp @@ -101,6 +101,7 @@ void VisitBindingDecl(BindingDecl *D); void VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D); void VisitTemplateDecl(TemplateDecl *D); +void VisitConceptDecl(ConceptDecl *D); void VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D); void VisitClassTemplateDecl(ClassTemplateDecl *D); void VisitVarTemplateDecl(VarTemplateDecl *D); @@ -1385,6 +1386,12 @@ Record.AddTemplateParameterList(D->getTemplateParameters()); } +void ASTDeclWriter::VisitConceptDecl(ConceptDecl *D) { + VisitTemplateDecl(D); + Record.AddStmt(D->getConstraintExpr()); + Code = serialization::DECL_CONCEPT; +} + void ASTDeclWriter::VisitRedeclarableTemplateDecl(RedeclarableTemplateDecl *D) { VisitRedeclarable(D); Index: lib/Serialization/ASTWriter.cpp === --- lib/Serialization/ASTWriter.cpp +++ lib/Serialization/ASTWriter.cpp @@ -1277,6 +1277,7 @@ RECORD(DECL_TEMPLATE_TYPE_PARM); RECORD(DECL_NON_TYPE_TEMPLATE_PARM); RECORD(DECL_TEMPLATE_TEMPLATE_PARM); + RECORD(DECL_CONCEPT); RECORD(DECL_TYPE_ALIAS_TEMPLATE); RECORD(DECL_STATIC_ASSERT); RECORD(DECL_CXX_BASE_SPECIFIERS); Index: lib/Serialization/ASTReaderDecl.cpp === --- lib/Serialization/ASTReaderDecl.cpp +++ lib/Serialization/ASTReaderDecl.cpp @@ -337,6 +337,7 @@ void VisitBindingDecl(BindingDecl *BD); void VisitNonTypeTemplateParmDecl(NonTypeTemplateParmDecl *D); DeclID VisitTemplateDecl(TemplateDecl *D); +void VisitConceptDecl(ConceptDecl *D); Re
[PATCH] D33563: Track whether a unary operation can overflow
aaron.ballman updated this revision to Diff 124320. aaron.ballman added a comment. Rebased against ToT, ping. https://reviews.llvm.org/D33563 Files: include/clang/AST/Expr.h lib/AST/ASTDumper.cpp lib/AST/ASTImporter.cpp lib/AST/ExprConstant.cpp lib/CodeGen/CGExprScalar.cpp lib/CodeGen/CGStmtOpenMP.cpp lib/Sema/SemaDeclCXX.cpp lib/Sema/SemaExpr.cpp lib/Sema/SemaPseudoObject.cpp lib/Serialization/ASTReaderStmt.cpp lib/Serialization/ASTWriterStmt.cpp test/Misc/ast-dump-stmt.c Index: test/Misc/ast-dump-stmt.c === --- test/Misc/ast-dump-stmt.c +++ test/Misc/ast-dump-stmt.c @@ -33,3 +33,35 @@ // CHECK-NEXT: OpaqueValueExpr // CHECK-NEXT: IntegerLiteral // CHECK-NEXT: IntegerLiteral + +void TestUnaryOperatorExpr(void) { + char T1 = 1; + int T2 = 1; + + T1++; + T2++; + // CHECK: UnaryOperator{{.*}}postfix '++' cannot overflow + // CHECK-NEXT: DeclRefExpr{{.*}}'T1' 'char' + // CHECK-NOT: UnaryOperator{{.*}}postfix '++' cannot overflow + // CHECK:DeclRefExpr{{.*}}'T2' 'int' + + -T1; + -T2; + // CHECK: UnaryOperator{{.*}}prefix '-' cannot overflow + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'T1' 'char' + // CHECK-NOT: UnaryOperator{{.*}}prefix '-' cannot overflow + // CHECK:ImplicitCastExpr + // CHECK: DeclRefExpr{{.*}}'T2' 'int' + + ~T1; + ~T2; + // CHECK: UnaryOperator{{.*}}prefix '~' cannot overflow + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: ImplicitCastExpr + // CHECK-NEXT: DeclRefExpr{{.*}}'T1' 'char' + // CHECK-NOT: UnaryOperator{{.*}}prefix '~' cannot overflow + // CHECK:ImplicitCastExpr + // CHECK: DeclRefExpr{{.*}}'T2' 'int' +} Index: lib/Serialization/ASTWriterStmt.cpp === --- lib/Serialization/ASTWriterStmt.cpp +++ lib/Serialization/ASTWriterStmt.cpp @@ -509,6 +509,7 @@ Record.AddStmt(E->getSubExpr()); Record.push_back(E->getOpcode()); // FIXME: stable encoding Record.AddSourceLocation(E->getOperatorLoc()); + Record.push_back(E->canOverflow()); Code = serialization::EXPR_UNARY_OPERATOR; } Index: lib/Serialization/ASTReaderStmt.cpp === --- lib/Serialization/ASTReaderStmt.cpp +++ lib/Serialization/ASTReaderStmt.cpp @@ -553,6 +553,7 @@ E->setSubExpr(Record.readSubExpr()); E->setOpcode((UnaryOperator::Opcode)Record.readInt()); E->setOperatorLoc(ReadSourceLocation()); + E->setCanOverflow(Record.readInt()); } void ASTStmtReader::VisitOffsetOfExpr(OffsetOfExpr *E) { Index: lib/Sema/SemaPseudoObject.cpp === --- lib/Sema/SemaPseudoObject.cpp +++ lib/Sema/SemaPseudoObject.cpp @@ -527,9 +527,12 @@ (result.get()->isTypeDependent() || CanCaptureValue(result.get( setResultToLastSemantic(); - UnaryOperator *syntactic = -new (S.Context) UnaryOperator(syntacticOp, opcode, resultType, - VK_LValue, OK_Ordinary, opcLoc); + UnaryOperator *syntactic = new (S.Context) UnaryOperator( + syntacticOp, opcode, resultType, VK_LValue, OK_Ordinary, opcLoc, + !resultType->isDependentType() + ? S.Context.getTypeSize(resultType) >= +S.Context.getTypeSize(S.Context.IntTy) + : false); return complete(syntactic); } @@ -1633,9 +1636,9 @@ Expr *syntax = E->getSyntacticForm(); if (UnaryOperator *uop = dyn_cast(syntax)) { Expr *op = stripOpaqueValuesFromPseudoObjectRef(*this, uop->getSubExpr()); -return new (Context) UnaryOperator(op, uop->getOpcode(), uop->getType(), - uop->getValueKind(), uop->getObjectKind(), - uop->getOperatorLoc()); +return new (Context) UnaryOperator( +op, uop->getOpcode(), uop->getType(), uop->getValueKind(), +uop->getObjectKind(), uop->getOperatorLoc(), uop->canOverflow()); } else if (CompoundAssignOperator *cop = dyn_cast(syntax)) { Expr *lhs = stripOpaqueValuesFromPseudoObjectRef(*this, cop->getLHS()); Index: lib/Sema/SemaExpr.cpp === --- lib/Sema/SemaExpr.cpp +++ lib/Sema/SemaExpr.cpp @@ -12151,13 +12151,25 @@ return CreateBuiltinBinOp(OpLoc, Opc, LHSExpr, RHSExpr); } +static bool isOverflowingIntegerType(ASTContext &Ctx, QualType T) { + if (T.isNull() || T->isDependentType()) +return false; + + if (!T->isPromotableIntegerType()) +return true; + + return Ctx.getIntWidth(T) >= Ctx.getIntWidth(Ctx.IntTy); +} + ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc, Expr *InputExpr) { ExprResult Input =
[PATCH] D40176: [CodeGen] Collect information about sizes of accesses and access types for TBAA
rjmccall accepted this revision. rjmccall added a comment. This revision is now accepted and ready to land. Alright, I guess this all makes sense. We do have some extensions that are playing around with v-table pointers, so it's probably fair to require the v-table pointer type to be passed down instead of assuming it's just the generic pointer size. https://reviews.llvm.org/D40176 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D40476: Switch kryo to use -mcpu=cortex-a57 when invoking the assembler
pirama updated this revision to Diff 124318. pirama added a comment. Few refactorings. https://reviews.llvm.org/D40476 Files: lib/Driver/ToolChains/Gnu.cpp test/Driver/as-mcpu.c Index: test/Driver/as-mcpu.c === --- /dev/null +++ test/Driver/as-mcpu.c @@ -0,0 +1,10 @@ +// == Check that krait is substituted by cortex-15 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=krait -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A15 %s +// CHECK-CORTEX-A15: as{{(.exe)?}}" "{{.*}}-mcpu=cortex-a15 + +// == Check that kryo is substituted by cortex-57 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// RUN: %clang -target aarch64-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// CHECK-CORTEX-A57: as{{(.exe)?}}" "{{.*}}-mcpu=cortex-a57 Index: lib/Driver/ToolChains/Gnu.cpp === --- lib/Driver/ToolChains/Gnu.cpp +++ lib/Driver/ToolChains/Gnu.cpp @@ -653,22 +653,36 @@ Args.AddLastArg(CmdArgs, options::OPT_march_EQ); -// FIXME: remove krait check when GNU tools support krait cpu -// for now replace it with -mcpu=cortex-a15 to avoid a lower -// march from being picked in the absence of a cpu flag. -Arg *A; -if ((A = Args.getLastArg(options::OPT_mcpu_EQ)) && -StringRef(A->getValue()).equals_lower("krait")) - CmdArgs.push_back("-mcpu=cortex-a15"); -else - Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); +// FIXME: remove krait and kryo checks when GNU tools support them. For now +// use -mcpu=cortex-a15 for krait and -mcpu=cortex-a57 for kryo +// -mcpu=cortex-a57 to avoid a lower march from being picked in the absence +// of a cpu flag. +Arg *A = Args.getLastArg(options::OPT_mcpu_EQ); +if (A) { + StringRef CPUArg(A->getValue()); + if(CPUArg.equals_lower("krait")) +CmdArgs.push_back("-mcpu=cortex-a15"); + else if(CPUArg.equals_lower("kryo")) +CmdArgs.push_back("-mcpu=cortex-a57"); + else +Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); +} Args.AddLastArg(CmdArgs, options::OPT_mfpu_EQ); break; } case llvm::Triple::aarch64: case llvm::Triple::aarch64_be: { Args.AddLastArg(CmdArgs, options::OPT_march_EQ); -Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); + +// FIXME: remove kryo check when GNU tools support them. For now use +// -mcpu=cortex-a57 to avoid a lower march from being picked in the absence +// of a cpu flag. +Arg *A; +if ((A = Args.getLastArg(options::OPT_mcpu_EQ)) && +(StringRef(A->getValue()).equals_lower("kryo"))) + CmdArgs.push_back("-mcpu=cortex-a57"); +else + Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); break; } case llvm::Triple::mips: Index: test/Driver/as-mcpu.c === --- /dev/null +++ test/Driver/as-mcpu.c @@ -0,0 +1,10 @@ +// == Check that krait is substituted by cortex-15 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=krait -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A15 %s +// CHECK-CORTEX-A15: as{{(.exe)?}}" "{{.*}}-mcpu=cortex-a15 + +// == Check that kryo is substituted by cortex-57 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// RUN: %clang -target aarch64-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// CHECK-CORTEX-A57: as{{(.exe)?}}" "{{.*}}-mcpu=cortex-a57 Index: lib/Driver/ToolChains/Gnu.cpp === --- lib/Driver/ToolChains/Gnu.cpp +++ lib/Driver/ToolChains/Gnu.cpp @@ -653,22 +653,36 @@ Args.AddLastArg(CmdArgs, options::OPT_march_EQ); -// FIXME: remove krait check when GNU tools support krait cpu -// for now replace it with -mcpu=cortex-a15 to avoid a lower -// march from being picked in the absence of a cpu flag. -Arg *A; -if ((A = Args.getLastArg(options::OPT_mcpu_EQ)) && -StringRef(A->getValue()).equals_lower("krait")) - CmdArgs.push_back("-mcpu=cortex-a15"); -else - Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); +// FIXME: remove krait and kryo checks when GNU tools support them. For now +// use -mcpu=cortex-a15 for krait and -mcpu=cortex-a57 for kryo +// -mcpu=cortex-a57 to avoid a lower march from being picked in the absence +// of a cpu flag. +Arg *A = Args.getLastArg(options::OPT_mcpu_EQ); +if (A) { + StringRef CPUArg(A->getValue()); + i
r319007 - Enable additonal features in NetBSD
Author: kamil Date: Sun Nov 26 14:24:22 2017 New Revision: 319007 URL: http://llvm.org/viewvc/llvm-project?rev=319007&view=rev Log: Enable additonal features in NetBSD Summary: Enable for x86_64: - ESan, - KASan, - MSan. Enable for x86_64 and i386: - Scudo. These features are under active development and in various level of completeness. Sponsored by Reviewers: dvyukov, joerg, vitalybuka, eugenis Reviewed By: eugenis Subscribers: llvm-commits, #sanitizers Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D40456 Modified: cfe/trunk/lib/Driver/ToolChains/NetBSD.cpp Modified: cfe/trunk/lib/Driver/ToolChains/NetBSD.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/NetBSD.cpp?rev=319007&r1=319006&r2=319007&view=diff == --- cfe/trunk/lib/Driver/ToolChains/NetBSD.cpp (original) +++ cfe/trunk/lib/Driver/ToolChains/NetBSD.cpp Sun Nov 26 14:24:22 2017 @@ -425,11 +425,15 @@ SanitizerMask NetBSD::getSupportedSaniti Res |= SanitizerKind::Function; Res |= SanitizerKind::Leak; Res |= SanitizerKind::SafeStack; +Res |= SanitizerKind::Scudo; Res |= SanitizerKind::Vptr; } if (IsX86_64) { +Res |= SanitizerKind::Efficiency; Res |= SanitizerKind::Fuzzer; Res |= SanitizerKind::FuzzerNoLink; +Res |= SanitizerKind::KernelAddress; +Res |= SanitizerKind::Memory; Res |= SanitizerKind::Thread; } return Res; ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D40476: Switch kryo to use -mcpu=cortex-a57 when invoking the assembler
pirama created this revision. Using -no-integrated-as causes -mcpu=kryo to fail since GNU assembler doesn't recognize kryo. Cortex-a57 is the closest CPU to kryo that the assembler does recognize. So we should switch the assembler to use that instead. https://reviews.llvm.org/D40476 Files: lib/Driver/ToolChains/Gnu.cpp test/Driver/as-mcpu.c Index: test/Driver/as-mcpu.c === --- /dev/null +++ test/Driver/as-mcpu.c @@ -0,0 +1,10 @@ +// == Check that krait is substituted by cortex-15 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=krait -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A15 %s +// CHECK-CORTEX-A15: bin/as{{.*}}-mcpu=cortex-a15 + +// == Check that kryo is substituted by cortex-57 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// RUN: %clang -target aarch64-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// CHECK-CORTEX-A57: bin/as{{.*}}-mcpu=cortex-a57 Index: lib/Driver/ToolChains/Gnu.cpp === --- lib/Driver/ToolChains/Gnu.cpp +++ lib/Driver/ToolChains/Gnu.cpp @@ -653,22 +653,35 @@ Args.AddLastArg(CmdArgs, options::OPT_march_EQ); -// FIXME: remove krait check when GNU tools support krait cpu -// for now replace it with -mcpu=cortex-a15 to avoid a lower -// march from being picked in the absence of a cpu flag. -Arg *A; -if ((A = Args.getLastArg(options::OPT_mcpu_EQ)) && -StringRef(A->getValue()).equals_lower("krait")) - CmdArgs.push_back("-mcpu=cortex-a15"); -else - Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); +// FIXME: remove krait and kryo checks when GNU tools support them. For now +// use -mcpu=cortex-a15 for krait and -mcpu=cortex-a57 for kryo +// -mcpu=cortex-a57 to avoid a lower march from being picked in the absence +// of a cpu flag. +Arg *A = Args.getLastArg(options::OPT_mcpu_EQ); +if (A) { + if(StringRef(A->getValue()).equals_lower("krait")) +CmdArgs.push_back("-mcpu=cortex-a15"); + else if(StringRef(A->getValue()).equals_lower("kryo")) +CmdArgs.push_back("-mcpu=cortex-a57"); + else +Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); +} Args.AddLastArg(CmdArgs, options::OPT_mfpu_EQ); break; } case llvm::Triple::aarch64: case llvm::Triple::aarch64_be: { Args.AddLastArg(CmdArgs, options::OPT_march_EQ); -Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); + +// FIXME: remove kryo check when GNU tools support them. For now use +// -mcpu=cortex-a57 to avoid a lower march from being picked in the absence +// of a cpu flag. +Arg *A; +if ((A = Args.getLastArg(options::OPT_mcpu_EQ)) && +(StringRef(A->getValue()).equals_lower("kryo"))) + CmdArgs.push_back("-mcpu=cortex-a57"); +else + Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); break; } case llvm::Triple::mips: Index: test/Driver/as-mcpu.c === --- /dev/null +++ test/Driver/as-mcpu.c @@ -0,0 +1,10 @@ +// == Check that krait is substituted by cortex-15 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=krait -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A15 %s +// CHECK-CORTEX-A15: bin/as{{.*}}-mcpu=cortex-a15 + +// == Check that kryo is substituted by cortex-57 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// RUN: %clang -target aarch64-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// CHECK-CORTEX-A57: bin/as{{.*}}-mcpu=cortex-a57 Index: lib/Driver/ToolChains/Gnu.cpp === --- lib/Driver/ToolChains/Gnu.cpp +++ lib/Driver/ToolChains/Gnu.cpp @@ -653,22 +653,35 @@ Args.AddLastArg(CmdArgs, options::OPT_march_EQ); -// FIXME: remove krait check when GNU tools support krait cpu -// for now replace it with -mcpu=cortex-a15 to avoid a lower -// march from being picked in the absence of a cpu flag. -Arg *A; -if ((A = Args.getLastArg(options::OPT_mcpu_EQ)) && -StringRef(A->getValue()).equals_lower("krait")) - CmdArgs.push_back("-mcpu=cortex-a15"); -else - Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); +// FIXME: remove krait and kryo checks when GNU tools support them. For now +// use -mcpu=cortex-a15 for krait and -mcpu=cortex-a57 for kryo +// -mcpu=cortex-a57 to avoid a lower march from being picked in the absence +// of a cp
[PATCH] D37302: [Headers] Define *_HAS_SUBNORM for FLT, DBL, LDBL
pirama updated this revision to Diff 124314. pirama added a comment. Revert to previous patch after accidental update https://reviews.llvm.org/D37302 Files: lib/Driver/ToolChains/Gnu.cpp lib/Headers/float.h test/Driver/as-mcpu.c test/Headers/float.c Index: test/Headers/float.c === --- test/Headers/float.c +++ test/Headers/float.c @@ -61,6 +61,21 @@ #if ((FLT_DECIMAL_DIG > DBL_DECIMAL_DIG) || (DBL_DECIMAL_DIG > LDBL_DECIMAL_DIG)) #error "Mandatory macros {FLT,DBL,LDBL}_DECIMAL_DIG are invalid." #endif +#ifndef FLT_HAS_SUBNORM +#error "Mandatory macro FLT_HAS_SUBNORM is missing." +#elif FLT_HAS_SUBNORM != __FLT_HAS_DENORM__ +#error "Mandatory macro FLT_HAS_SUBNORM is invalid." +#endif +#ifndef LDBL_HAS_SUBNORM +#error "Mandatory macro LDBL_HAS_SUBNORM is missing." +#elif LDBL_HAS_SUBNORM != __LDBL_HAS_DENORM__ +#error "Mandatory macro LDBL_HAS_SUBNORM is invalid." +#endif +#ifndef DBL_HAS_SUBNORM +#error "Mandatory macro DBL_HAS_SUBNORM is missing." +#elif DBL_HAS_SUBNORM != __DBL_HAS_DENORM__ +#error "Mandatory macro DBL_HAS_SUBNORM is invalid." +#endif #else #ifdef FLT_DECIMAL_DIG #error "Macro FLT_DECIMAL_DIG should not be defined." @@ -71,6 +86,15 @@ #ifdef LDBL_DECIMAL_DIG #error "Macro LDBL_DECIMAL_DIG should not be defined." #endif +#ifdef FLT_HAS_SUBNORM +#error "Macro FLT_HAS_SUBNORM should not be defined." +#endif +#ifdef DBL_HAS_SUBNORM +#error "Macro DBL_HAS_SUBNORM should not be defined." +#endif +#ifdef LDBL_HAS_SUBNORM +#error "Macro LDBL_HAS_SUBNORM should not be defined." +#endif #endif Index: test/Driver/as-mcpu.c === --- /dev/null +++ test/Driver/as-mcpu.c @@ -0,0 +1,10 @@ +// == Check that krait is substituted by cortex-15 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=krait -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A15 %s +// CHECK-CORTEX-A15: bin/as{{.*}}-mcpu=cortex-a15 + +// == Check that kryo is substituted by cortex-57 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// RUN: %clang -target aarch64-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// CHECK-CORTEX-A57: bin/as{{.*}}-mcpu=cortex-a57 Index: lib/Headers/float.h === --- lib/Headers/float.h +++ lib/Headers/float.h @@ -85,6 +85,9 @@ #undef FLT_DECIMAL_DIG #undef DBL_DECIMAL_DIG #undef LDBL_DECIMAL_DIG +#undef FLT_HAS_SUBNORM +#undef DBL_HAS_SUBNORM +#undef LDBL_HAS_SUBNORM # endif #endif @@ -141,6 +144,9 @@ # define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ # define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ # define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ +# define FLT_HAS_SUBNORM __FLT_HAS_DENORM__ +# define DBL_HAS_SUBNORM __DBL_HAS_DENORM__ +# define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__ #endif #ifdef __STDC_WANT_IEC_60559_TYPES_EXT__ Index: lib/Driver/ToolChains/Gnu.cpp === --- lib/Driver/ToolChains/Gnu.cpp +++ lib/Driver/ToolChains/Gnu.cpp @@ -653,22 +653,35 @@ Args.AddLastArg(CmdArgs, options::OPT_march_EQ); -// FIXME: remove krait check when GNU tools support krait cpu -// for now replace it with -mcpu=cortex-a15 to avoid a lower -// march from being picked in the absence of a cpu flag. -Arg *A; -if ((A = Args.getLastArg(options::OPT_mcpu_EQ)) && -StringRef(A->getValue()).equals_lower("krait")) - CmdArgs.push_back("-mcpu=cortex-a15"); -else - Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); +// FIXME: remove krait and kryo checks when GNU tools support them. For now +// use -mcpu=cortex-a15 for krait and -mcpu=cortex-a57 for kryo +// -mcpu=cortex-a57 to avoid a lower march from being picked in the absence +// of a cpu flag. +Arg *A = Args.getLastArg(options::OPT_mcpu_EQ); +if (A) { + if(StringRef(A->getValue()).equals_lower("krait")) +CmdArgs.push_back("-mcpu=cortex-a15"); + else if(StringRef(A->getValue()).equals_lower("kryo")) +CmdArgs.push_back("-mcpu=cortex-a57"); + else +Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); +} Args.AddLastArg(CmdArgs, options::OPT_mfpu_EQ); break; } case llvm::Triple::aarch64: case llvm::Triple::aarch64_be: { Args.AddLastArg(CmdArgs, options::OPT_march_EQ); -Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); + +// FIXME: remove kryo check when GNU tools support them. For now use +// -mcpu=cortex-a57 to av
[PATCH] D37302: [Headers] Define *_HAS_SUBNORM for FLT, DBL, LDBL
pirama updated this revision to Diff 124315. pirama added a comment. Actually revert https://reviews.llvm.org/D37302 Files: lib/Headers/float.h test/Headers/float.c Index: test/Headers/float.c === --- test/Headers/float.c +++ test/Headers/float.c @@ -61,6 +61,21 @@ #if ((FLT_DECIMAL_DIG > DBL_DECIMAL_DIG) || (DBL_DECIMAL_DIG > LDBL_DECIMAL_DIG)) #error "Mandatory macros {FLT,DBL,LDBL}_DECIMAL_DIG are invalid." #endif +#ifndef FLT_HAS_SUBNORM +#error "Mandatory macro FLT_HAS_SUBNORM is missing." +#elif FLT_HAS_SUBNORM != __FLT_HAS_DENORM__ +#error "Mandatory macro FLT_HAS_SUBNORM is invalid." +#endif +#ifndef LDBL_HAS_SUBNORM +#error "Mandatory macro LDBL_HAS_SUBNORM is missing." +#elif LDBL_HAS_SUBNORM != __LDBL_HAS_DENORM__ +#error "Mandatory macro LDBL_HAS_SUBNORM is invalid." +#endif +#ifndef DBL_HAS_SUBNORM +#error "Mandatory macro DBL_HAS_SUBNORM is missing." +#elif DBL_HAS_SUBNORM != __DBL_HAS_DENORM__ +#error "Mandatory macro DBL_HAS_SUBNORM is invalid." +#endif #else #ifdef FLT_DECIMAL_DIG #error "Macro FLT_DECIMAL_DIG should not be defined." @@ -71,6 +86,15 @@ #ifdef LDBL_DECIMAL_DIG #error "Macro LDBL_DECIMAL_DIG should not be defined." #endif +#ifdef FLT_HAS_SUBNORM +#error "Macro FLT_HAS_SUBNORM should not be defined." +#endif +#ifdef DBL_HAS_SUBNORM +#error "Macro DBL_HAS_SUBNORM should not be defined." +#endif +#ifdef LDBL_HAS_SUBNORM +#error "Macro LDBL_HAS_SUBNORM should not be defined." +#endif #endif Index: lib/Headers/float.h === --- lib/Headers/float.h +++ lib/Headers/float.h @@ -85,6 +85,9 @@ #undef FLT_DECIMAL_DIG #undef DBL_DECIMAL_DIG #undef LDBL_DECIMAL_DIG +#undef FLT_HAS_SUBNORM +#undef DBL_HAS_SUBNORM +#undef LDBL_HAS_SUBNORM # endif #endif @@ -141,6 +144,9 @@ # define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ # define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ # define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ +# define FLT_HAS_SUBNORM __FLT_HAS_DENORM__ +# define DBL_HAS_SUBNORM __DBL_HAS_DENORM__ +# define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__ #endif #ifdef __STDC_WANT_IEC_60559_TYPES_EXT__ Index: test/Headers/float.c === --- test/Headers/float.c +++ test/Headers/float.c @@ -61,6 +61,21 @@ #if ((FLT_DECIMAL_DIG > DBL_DECIMAL_DIG) || (DBL_DECIMAL_DIG > LDBL_DECIMAL_DIG)) #error "Mandatory macros {FLT,DBL,LDBL}_DECIMAL_DIG are invalid." #endif +#ifndef FLT_HAS_SUBNORM +#error "Mandatory macro FLT_HAS_SUBNORM is missing." +#elif FLT_HAS_SUBNORM != __FLT_HAS_DENORM__ +#error "Mandatory macro FLT_HAS_SUBNORM is invalid." +#endif +#ifndef LDBL_HAS_SUBNORM +#error "Mandatory macro LDBL_HAS_SUBNORM is missing." +#elif LDBL_HAS_SUBNORM != __LDBL_HAS_DENORM__ +#error "Mandatory macro LDBL_HAS_SUBNORM is invalid." +#endif +#ifndef DBL_HAS_SUBNORM +#error "Mandatory macro DBL_HAS_SUBNORM is missing." +#elif DBL_HAS_SUBNORM != __DBL_HAS_DENORM__ +#error "Mandatory macro DBL_HAS_SUBNORM is invalid." +#endif #else #ifdef FLT_DECIMAL_DIG #error "Macro FLT_DECIMAL_DIG should not be defined." @@ -71,6 +86,15 @@ #ifdef LDBL_DECIMAL_DIG #error "Macro LDBL_DECIMAL_DIG should not be defined." #endif +#ifdef FLT_HAS_SUBNORM +#error "Macro FLT_HAS_SUBNORM should not be defined." +#endif +#ifdef DBL_HAS_SUBNORM +#error "Macro DBL_HAS_SUBNORM should not be defined." +#endif +#ifdef LDBL_HAS_SUBNORM +#error "Macro LDBL_HAS_SUBNORM should not be defined." +#endif #endif Index: lib/Headers/float.h === --- lib/Headers/float.h +++ lib/Headers/float.h @@ -85,6 +85,9 @@ #undef FLT_DECIMAL_DIG #undef DBL_DECIMAL_DIG #undef LDBL_DECIMAL_DIG +#undef FLT_HAS_SUBNORM +#undef DBL_HAS_SUBNORM +#undef LDBL_HAS_SUBNORM # endif #endif @@ -141,6 +144,9 @@ # define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ # define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ # define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ +# define FLT_HAS_SUBNORM __FLT_HAS_DENORM__ +# define DBL_HAS_SUBNORM __DBL_HAS_DENORM__ +# define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__ #endif #ifdef __STDC_WANT_IEC_60559_TYPES_EXT__ ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D37302: [Headers] Define *_HAS_SUBNORM for FLT, DBL, LDBL
pirama updated this revision to Diff 124313. pirama added a comment. - Switch kryo to use -mcpu=cortex-a57 when invoking the assembler https://reviews.llvm.org/D37302 Files: lib/Driver/ToolChains/Gnu.cpp lib/Headers/float.h test/Driver/as-mcpu.c test/Headers/float.c Index: test/Headers/float.c === --- test/Headers/float.c +++ test/Headers/float.c @@ -61,6 +61,21 @@ #if ((FLT_DECIMAL_DIG > DBL_DECIMAL_DIG) || (DBL_DECIMAL_DIG > LDBL_DECIMAL_DIG)) #error "Mandatory macros {FLT,DBL,LDBL}_DECIMAL_DIG are invalid." #endif +#ifndef FLT_HAS_SUBNORM +#error "Mandatory macro FLT_HAS_SUBNORM is missing." +#elif FLT_HAS_SUBNORM != __FLT_HAS_DENORM__ +#error "Mandatory macro FLT_HAS_SUBNORM is invalid." +#endif +#ifndef LDBL_HAS_SUBNORM +#error "Mandatory macro LDBL_HAS_SUBNORM is missing." +#elif LDBL_HAS_SUBNORM != __LDBL_HAS_DENORM__ +#error "Mandatory macro LDBL_HAS_SUBNORM is invalid." +#endif +#ifndef DBL_HAS_SUBNORM +#error "Mandatory macro DBL_HAS_SUBNORM is missing." +#elif DBL_HAS_SUBNORM != __DBL_HAS_DENORM__ +#error "Mandatory macro DBL_HAS_SUBNORM is invalid." +#endif #else #ifdef FLT_DECIMAL_DIG #error "Macro FLT_DECIMAL_DIG should not be defined." @@ -71,6 +86,15 @@ #ifdef LDBL_DECIMAL_DIG #error "Macro LDBL_DECIMAL_DIG should not be defined." #endif +#ifdef FLT_HAS_SUBNORM +#error "Macro FLT_HAS_SUBNORM should not be defined." +#endif +#ifdef DBL_HAS_SUBNORM +#error "Macro DBL_HAS_SUBNORM should not be defined." +#endif +#ifdef LDBL_HAS_SUBNORM +#error "Macro LDBL_HAS_SUBNORM should not be defined." +#endif #endif Index: test/Driver/as-mcpu.c === --- /dev/null +++ test/Driver/as-mcpu.c @@ -0,0 +1,10 @@ +// == Check that krait is substituted by cortex-15 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=krait -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A15 %s +// CHECK-CORTEX-A15: bin/as{{.*}}-mcpu=cortex-a15 + +// == Check that kryo is substituted by cortex-57 when invoking +// the assembler +// RUN: %clang -target arm-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// RUN: %clang -target aarch64-linux -mcpu=kryo -### -c %s -v -fno-integrated-as 2>&1 | FileCheck -check-prefix=CHECK-CORTEX-A57 %s +// CHECK-CORTEX-A57: bin/as{{.*}}-mcpu=cortex-a57 Index: lib/Headers/float.h === --- lib/Headers/float.h +++ lib/Headers/float.h @@ -85,6 +85,9 @@ #undef FLT_DECIMAL_DIG #undef DBL_DECIMAL_DIG #undef LDBL_DECIMAL_DIG +#undef FLT_HAS_SUBNORM +#undef DBL_HAS_SUBNORM +#undef LDBL_HAS_SUBNORM # endif #endif @@ -141,6 +144,9 @@ # define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ # define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ # define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ +# define FLT_HAS_SUBNORM __FLT_HAS_DENORM__ +# define DBL_HAS_SUBNORM __DBL_HAS_DENORM__ +# define LDBL_HAS_SUBNORM __LDBL_HAS_DENORM__ #endif #ifdef __STDC_WANT_IEC_60559_TYPES_EXT__ Index: lib/Driver/ToolChains/Gnu.cpp === --- lib/Driver/ToolChains/Gnu.cpp +++ lib/Driver/ToolChains/Gnu.cpp @@ -653,22 +653,35 @@ Args.AddLastArg(CmdArgs, options::OPT_march_EQ); -// FIXME: remove krait check when GNU tools support krait cpu -// for now replace it with -mcpu=cortex-a15 to avoid a lower -// march from being picked in the absence of a cpu flag. -Arg *A; -if ((A = Args.getLastArg(options::OPT_mcpu_EQ)) && -StringRef(A->getValue()).equals_lower("krait")) - CmdArgs.push_back("-mcpu=cortex-a15"); -else - Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); +// FIXME: remove krait and kryo checks when GNU tools support them. For now +// use -mcpu=cortex-a15 for krait and -mcpu=cortex-a57 for kryo +// -mcpu=cortex-a57 to avoid a lower march from being picked in the absence +// of a cpu flag. +Arg *A = Args.getLastArg(options::OPT_mcpu_EQ); +if (A) { + if(StringRef(A->getValue()).equals_lower("krait")) +CmdArgs.push_back("-mcpu=cortex-a15"); + else if(StringRef(A->getValue()).equals_lower("kryo")) +CmdArgs.push_back("-mcpu=cortex-a57"); + else +Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); +} Args.AddLastArg(CmdArgs, options::OPT_mfpu_EQ); break; } case llvm::Triple::aarch64: case llvm::Triple::aarch64_be: { Args.AddLastArg(CmdArgs, options::OPT_march_EQ); -Args.AddLastArg(CmdArgs, options::OPT_mcpu_EQ); + +// FIXME: remove kryo check when GNU tools support them. For now use +// -mcpu
[PATCH] D38171: [clang-tidy] Implement clang-tidy check aliases
malcolm.parsons added a comment. In https://reviews.llvm.org/D38171#927045, @alexfh wrote: > The only place I can think of, where -checks=* is useful is in combination > with -list-checks, where the presence of clang-diagnostic- entries would be > desired anyway. Can we replace -list-checks with -list-enabled-checks and -list-all-checks? The current behaviour is confusing and recently caused Chandler to abandon a clang-tidy demo. https://reviews.llvm.org/D38171 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D18768: Refactoring attribute subject diagnostics
aaron.ballman added a comment. I had the chance to finalize this long-standing review by fixing up the remaining test cases and removing the unused enumerators from AttributeList.h. I've commit in r319002 (but cannot close the review because the "Accept" didn't happen). https://reviews.llvm.org/D18768 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D40381: Parse concept definition
saar.raz requested changes to this revision. saar.raz added a comment. This revision now requires changes to proceed. Do the requested clang-formatting as shown by hubert, other than that looks good to me :) https://reviews.llvm.org/D40381 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D33826: [clang-tidy] avoid pointer cast to more strict alignment check
lebedev.ri added a comment. Ping? Repository: rL LLVM https://reviews.llvm.org/D33826 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D39722: [ASTImporter] Support TypeTraitExpr Importing
This revision was automatically updated to reflect the committed changes. Closed by commit rL318998: [ASTImporter] Support TypeTraitExpr (authored by a.sidorin). Changed prior to commit: https://reviews.llvm.org/D39722?vs=124286&id=124309#toc Repository: rL LLVM https://reviews.llvm.org/D39722 Files: cfe/trunk/lib/AST/ASTImporter.cpp cfe/trunk/unittests/AST/ASTImporterTest.cpp Index: cfe/trunk/lib/AST/ASTImporter.cpp === --- cfe/trunk/lib/AST/ASTImporter.cpp +++ cfe/trunk/lib/AST/ASTImporter.cpp @@ -291,6 +291,7 @@ Expr *VisitCXXDefaultInitExpr(CXXDefaultInitExpr *E); Expr *VisitCXXNamedCastExpr(CXXNamedCastExpr *E); Expr *VisitSubstNonTypeTemplateParmExpr(SubstNonTypeTemplateParmExpr *E); +Expr *VisitTypeTraitExpr(TypeTraitExpr *E); template @@ -5890,6 +5891,26 @@ Replacement); } +Expr *ASTNodeImporter::VisitTypeTraitExpr(TypeTraitExpr *E) { + QualType ToType = Importer.Import(E->getType()); + if (ToType.isNull()) +return nullptr; + + SmallVector ToArgs(E->getNumArgs()); + if (ImportContainerChecked(E->getArgs(), ToArgs)) +return nullptr; + + // According to Sema::BuildTypeTrait(), if E is value-dependent, + // Value is always false. + bool ToValue = false; + if (!E->isValueDependent()) +ToValue = E->getValue(); + + return TypeTraitExpr::Create( + Importer.getToContext(), ToType, Importer.Import(E->getLocStart()), + E->getTrait(), ToArgs, Importer.Import(E->getLocEnd()), ToValue); +} + void ASTNodeImporter::ImportOverrides(CXXMethodDecl *ToMethod, CXXMethodDecl *FromMethod) { for (auto *FromOverriddenMethod : FromMethod->overridden_methods()) Index: cfe/trunk/unittests/AST/ASTImporterTest.cpp === --- cfe/trunk/unittests/AST/ASTImporterTest.cpp +++ cfe/trunk/unittests/AST/ASTImporterTest.cpp @@ -525,6 +525,47 @@ declRefExpr())); } +/// \brief Matches __builtin_types_compatible_p: +/// GNU extension to check equivalent types +/// Given +/// \code +/// __builtin_types_compatible_p(int, int) +/// \endcode +// will generate TypeTraitExpr <...> 'int' +const internal::VariadicDynCastAllOfMatcher typeTraitExpr; + +TEST(ImportExpr, ImportTypeTraitExpr) { + MatchVerifier Verifier; + EXPECT_TRUE(testImport("void declToImport() { " + " __builtin_types_compatible_p(int, int);" + "}", + Lang_C, "", Lang_C, Verifier, + functionDecl( + hasBody( + compoundStmt( + has( + typeTraitExpr(hasType(asString("int"); +} + +TEST(ImportExpr, ImportTypeTraitExprValDep) { + MatchVerifier Verifier; + EXPECT_TRUE(testImport("template struct declToImport {" + " void m() { __is_pod(T); }" + "};" + "void f() { declToImport().m(); }", + Lang_CXX11, "", Lang_CXX11, Verifier, + classTemplateDecl( + has( + cxxRecordDecl( + has( + functionDecl( + hasBody( + compoundStmt( + has( + typeTraitExpr( + hasType(booleanType()) + ))); +} } // end namespace ast_matchers } // end namespace clang Index: cfe/trunk/lib/AST/ASTImporter.cpp === --- cfe/trunk/lib/AST/ASTImporter.cpp +++ cfe/trunk/lib/AST/ASTImporter.cpp @@ -291,6 +291,7 @@ Expr *VisitCXXDefaultInitExpr(CXXDefaultInitExpr *E); Expr *VisitCXXNamedCastExpr(CXXNamedCastExpr *E); Expr *VisitSubstNonTypeTemplateParmExpr(SubstNonTypeTemplateParmExpr *E); +Expr *VisitTypeTraitExpr(TypeTraitExpr *E); template @@ -5890,6 +5891,26 @@ Replacement); } +Expr *ASTNodeImporter::VisitTypeTraitExpr(TypeTraitExpr *E) { + QualType ToType = Importer.Import(E->getType()); + if (ToType.isNull()) +return nullptr; + + SmallVector ToArgs(E->getNumArgs()); + if (ImportContainerChecked(E->getArgs(), ToArgs)) +return nullptr; + + // According to Sema::BuildTypeTrait(), if E is value-dependent, + // Value is always false. + bool ToValue = false; + if (!E->isValueDependent()) +ToValue = E->getValue(); + + return TypeTraitExpr::Create( + Importer.getToContext(), ToType, Importer.Import(E->getLocStart()), + E->getTrait(), ToArgs, Importer.Import(E->getLocEnd()), ToValue); +} + void ASTNodeImp
r318998 - [ASTImporter] Support TypeTraitExpr
Author: a.sidorin Date: Sun Nov 26 09:04:06 2017 New Revision: 318998 URL: http://llvm.org/viewvc/llvm-project?rev=318998&view=rev Log: [ASTImporter] Support TypeTraitExpr Patch by Takafumi Kubota! Differential Revision: https://reviews.llvm.org/D39722 Modified: cfe/trunk/lib/AST/ASTImporter.cpp cfe/trunk/unittests/AST/ASTImporterTest.cpp Modified: cfe/trunk/lib/AST/ASTImporter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=318998&r1=318997&r2=318998&view=diff == --- cfe/trunk/lib/AST/ASTImporter.cpp (original) +++ cfe/trunk/lib/AST/ASTImporter.cpp Sun Nov 26 09:04:06 2017 @@ -291,6 +291,7 @@ namespace clang { Expr *VisitCXXDefaultInitExpr(CXXDefaultInitExpr *E); Expr *VisitCXXNamedCastExpr(CXXNamedCastExpr *E); Expr *VisitSubstNonTypeTemplateParmExpr(SubstNonTypeTemplateParmExpr *E); +Expr *VisitTypeTraitExpr(TypeTraitExpr *E); template @@ -5890,6 +5891,26 @@ Expr *ASTNodeImporter::VisitSubstNonType Replacement); } +Expr *ASTNodeImporter::VisitTypeTraitExpr(TypeTraitExpr *E) { + QualType ToType = Importer.Import(E->getType()); + if (ToType.isNull()) +return nullptr; + + SmallVector ToArgs(E->getNumArgs()); + if (ImportContainerChecked(E->getArgs(), ToArgs)) +return nullptr; + + // According to Sema::BuildTypeTrait(), if E is value-dependent, + // Value is always false. + bool ToValue = false; + if (!E->isValueDependent()) +ToValue = E->getValue(); + + return TypeTraitExpr::Create( + Importer.getToContext(), ToType, Importer.Import(E->getLocStart()), + E->getTrait(), ToArgs, Importer.Import(E->getLocEnd()), ToValue); +} + void ASTNodeImporter::ImportOverrides(CXXMethodDecl *ToMethod, CXXMethodDecl *FromMethod) { for (auto *FromOverriddenMethod : FromMethod->overridden_methods()) Modified: cfe/trunk/unittests/AST/ASTImporterTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/AST/ASTImporterTest.cpp?rev=318998&r1=318997&r2=318998&view=diff == --- cfe/trunk/unittests/AST/ASTImporterTest.cpp (original) +++ cfe/trunk/unittests/AST/ASTImporterTest.cpp Sun Nov 26 09:04:06 2017 @@ -525,6 +525,47 @@ TEST(ImportType, ImportPackExpansion) { declRefExpr())); } +/// \brief Matches __builtin_types_compatible_p: +/// GNU extension to check equivalent types +/// Given +/// \code +/// __builtin_types_compatible_p(int, int) +/// \endcode +// will generate TypeTraitExpr <...> 'int' +const internal::VariadicDynCastAllOfMatcher typeTraitExpr; + +TEST(ImportExpr, ImportTypeTraitExpr) { + MatchVerifier Verifier; + EXPECT_TRUE(testImport("void declToImport() { " + " __builtin_types_compatible_p(int, int);" + "}", + Lang_C, "", Lang_C, Verifier, + functionDecl( + hasBody( + compoundStmt( + has( + typeTraitExpr(hasType(asString("int"); +} + +TEST(ImportExpr, ImportTypeTraitExprValDep) { + MatchVerifier Verifier; + EXPECT_TRUE(testImport("template struct declToImport {" + " void m() { __is_pod(T); }" + "};" + "void f() { declToImport().m(); }", + Lang_CXX11, "", Lang_CXX11, Verifier, + classTemplateDecl( + has( + cxxRecordDecl( + has( + functionDecl( + hasBody( + compoundStmt( + has( + typeTraitExpr( + hasType(booleanType()) + ))); +} } // end namespace ast_matchers } // end namespace clang ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D15935: Improve diagnostics for literal conversion to Boolean
aaron.ballman updated this revision to Diff 124308. aaron.ballman added a comment. Ping. Rebased on ToT. https://reviews.llvm.org/D15935 Files: include/clang/Basic/DiagnosticGroups.td include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaChecking.cpp test/Analysis/casts.c test/CXX/dcl.decl/dcl.init/dcl.init.list/p7-0x.cpp test/CXX/expr/expr.unary/expr.unary.op/p6.cpp test/Sema/exprs.c test/Sema/warn-string-conversion.c test/SemaCXX/condition.cpp test/SemaCXX/overload-call.cpp test/SemaCXX/warn-literal-conversion.cpp test/SemaCXX/warn-string-conversion.cpp test/SemaCXX/warn-thread-safety-analysis.cpp Index: test/SemaCXX/warn-thread-safety-analysis.cpp === --- test/SemaCXX/warn-thread-safety-analysis.cpp +++ test/SemaCXX/warn-thread-safety-analysis.cpp @@ -1054,8 +1054,8 @@ struct Bas { void operator& (Foo &) {} }; void mumble() { -Bas() & Bar().func() << "" << ""; -Bas() & Bar().func() << ""; +Bas() & Bar().func() << true << true; +Bas() & Bar().func() << true; } } // end namespace thread_annot_lock_61_modified Index: test/SemaCXX/warn-string-conversion.cpp === --- test/SemaCXX/warn-string-conversion.cpp +++ test/SemaCXX/warn-string-conversion.cpp @@ -1,24 +1,24 @@ -// RUN: %clang_cc1 -fsyntax-only -Wstring-conversion -verify %s +// RUN: %clang_cc1 -fsyntax-only -verify %s // Warn on cases where a string literal is converted into a bool. // An exception is made for this in logical and operators. void assert(bool condition); void test0() { - bool b0 = "hi"; // expected-warning{{implicit conversion turns string literal into bool: 'const char [3]' to 'bool'}} - b0 = ""; // expected-warning{{implicit conversion turns string literal into bool: 'const char [1]' to 'bool'}} - b0 = 0 || ""; // expected-warning{{implicit conversion turns string literal into bool: 'const char [1]' to 'bool'}} - b0 = "" || 0; // expected-warning{{implicit conversion turns string literal into bool: 'const char [1]' to 'bool'}} + bool b0 = "hi"; // expected-warning{{implicit conversion from 'const char [3]' to 'bool'; will always evaluate to 'true'}} + b0 = ""; // expected-warning{{implicit conversion from 'const char [1]' to 'bool'; will always evaluate to 'true'}} + b0 = 0 || ""; // expected-warning{{implicit conversion from 'const char [1]' to 'bool'; will always evaluate to 'true'}} + b0 = "" || 0; // expected-warning{{implicit conversion from 'const char [1]' to 'bool'; will always evaluate to 'true'}} b0 = 0 && ""; b0 = "" && 0; - assert("error"); // expected-warning{{implicit conversion turns string literal into bool: 'const char [6]' to 'bool'}} - assert(0 || "error"); // expected-warning{{implicit conversion turns string literal into bool: 'const char [6]' to 'bool'}} - assert("error" || 0); // expected-warning{{implicit conversion turns string literal into bool: 'const char [6]' to 'bool'}} + assert("error"); // expected-warning{{implicit conversion from 'const char [6]' to 'bool'; will always evaluate to 'true'}} + assert(0 || "error"); // expected-warning{{implicit conversion from 'const char [6]' to 'bool'; will always evaluate to 'true'}} + assert("error" || 0); // expected-warning{{implicit conversion from 'const char [6]' to 'bool'; will always evaluate to 'true'}} assert(0 && "error"); assert("error" && 0); - while("hi") {} // expected-warning{{implicit conversion turns string literal into bool: 'const char [3]' to 'bool'}} - do {} while("hi"); // expected-warning{{implicit conversion turns string literal into bool: 'const char [3]' to 'bool'}} - for (;"hi";); // expected-warning{{implicit conversion turns string literal into bool: 'const char [3]' to 'bool'}} - if("hi") {} // expected-warning{{implicit conversion turns string literal into bool: 'const char [3]' to 'bool'}} + while("hi") {} // expected-warning{{implicit conversion from 'const char [3]' to 'bool'; will always evaluate to 'true'}} + do {} while("hi"); // expected-warning{{implicit conversion from 'const char [3]' to 'bool'; will always evaluate to 'true'}} + for (;"hi";); // expected-warning{{implicit conversion from 'const char [3]' to 'bool'; will always evaluate to 'true'}} + if("hi") {} // expected-warning{{implicit conversion from 'const char [3]' to 'bool'; will always evaluate to 'true'}} } Index: test/SemaCXX/warn-literal-conversion.cpp === --- test/SemaCXX/warn-literal-conversion.cpp +++ test/SemaCXX/warn-literal-conversion.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -Wliteral-conversion -verify %s +// RUN: %clang_cc1 -fsyntax-only -Wliteral-conversion -std=c++1z -verify %s void foo(int y); @@ -42,10 +42,26 @@ // Similarly, test floating point conversion to bool. Only float values of zero // are converted to false; everything else is
[PATCH] D39430: [clangd] formatting: don't ignore style
rwols added inline comments. Comment at: clangd/ClangdUnit.cpp:168 - P.line = Location.getSpellingLineNumber() - 1; - P.character = Location.getSpellingColumnNumber(); Range R = {P, P}; Why subtract 1 from the line here, but not from the column? When subtracting 1 from both, diagnostics appear correct in my client. I have moved this logic into `SourceLocToPosition`. https://reviews.llvm.org/D39430 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D39430: [clangd] formatting: don't ignore style
rwols updated this revision to Diff 124307. rwols added a comment. - Rebase to latest upstream revision. - Go all-in with TextEdit, even down to ClangdUnit.cpp. - Move FixItsMap to ClangdServer. ClangdLSPServer is much cleaner now. - Remove the cached FixIts when the client closes the document. - Fix (or introduce bug?) wrong conversion between clang line/columns and LSP line/columns. From what I understand, clang line/cols are 1-based, and LSP line/cols are 0-based. The line numbers were already converted correctly (subtracting 1 when going from clang line numbers to LSP line numbers), but the column numbers were not converted correctly. Consequently, a bunch of tests had to be adjusted for the correct (or wrong?) column numbers. https://reviews.llvm.org/D39430 Files: clangd/ClangdLSPServer.cpp clangd/ClangdLSPServer.h clangd/ClangdServer.cpp clangd/ClangdServer.h clangd/ClangdUnit.cpp clangd/ClangdUnit.h clangd/JSONRPCDispatcher.cpp clangd/JSONRPCDispatcher.h test/clangd/diagnostics.test test/clangd/execute-command.test test/clangd/extra-flags.test test/clangd/fixits.test Index: test/clangd/fixits.test === --- test/clangd/fixits.test +++ test/clangd/fixits.test @@ -15,11 +15,11 @@ # CHECK-NEXT:"message": "using the result of an assignment as a condition without parentheses", # CHECK-NEXT:"range": { # CHECK-NEXT: "end": { -# CHECK-NEXT:"character": 35, +# CHECK-NEXT:"character": 34, # CHECK-NEXT:"line": 0 # CHECK-NEXT: }, # CHECK-NEXT: "start": { -# CHECK-NEXT:"character": 35, +# CHECK-NEXT:"character": 34, # CHECK-NEXT:"line": 0 # CHECK-NEXT: } # CHECK-NEXT:}, @@ -29,11 +29,11 @@ # CHECK-NEXT:"message": "place parentheses around the assignment to silence this warning", # CHECK-NEXT:"range": { # CHECK-NEXT: "end": { -# CHECK-NEXT:"character": 35, +# CHECK-NEXT:"character": 34, # CHECK-NEXT:"line": 0 # CHECK-NEXT: }, # CHECK-NEXT: "start": { -# CHECK-NEXT:"character": 35, +# CHECK-NEXT:"character": 34, # CHECK-NEXT:"line": 0 # CHECK-NEXT: } # CHECK-NEXT:}, @@ -43,11 +43,11 @@ # CHECK-NEXT:"message": "use '==' to turn this assignment into an equality comparison", # CHECK-NEXT:"range": { # CHECK-NEXT: "end": { -# CHECK-NEXT:"character": 35, +# CHECK-NEXT:"character": 34, # CHECK-NEXT:"line": 0 # CHECK-NEXT: }, # CHECK-NEXT: "start": { -# CHECK-NEXT:"character": 35, +# CHECK-NEXT:"character": 34, # CHECK-NEXT:"line": 0 # CHECK-NEXT: } # CHECK-NEXT:}, @@ -58,7 +58,7 @@ # CHECK-NEXT: } Content-Length: 746 -{"jsonrpc":"2.0","id":2,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///foo.c"},"range":{"start":{"line":104,"character":13},"end":{"line":0,"character":35}},"context":{"diagnostics":[{"range":{"start": {"line": 0, "character": 35}, "end": {"line": 0, "character": 35}},"severity":2,"message":"using the result of an assignment as a condition without parentheses"},{"range":{"start": {"line": 0, "character": 35}, "end": {"line": 0, "character": 35}},"severity":3,"message":"place parentheses around the assignment to silence this warning"},{"range":{"start": {"line": 0, "character": 35}, "end": {"line": 0, "character": 35}},"severity":3,"message":"use '==' to turn this assignment into an equality comparison"}]}}} +{"jsonrpc":"2.0","id":2,"method":"textDocument/codeAction","params":{"textDocument":{"uri":"file:///foo.c"},"range":{"start":{"line":104,"character":13},"end":{"line":0,"character":34}},"context":{"diagnostics":[{"range":{"start": {"line": 0, "character": 34}, "end": {"line": 0, "character": 34}},"severity":2,"message":"using the result of an assignment as a condition without parentheses"},{"range":{"start": {"line": 0, "character": 34}, "end": {"line": 0, "character": 34}},"severity":3,"message":"place parentheses around the assignment to silence this warning"},{"range":{"start": {"line": 0, "character": 34}, "end": {"line": 0, "character": 34}},"severity":3,"message":"use '==' to turn this assignment into an equality comparison"}]}}} # CHECK: "id": 2, # CHECK-NEXT: "jsonrpc": "2.0", # CHECK-NEXT: "result": [ @@ -109,7 +109,7 @@ # CHECK-NEXT:"newText": "==", # CHECK-NEXT:"range": { # CHECK-NEXT: "end": { -# CHECK-NEXT:"character": 35, +# CHECK-NEXT:"character": 34, # CHECK-NEXT:"line": 0 # CHECK-NEXT: }, # CHECK-NEXT: "start": { @@ -128,7 +128,7 @@ # CHECK-NEXT: ] Content-Length: 771 -{"jsonrpc":"2
[PATCH] D40225: Add -std=c17 as a flag
aaron.ballman added a comment. Ping https://reviews.llvm.org/D40225 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D39665: Support __has_c_attribute
aaron.ballman added a comment. Ping https://reviews.llvm.org/D39665 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D38843: [ASTImporter] Support importing CXXPseudoDestructorExpr
a.sidorin accepted this revision. a.sidorin added a comment. This revision is now accepted and ready to land. Looks good, thank you! https://reviews.llvm.org/D38843 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D40381: Parse concept definition
Rakete added inline comments. Comment at: lib/Sema/SemaTemplate.cpp:7693 +Decl *Sema::ActOnConceptDefinition(Scope *S, + MultiTemplateParamsArg TemplateParameterLists, + IdentifierInfo *Name, SourceLocation L, hubert.reinterpretcast wrote: > changyu wrote: > > Rakete wrote: > > > Did you run this through clang-format? > > No, when I run the file through clang-format (with no arguments except the > > file), it reformats the whole file. How should I be running clang-format? > One workflow that works is to clang-format the base file, clang-format with > your changes, grab a patch and then apply it to the original base file > (probably needs some manual work). I always copy the code I want to format, then pipe it into clang-format, and the paste it back with some manual adjustments to indentation. https://reviews.llvm.org/D40381 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r318995 - Control-Flow Enforcement Technology - Shadow Stack and Indirect Branch Tracking support (Clang side)
Author: orenb Date: Sun Nov 26 04:34:54 2017 New Revision: 318995 URL: http://llvm.org/viewvc/llvm-project?rev=318995&view=rev Log: Control-Flow Enforcement Technology - Shadow Stack and Indirect Branch Tracking support (Clang side) Shadow stack solution introduces a new stack for return addresses only. The stack has a Shadow Stack Pointer (SSP) that points to the last address to which we expect to return. If we return to a different address an exception is triggered. This patch includes shadow stack intrinsics as well as the corresponding CET header. It includes CET clang flags for shadow stack and Indirect Branch Tracking. For more information, please see the following: https://software.intel.com/sites/default/files/managed/4d/2a/control-flow-enforcement-technology-preview.pdf Differential Revision: https://reviews.llvm.org/D40224 Change-Id: I79ad0925a028bbc94c8ecad75f6daa2f214171f1 Added: cfe/trunk/lib/Headers/cetintrin.h cfe/trunk/test/CodeGen/cetintrin.c Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def cfe/trunk/include/clang/Basic/BuiltinsX86_64.def cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Basic/Targets/X86.cpp cfe/trunk/lib/Basic/Targets/X86.h cfe/trunk/lib/Headers/CMakeLists.txt cfe/trunk/lib/Headers/immintrin.h cfe/trunk/test/CodeGen/builtins-x86.c cfe/trunk/test/Driver/x86-target-features.c cfe/trunk/test/Preprocessor/x86_target_features.c Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=318995&r1=318994&r2=318995&view=diff == --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original) +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Sun Nov 26 04:34:54 2017 @@ -638,6 +638,16 @@ TARGET_BUILTIN(__builtin_ia32_xrstors, " TARGET_BUILTIN(__builtin_ia32_xsavec, "vv*ULLi", "", "xsavec") TARGET_BUILTIN(__builtin_ia32_xsaves, "vv*ULLi", "", "xsaves") +// SHSTK +TARGET_BUILTIN(__builtin_ia32_incsspd, "vUi", "u", "shstk") +TARGET_BUILTIN(__builtin_ia32_rdsspd, "UiUi", "Un", "shstk") +TARGET_BUILTIN(__builtin_ia32_saveprevssp, "v", "", "shstk") +TARGET_BUILTIN(__builtin_ia32_rstorssp, "vv*", "", "shstk") +TARGET_BUILTIN(__builtin_ia32_wrssd, "vUiv*", "", "shstk") +TARGET_BUILTIN(__builtin_ia32_wrussd, "vUiv*", "", "shstk") +TARGET_BUILTIN(__builtin_ia32_setssbsy, "v", "", "shstk") +TARGET_BUILTIN(__builtin_ia32_clrssbsy, "vv*", "", "shstk") + //CLFLUSHOPT TARGET_BUILTIN(__builtin_ia32_clflushopt, "vvC*", "", "clflushopt") Modified: cfe/trunk/include/clang/Basic/BuiltinsX86_64.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86_64.def?rev=318995&r1=318994&r2=318995&view=diff == --- cfe/trunk/include/clang/Basic/BuiltinsX86_64.def (original) +++ cfe/trunk/include/clang/Basic/BuiltinsX86_64.def Sun Nov 26 04:34:54 2017 @@ -60,6 +60,10 @@ TARGET_BUILTIN(__builtin_ia32_xsaveopt64 TARGET_BUILTIN(__builtin_ia32_xrstors64, "vv*ULLi", "", "xsaves") TARGET_BUILTIN(__builtin_ia32_xsavec64, "vv*ULLi", "", "xsavec") TARGET_BUILTIN(__builtin_ia32_xsaves64, "vv*ULLi", "", "xsaves") +TARGET_BUILTIN(__builtin_ia32_incsspq, "vULLi", "u", "shstk") +TARGET_BUILTIN(__builtin_ia32_rdsspq, "ULLiULLi", "Un", "shstk") +TARGET_BUILTIN(__builtin_ia32_wrssq, "vULLiv*", "", "shstk") +TARGET_BUILTIN(__builtin_ia32_wrussq, "vULLiv*", "", "shstk") TARGET_BUILTIN(__builtin_ia32_addcarryx_u64, "UcUcULLiULLiULLi*", "", "adx") TARGET_BUILTIN(__builtin_ia32_addcarry_u64, "UcUcULLiULLiULLi*", "", "") TARGET_BUILTIN(__builtin_ia32_subborrow_u64, "UcUcULLiULLiULLi*", "", "") Modified: cfe/trunk/include/clang/Driver/Options.td URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=318995&r1=318994&r2=318995&view=diff == --- cfe/trunk/include/clang/Driver/Options.td (original) +++ cfe/trunk/include/clang/Driver/Options.td Sun Nov 26 04:34:54 2017 @@ -2537,7 +2537,10 @@ def mxsaveopt : Flag<["-"], "mxsaveopt"> def mno_xsaveopt : Flag<["-"], "mno-xsaveopt">, Group; def mxsaves : Flag<["-"], "mxsaves">, Group; def mno_xsaves : Flag<["-"], "mno-xsaves">, Group; - +def mshstk : Flag<["-"], "mshstk">, Group; +def mno_shstk : Flag<["-"], "mno-shstk">, Group; +def mibt : Flag<["-"], "mibt">, Group; +def mno_ibt : Flag<["-"], "mno-ibt">, Group; // These are legacy user-facing driver-level option spellings. They are always // aliases for options that are spelled using the more common Unix / GNU flag Modified: cfe/trunk/lib/Basic/Targets/X86.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets/X86.cpp?rev=318995&r1=318994&r2=318995&view=diff == --- cfe/trunk/lib/Basic/Tar
[PATCH] D40224: [X86] Control-Flow Enforcement Technology - Shadow Stack and Indirect Branch Tracking support (Clang side)
This revision was automatically updated to reflect the committed changes. Closed by commit rL318995: Control-Flow Enforcement Technology - Shadow Stack and Indirect Branch Tracking… (authored by orenb). Changed prior to commit: https://reviews.llvm.org/D40224?vs=123937&id=124287#toc Repository: rL LLVM https://reviews.llvm.org/D40224 Files: cfe/trunk/include/clang/Basic/BuiltinsX86.def cfe/trunk/include/clang/Basic/BuiltinsX86_64.def cfe/trunk/include/clang/Driver/Options.td cfe/trunk/lib/Basic/Targets/X86.cpp cfe/trunk/lib/Basic/Targets/X86.h cfe/trunk/lib/Headers/CMakeLists.txt cfe/trunk/lib/Headers/cetintrin.h cfe/trunk/lib/Headers/immintrin.h cfe/trunk/test/CodeGen/builtins-x86.c cfe/trunk/test/CodeGen/cetintrin.c cfe/trunk/test/Driver/x86-target-features.c cfe/trunk/test/Preprocessor/x86_target_features.c Index: cfe/trunk/include/clang/Driver/Options.td === --- cfe/trunk/include/clang/Driver/Options.td +++ cfe/trunk/include/clang/Driver/Options.td @@ -2537,7 +2537,10 @@ def mno_xsaveopt : Flag<["-"], "mno-xsaveopt">, Group; def mxsaves : Flag<["-"], "mxsaves">, Group; def mno_xsaves : Flag<["-"], "mno-xsaves">, Group; - +def mshstk : Flag<["-"], "mshstk">, Group; +def mno_shstk : Flag<["-"], "mno-shstk">, Group; +def mibt : Flag<["-"], "mibt">, Group; +def mno_ibt : Flag<["-"], "mno-ibt">, Group; // These are legacy user-facing driver-level option spellings. They are always // aliases for options that are spelled using the more common Unix / GNU flag Index: cfe/trunk/include/clang/Basic/BuiltinsX86_64.def === --- cfe/trunk/include/clang/Basic/BuiltinsX86_64.def +++ cfe/trunk/include/clang/Basic/BuiltinsX86_64.def @@ -60,6 +60,10 @@ TARGET_BUILTIN(__builtin_ia32_xrstors64, "vv*ULLi", "", "xsaves") TARGET_BUILTIN(__builtin_ia32_xsavec64, "vv*ULLi", "", "xsavec") TARGET_BUILTIN(__builtin_ia32_xsaves64, "vv*ULLi", "", "xsaves") +TARGET_BUILTIN(__builtin_ia32_incsspq, "vULLi", "u", "shstk") +TARGET_BUILTIN(__builtin_ia32_rdsspq, "ULLiULLi", "Un", "shstk") +TARGET_BUILTIN(__builtin_ia32_wrssq, "vULLiv*", "", "shstk") +TARGET_BUILTIN(__builtin_ia32_wrussq, "vULLiv*", "", "shstk") TARGET_BUILTIN(__builtin_ia32_addcarryx_u64, "UcUcULLiULLiULLi*", "", "adx") TARGET_BUILTIN(__builtin_ia32_addcarry_u64, "UcUcULLiULLiULLi*", "", "") TARGET_BUILTIN(__builtin_ia32_subborrow_u64, "UcUcULLiULLiULLi*", "", "") Index: cfe/trunk/include/clang/Basic/BuiltinsX86.def === --- cfe/trunk/include/clang/Basic/BuiltinsX86.def +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def @@ -638,6 +638,16 @@ TARGET_BUILTIN(__builtin_ia32_xsavec, "vv*ULLi", "", "xsavec") TARGET_BUILTIN(__builtin_ia32_xsaves, "vv*ULLi", "", "xsaves") +// SHSTK +TARGET_BUILTIN(__builtin_ia32_incsspd, "vUi", "u", "shstk") +TARGET_BUILTIN(__builtin_ia32_rdsspd, "UiUi", "Un", "shstk") +TARGET_BUILTIN(__builtin_ia32_saveprevssp, "v", "", "shstk") +TARGET_BUILTIN(__builtin_ia32_rstorssp, "vv*", "", "shstk") +TARGET_BUILTIN(__builtin_ia32_wrssd, "vUiv*", "", "shstk") +TARGET_BUILTIN(__builtin_ia32_wrussd, "vUiv*", "", "shstk") +TARGET_BUILTIN(__builtin_ia32_setssbsy, "v", "", "shstk") +TARGET_BUILTIN(__builtin_ia32_clrssbsy, "vv*", "", "shstk") + //CLFLUSHOPT TARGET_BUILTIN(__builtin_ia32_clflushopt, "vvC*", "", "clflushopt") Index: cfe/trunk/test/CodeGen/builtins-x86.c === --- cfe/trunk/test/CodeGen/builtins-x86.c +++ cfe/trunk/test/CodeGen/builtins-x86.c @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -DUSE_64 -triple x86_64-unknown-unknown -target-feature +fxsr -target-feature +avx -target-feature +xsaveopt -target-feature +xsaves -target-feature +xsavec -target-feature +mwaitx -target-feature +clzero -emit-llvm -o %t %s -// RUN: %clang_cc1 -DUSE_ALL -triple x86_64-unknown-unknown -target-feature +fxsr -target-feature +avx -target-feature +xsaveopt -target-feature +xsaves -target-feature +xsavec -target-feature +mwaitx -target-feature +clzero -fsyntax-only -o %t %s +// RUN: %clang_cc1 -DUSE_64 -triple x86_64-unknown-unknown -target-feature +fxsr -target-feature +avx -target-feature +xsaveopt -target-feature +xsaves -target-feature +xsavec -target-feature +mwaitx -target-feature +clzero -target-feature +ibt -target-feature +shstk -emit-llvm -o %t %s +// RUN: %clang_cc1 -DUSE_ALL -triple x86_64-unknown-unknown -target-feature +fxsr -target-feature +avx -target-feature +xsaveopt -target-feature +xsaves -target-feature +xsavec -target-feature +mwaitx -target-feature +ibt -target-feature +shstk -target-feature +clzero -fsyntax-only -o %t %s #ifdef USE_ALL #define USE_3DNOW @@ -257,6 +257,19 @@ tmp_V8c = __builtin_ia32_packuswb(tmp_V4s, tmp_V4s); tmp_i = __builtin_ia32_vec_ext_v2si(tmp_V2i, 0); + __builtin_ia32_incsspd(tmp_Ui); + __builtin_ia32_incsspq(tmp_ULLi);
[PATCH] D39722: [ASTImporter] Support TypeTraitExpr Importing
a.sidorin accepted this revision. a.sidorin added a comment. Thank you! https://reviews.llvm.org/D39722 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D39722: [ASTImporter] Support TypeTraitExpr Importing
tk1012 updated this revision to Diff 124286. tk1012 added a comment. Hello there, I update the diff to follow your comments. https://reviews.llvm.org/D39722 Files: lib/AST/ASTImporter.cpp unittests/AST/ASTImporterTest.cpp Index: unittests/AST/ASTImporterTest.cpp === --- unittests/AST/ASTImporterTest.cpp +++ unittests/AST/ASTImporterTest.cpp @@ -525,6 +525,47 @@ declRefExpr())); } +/// \brief Matches __builtin_types_compatible_p: +/// GNU extension to check equivalent types +/// Given +/// \code +/// __builtin_types_compatible_p(int, int) +/// \endcode +// will generate TypeTraitExpr <...> 'int' +const internal::VariadicDynCastAllOfMatcher typeTraitExpr; + +TEST(ImportExpr, ImportTypeTraitExpr) { + MatchVerifier Verifier; + EXPECT_TRUE(testImport("void declToImport() { " + " __builtin_types_compatible_p(int, int);" + "}", + Lang_C, "", Lang_C, Verifier, + functionDecl( + hasBody( + compoundStmt( + has( + typeTraitExpr(hasType(asString("int"); +} + +TEST(ImportExpr, ImportTypeTraitExprValDep) { + MatchVerifier Verifier; + EXPECT_TRUE(testImport("template struct declToImport {" + " void m() { __is_pod(T); }" + "};" + "void f() { declToImport().m(); }", + Lang_CXX11, "", Lang_CXX11, Verifier, + classTemplateDecl( + has( + cxxRecordDecl( + has( + functionDecl( + hasBody( + compoundStmt( + has( + typeTraitExpr( + hasType(booleanType()) + ))); +} } // end namespace ast_matchers } // end namespace clang Index: lib/AST/ASTImporter.cpp === --- lib/AST/ASTImporter.cpp +++ lib/AST/ASTImporter.cpp @@ -283,6 +283,7 @@ Expr *VisitCXXDefaultInitExpr(CXXDefaultInitExpr *E); Expr *VisitCXXNamedCastExpr(CXXNamedCastExpr *E); Expr *VisitSubstNonTypeTemplateParmExpr(SubstNonTypeTemplateParmExpr *E); +Expr *VisitTypeTraitExpr(TypeTraitExpr *E); template @@ -5612,6 +5613,26 @@ Replacement); } +Expr *ASTNodeImporter::VisitTypeTraitExpr(TypeTraitExpr *E) { + QualType ToType = Importer.Import(E->getType()); + if (ToType.isNull()) +return nullptr; + + SmallVector ToArgs(E->getNumArgs()); + if (ImportContainerChecked(E->getArgs(), ToArgs)) +return nullptr; + + // According to Sema::BuildTypeTrait(), if E is value-dependent, + // Value is always false. + bool ToValue = false; + if (!E->isValueDependent()) +ToValue = E->getValue(); + + return TypeTraitExpr::Create( + Importer.getToContext(), ToType, Importer.Import(E->getLocStart()), + E->getTrait(), ToArgs, Importer.Import(E->getLocEnd()), ToValue); +} + void ASTNodeImporter::ImportOverrides(CXXMethodDecl *ToMethod, CXXMethodDecl *FromMethod) { for (auto *FromOverriddenMethod : FromMethod->overridden_methods()) Index: unittests/AST/ASTImporterTest.cpp === --- unittests/AST/ASTImporterTest.cpp +++ unittests/AST/ASTImporterTest.cpp @@ -525,6 +525,47 @@ declRefExpr())); } +/// \brief Matches __builtin_types_compatible_p: +/// GNU extension to check equivalent types +/// Given +/// \code +/// __builtin_types_compatible_p(int, int) +/// \endcode +// will generate TypeTraitExpr <...> 'int' +const internal::VariadicDynCastAllOfMatcher typeTraitExpr; + +TEST(ImportExpr, ImportTypeTraitExpr) { + MatchVerifier Verifier; + EXPECT_TRUE(testImport("void declToImport() { " + " __builtin_types_compatible_p(int, int);" + "}", + Lang_C, "", Lang_C, Verifier, + functionDecl( + hasBody( + compoundStmt( + has( + typeTraitExpr(hasType(asString("int"); +} + +TEST(ImportExpr, ImportTypeTraitExprValDep) { + MatchVerifier Verifier; + EXPECT_TRUE(testImport("template struct declToImport {" + " void m() { __is_pod(T); }" + "};" + "void f() { declToImport().m(); }", + Lang_CXX11, "
[PATCH] D40463: [analyzer] Fix false negative on post-increment of uninitialized variable.
xazax.hun added a subscriber: NoQ. xazax.hun added inline comments. Comment at: docs/ReleaseNotes.rst:261 +- Static Analyzer can now properly detect and diagnose unary pre-/post- + increment/decrement on an uninitialized values. + lebedev.ri wrote: > JonasToth wrote: > > The end of the sentence should be either 'on uninitialized values' or 'on > > an uninitialized values'. > > The end of the sentence should be either 'on uninitialized values' or 'on > > an uninitialized values'. > But it is already `on an uninitialized values.` ? Maybe Jonas was thinking if removing the plural form if you having `an` or of you want to keep it plural remove the `an`. Comment at: lib/StaticAnalyzer/Core/ExprEngineC.cpp:1048 + + // directly perform the store. needed for uninitialized value detection. + Bldr.takeNodes(*I); Comments should be whole sentences starting with capital letters. Comment at: lib/StaticAnalyzer/Core/ExprEngineC.cpp:1051 + ExplodedNodeSet Dst3; + evalStore(Dst3, U, U, *I, state, loc, V2_untested); + Bldr.addNodes(Dst3); This will trigger checkBind when unknown value is pre/post incremented. I wonder if this is the desired behavior. Couldn't you achieve the same on the checker side by having a checkPreStmt hook? @NoQ, @dcoughlin what do you think about triggering checkBind here? In fact, there is a bind during pre/post increment/decrement. But do we want these events to be visible for checkers with undefined values? Comment at: test/Analysis/malloc-plist.c:2 // RUN: rm -f %t // RUN: %clang_analyze_cc1 -fblocks -analyzer-checker=core,unix.Malloc -analyzer-output=plist -analyzer-config path-diagnostics-alternate=false -o %t %s // RUN: FileCheck -input-file %t %s In case you willing to replace the plist based test with `-analyzer-output=text` based, it would be awesome, though not required for this patch to be accepted. Repository: rL LLVM https://reviews.llvm.org/D40463 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D40463: [analyzer] Fix false negative on post-increment of uninitialized variable.
JonasToth added inline comments. Comment at: docs/ReleaseNotes.rst:261 +- Static Analyzer can now properly detect and diagnose unary pre-/post- + increment/decrement on an uninitialized values. + lebedev.ri wrote: > JonasToth wrote: > > The end of the sentence should be either 'on uninitialized values' or 'on > > an uninitialized values'. > > The end of the sentence should be either 'on uninitialized values' or 'on > > an uninitialized values'. > But it is already `on an uninitialized values.` ? Sorry, my tablet autocompleted :( With 'an' values needs to be singular 'an' -> 'value'. If you want 'values' drop the 'an'. Repository: rL LLVM https://reviews.llvm.org/D40463 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D38845: [ASTImporter] Support importing UnresolvedMemberExpr, DependentNameType, DependentScopeDeclRefExpr
a.sidorin accepted this revision. a.sidorin added a comment. This revision is now accepted and ready to land. Hello Peter, This looks good to me. But could you please check if test works if we add `-fms-compatibility` and `-fdelayed-template-parsing` to `Args`? Comment at: unittests/AST/ASTImporterTest.cpp:611 + EXPECT_TRUE(testImport("template struct S;" + "template void declToImport() {" + " S::foo;" Uninstantiated templates make me worry about Windows buildbots. If they will start to fail, we should test these matchers with `-fms-compatibility` and `-fdelayed-template-parsing` options enabled. https://reviews.llvm.org/D38845 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D39722: [ASTImporter] Support TypeTraitExpr Importing
a.sidorin added a comment. LGTM, thank you! Comment at: unittests/AST/ASTImporterTest.cpp:566 + typeTraitExpr( + hasType(asString("_Bool")) + ))); aaron.ballman wrote: > Is this type actually correct for C++? I would expect that for C code, but > not for C++. hasType(booleanType())? https://reviews.llvm.org/D39722 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D40463: [analyzer] Fix false negative on post-increment of uninitialized variable.
lebedev.ri added inline comments. Comment at: docs/ReleaseNotes.rst:261 +- Static Analyzer can now properly detect and diagnose unary pre-/post- + increment/decrement on an uninitialized values. + JonasToth wrote: > The end of the sentence should be either 'on uninitialized values' or 'on an > uninitialized values'. > The end of the sentence should be either 'on uninitialized values' or 'on an > uninitialized values'. But it is already `on an uninitialized values.` ? Repository: rL LLVM https://reviews.llvm.org/D40463 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D40463: [analyzer] Fix false negative on post-increment of uninitialized variable.
JonasToth added inline comments. Comment at: docs/ReleaseNotes.rst:261 +- Static Analyzer can now properly detect and diagnose unary pre-/post- + increment/decrement on an uninitialized values. + The end of the sentence should be either 'on uninitialized values' or 'on an uninitialized values'. Repository: rL LLVM https://reviews.llvm.org/D40463 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits