ziyig created this revision. ziyig added reviewers: gbiv, aaron.ballman. Herald added a reviewer: george.burgess.iv. Herald added subscribers: cfe-commits, kristina. Herald added a project: clang.
Add new warning -Walloca for use of builtin alloca function. Also warns the use of __builtin_alloca_with_align. GCC has this warning, and we'd like to have this for compatibility. Repository: rC Clang https://reviews.llvm.org/D64883 Files: clang/include/clang/Basic/DiagnosticSemaKinds.td clang/lib/Sema/SemaChecking.cpp clang/test/Sema/warn-alloca.c Index: clang/test/Sema/warn-alloca.c =================================================================== --- /dev/null +++ clang/test/Sema/warn-alloca.c @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -Walloca %s + +void test1(int a) { + __builtin_alloca(a); // expected-warning {{use of builtin function __builtin_alloca}} +} + +void test2(int a) { + __builtin_alloca_with_align(a, 32); // expected-warning {{use of builtin function __builtin_alloca_with_align}} +} + Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -1169,6 +1169,10 @@ case Builtin::BI__builtin_alloca_with_align: if (SemaBuiltinAllocaWithAlign(TheCall)) return ExprError(); + LLVM_FALLTHROUGH; + case Builtin::BI__builtin_alloca: + Diag(TheCall->getBeginLoc(), diag::warn_alloca) + << Context.BuiltinInfo.getName(BuiltinID); break; case Builtin::BI__assume: case Builtin::BI__builtin_assume: Index: clang/include/clang/Basic/DiagnosticSemaKinds.td =================================================================== --- clang/include/clang/Basic/DiagnosticSemaKinds.td +++ clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -2772,6 +2772,10 @@ def err_cannot_find_suitable_accessor : Error< "cannot find suitable %select{getter|setter}0 for property %1">; +def warn_alloca : Warning< + "use of builtin function %0">, + InGroup<DiagGroup<"alloca">>, DefaultIgnore; + def warn_alloca_align_alignof : Warning< "second argument to __builtin_alloca_with_align is supposed to be in bits">, InGroup<DiagGroup<"alloca-with-align-alignof">>;
Index: clang/test/Sema/warn-alloca.c =================================================================== --- /dev/null +++ clang/test/Sema/warn-alloca.c @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -Walloca %s + +void test1(int a) { + __builtin_alloca(a); // expected-warning {{use of builtin function __builtin_alloca}} +} + +void test2(int a) { + __builtin_alloca_with_align(a, 32); // expected-warning {{use of builtin function __builtin_alloca_with_align}} +} + Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -1169,6 +1169,10 @@ case Builtin::BI__builtin_alloca_with_align: if (SemaBuiltinAllocaWithAlign(TheCall)) return ExprError(); + LLVM_FALLTHROUGH; + case Builtin::BI__builtin_alloca: + Diag(TheCall->getBeginLoc(), diag::warn_alloca) + << Context.BuiltinInfo.getName(BuiltinID); break; case Builtin::BI__assume: case Builtin::BI__builtin_assume: Index: clang/include/clang/Basic/DiagnosticSemaKinds.td =================================================================== --- clang/include/clang/Basic/DiagnosticSemaKinds.td +++ clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -2772,6 +2772,10 @@ def err_cannot_find_suitable_accessor : Error< "cannot find suitable %select{getter|setter}0 for property %1">; +def warn_alloca : Warning< + "use of builtin function %0">, + InGroup<DiagGroup<"alloca">>, DefaultIgnore; + def warn_alloca_align_alignof : Warning< "second argument to __builtin_alloca_with_align is supposed to be in bits">, InGroup<DiagGroup<"alloca-with-align-alignof">>;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits